Если $
всегда в одной строке, то часто лучше использовать f
& t
для создания пользовательских текстовых объектов.
xnoremap a$ :<c-u>normal! F$vf$"<cr>
onoremap a$ :normal va$<cr>
Если ваш текстовый объект проходит через несколько строк, вам нужно выполнить какой-то поиск. Вот пример использования search()
, который не меняет регистр поиска.
xnoremap a$ :<c-u>call search('\$', 'bcW')<cr>m<:call search('\$', 'W')<cr>m>gv
onoremap a$ :normal va$<cr>
Как сказал @ViVeteran, вы также можете использовать :keeppatterns
с /
или ?
, чтобы избежать изменений в регистре поиска и истории.
xnoremap :<c-u>execute "keeppatterns normal! ?\\$\<cr>v/\\$"<cr>
onoremap a$ :normal va$<cr>
Примечание: :keeppatterns
требуется Vim 7.4.083 +
Для более сложных пользовательских текстовых объектов есть vim-textobj-user . Возможно, вы захотите взглянуть на vim-textobj-latex , который использует vim-textobject-user для создания ассортимента текстовых объектов, специфичных для латекса.
Для получения дополнительной помощи см .:
:h Operator-pending
:h :map-modes
:h c_CTRL-U
:h search()
:h :keeppatterns