2

Я могу взять строки, которые содержат "lblfig" в регистр m как это:

/lblfig
:let @m=@_ | %g//yank M

Затем я могу вставить эту коллекцию строк в новый буфер следующим образом:

:new | exe "normal! \"mp"

Но когда я пытаюсь запустить эти две последние командные строки вместе, как это:

:let @m=@_ | %g//yank M | new | exe "normal! \"mp"

- Я вставляю только одну из выдернутых строк в новый буфер.

Так как я могу сделать это как одну командную строку?

1 ответ1

3

Проблема в том, что, поскольку глобальная команда позволяет вам выполнять несколько команд с | между ними команды после глобальной команды считаются частью глобальной команды. Например, вы намеревались это:

%g//                                    "On every line containing lblfig:
    yank M                              "Yank into register 'M'
                                        "then AFTERWARDS:
            | new | exe "normal! \"mp"  "Paste it into a new buffer.

Вот что на самом деле делает vim:

%g//                                    "On every line containing lblfig:
    yank M | new | exe "normal! \"mp"   "Yank into register AND Paste it into a new buffer.

Исправление довольно простое. Просто оберните вашу глобальную команду в оператор "execute".

let @m=@_ | exe '%g//yank M' | new | exe "normal! \"mp"

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