Как ограничить операции определенными строками? - PullRequest
1 голос
/ 30 марта 2010

Мне нужно поработать над некоторыми относительно большими файлами кода в vim.

Как ограничить некоторые операции, такие как find-next normal-n и другие, определенной функцией / блоком?

Как я мог бы визуально узнать, находится ли я в этом блоке или вне его?

Взгляд и номера строк кажутся неудобными, особенно потому, что номера строк, с которыми мне нужно работать, обычно имеют длину 5 цифр!

Ответы [ 4 ]

3 голосов
/ 30 марта 2010

Вы можете установить метки в начале и конце вашего блока, используя m (например, ma, mb), а затем ссылаться на них в диапазоне команды ex как :'a,'b.

Как и bignose сказал , вы можете использовать визуальный блок для создания неявной области для команды, которую можно передать команде ex с помощью :'<,'>

Вы также можете использовать регулярные выражения для разделения блока (например, для всех строк между start и end используйте :/start/,/end/

Например, чтобы сделать замену в диапазоне строк:

:'<,'>s/foo/bar/g
:'a,'bs/baz/quux/g
:/harpo/,/chico/s/zeppo/groucho/g

Запоминается последний визуально выбранный диапазон, поэтому его можно использовать повторно, не выбирая повторно.

Подробнее о диапазонах см. :help range

Вы можете дополнительно ограничить себя в пределах диапазона, используя g//. Например, если вы хотите заменить foo на bar только в строках, содержащих baz в выбранном диапазоне:

:'<,'>g/baz/s/foo/bar/g

Когда вы определяете новую команду ex, вы можете передать диапазон, заданный для ex-команды, используя <line1>,<line2>. См. :help user-commands для получения дополнительной информации об определении бывших команд.

Внутри функции vimscript вы можете получить доступ к неявно переданному диапазону, используя a:firstline и a:lastline. Вы можете определить свой текущий номер белья, используя line('.'), и определить, находитесь ли вы внутри блока, используя обычную логическую логику (a:firstline <= line('.') && line('.') <= a:lastline). См. :help functions, чтобы узнать больше о функциях vimscript.


Другой подход заключается в использовании внутренних i и одиночных a селекторов vim. Например, чтобы удалить всю строку в двойных кавычках, используйте da" в обычном режиме. Чтобы оставить цитаты, используйте di". Подробнее см. :help object-select.

1 голос
/ 30 марта 2010

Vimtips имеет именно то, что вы искали:

Поиск в текущей функции

См. Также :help pattern-atoms

0 голосов
/ 30 марта 2010

Для таких команд, как поиск и замена, вы можете легко ограничиться парой строк:

:.,+3s/foo/bar/cg

заменяет каждое вхождение "foo" в текущей строке и следующих 3 строках на "bar". Я не думаю, что вы можете сделать это для поиска.

0 голосов
/ 30 марта 2010

Vim использует Shift-v для выбора по строкам. После выбора ряда строк многие команды будут ограничены выбором.

Я не думаю, что команды поиска (/, n и т. Д.) Ограничены таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...