Como arrancar linhas no mesmo registrador e colar em um novo buffer?

2

Eu posso pegar linhas que contenham "lblfig" no registro m desta forma:

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

Então eu posso colar essa coleção de linhas em um novo buffer como este:

:new | exe "normal! \"mp"

Mas quando tento executar essas duas últimas linhas de comando juntas, como uma delas,

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

- Eu só recebo a primeira das linhas coladas no novo buffer.

Então, como posso fazer isso como uma única linha de comando?

    
por JosephHarriott 02.08.2016 / 17:26

1 resposta

3

O problema é que desde que o comando global permite que você faça vários comandos com o | entre eles, os comandos após o comando global são considerados parte do comando global. Por exemplo, você pretendia isso:

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

Aqui está o que o vim está realmente fazendo:

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

A correção é bem simples. Apenas envolva seu comando global em uma instrução "execute".

let @m=@_ | exe '%g//yank M' | new | exe "normal! \"mp"
    
por 02.08.2016 / 22:25

Tags