У меня есть несколько строк текста, которые следуют шаблону, а некоторые нет. Я хотел бы скопировать строки, которые следуют этому шаблону, а затем скопировать / скопировать их в регистр, чтобы я мог вставить их, как в другом месте.

Пример:

def function_1(param1,param2):
    // do something1
    // do something2
    // do something3
    return

def function_Nullify(param=None):
    // does nothing
    pass

Теперь я в основном хотел бы выбрать строки, которые соответствуют def.*$ , Скопировать их и вставить их.

поэтому вывод будет выглядеть примерно так:

def function_1(param1,param2):
def function_Nullify(param=None):

Я хочу знать, возможно ли это сделать в vim.

Что-то вроде копирования совпадающих строк регулярных выражений в регистр "m. Тогда я смогу сделать «mp», где бы я ни нуждался в этом.


Я понимаю, что что-то вроде sed, awk или grep с некоторыми операторами перенаправления может лучше подходить для этой задачи, но я хотел бы знать, могу ли я использовать vim для этого.

1 ответ1

3

Вы можете использовать "Myy (заглавная буква M) для добавления в регистр m. Это позволяет вам написать глобальную команду, чтобы восстановить все строки, соответствующие def.*$ И вернуть все строки в регистр m. Тогда все, что вам нужно сделать, это вставить регистр m, чтобы получить содержимое "mp

:g/def.*$/normal "Myy

Вышеупомянутая глобальная команда говорит вам найти все строки, которые соответствуют шаблону def.*$ И выполнить команду "Myy в обычном режиме».

Однако это имеет одну проблему. Что произойдет, если регистр m не пуст при запуске. Что ж, в итоге вы получите то, что когда-либо вносили в реестр в прошлый раз, а также все, что вы добавили.

Чтобы очистить регистр, вы можете использовать регистр для пустой строки.

:let @m=''

Так что в VIM вы бы набрать

:let @m=''
:g/def.*$/normal "Myy

Чтобы вытащить все, что соответствует def.*$ В регистр m.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .