VIM: Arranque vários trechos não contínuos de texto em um registrador

0

Eu tenho algumas linhas de texto que seguem um padrão e outras não. Eu gostaria de copiar as linhas que seguem esse padrão e, em seguida, copiá-las / copiá-las em um registro para que eu possa colá-las, como em outro lugar.

Exemplo:

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

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

Agora, basicamente, gostaria de selecionar as linhas que correspondem a def.*$ , copiá-las e colá-las.

para que a saída pareça assim:

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

Eu quero saber se é possível fazer isso no vim.

Algo como copiar correspondências de regex no registrador "m. Então eu seria capaz de fazer um" mp onde mais eu preciso disso.

Eu entendo que algo como sed, awk ou grep com alguns operadores de redirecionamento pode ser mais adequado para essa tarefa, mas gostaria de saber se posso usar o vim para fazer isso.

    
por ffledgling 16.06.2013 / 03:45

1 resposta

3

Você pode usar "Myy (letra maiúscula M) para acrescentar ao registrador m. Isso permite que você escreva um comando global para arrancar todas as linhas correspondentes a def.*$ e arrancar todas as linhas no registro m. Então tudo que você precisa fazer é colar o registrador m para obter o conteúdo "mp

:g/def.*$/normal "Myy

O comando global acima diz para você encontrar todas as linhas que correspondem ao padrão def.*$ e executar o comando "Myy no modo normal.

No entanto, isso tem um problema. O que acontece se o registrador m não estiver vazio quando você iniciar. Bem, você vai acabar com o que você colocou no registro da última vez, além de todas as coisas que você adicionou.

Para esvaziar o registro, você pode usar para definir o registro para a string vazia.

:let @m=''

Então no vim você digitaria

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

Para pegar tudo o que combina def.*$ no registro m.

    
por 16.06.2013 / 04:21

Tags