Copiando várias palavras (de linhas diferentes) e colando-as de uma só vez

7

Quero copiar diferentes seqüências de caracteres de diferentes linhas do arquivo e colá-las juntas de uma vez. Em outras palavras, desejo coletar palavras diferentes em uma cesta e colá-las de uma só vez. Como posso fazer isso?

John
fonte

Respostas:

15

Use um registro em maiúsculas ao puxar (copiar):

"Ay

"Adiz para anexar ao aregisto, ao contrário do "aque substituir o conteúdo do aregisto.

Depois de copiar tudo para o registro, você pode colar tudo de uma vez com:

"ap
8bittree
fonte
agora como limpar o conteúdo de um registro?
John
11
@ John Você pode limpar um registo através da gravação de uma macro vazia a ele, como este: qaq. Alternativamente, se você quiser apenas para evitar ter junk anterior lá, você pode copiar a sua primeira palavra usando o menor registro de caso: "ay. Lembre-se, ae Aconsulte o mesmo registro, eles apenas afetam como as coisas são adicionadas.
precisa saber é o seguinte
6

Você também pode definir seu próprio operador personalizado, que puxaria incrementalmente qualquer objeto de texto ou texto coberto por um movimento:

fu! Incremental_yank(type, ...) abort
    if a:type ==# 'char'
        norm! `[v`]y
    elseif a:type ==# 'line'
        norm! '[V']y
    elseif a:0
        norm! gvy
    endif

    call setreg('z', @".(a:type ==# 'char' ? ' ' : ''), 'a' . getregtype('"'))
    call setreg('"', @z, getregtype('z'))
endfu

nno <silent> zy  :<C-U>set opfunc=Incremental_yank<CR>g@
xno <silent> zy  :<C-U>call Incremental_yank(visualmode(), 1)<CR>
nno <silent> zyy :<C-U>set opfunc=Incremental_yank<Bar>exe 'norm! '.v:count1.'g@_'<CR>

nno <silent> zyc :<C-U>let [@", @z] = ['', '']<CR>p

Neste exemplo, 4 ligações de teclas estão instaladas:

  • zy operador normal para puxar incrementalmente um objeto de texto ou movimento
  • zyy operador semelhante que trabalha em linhas
  • zy operador semelhante que trabalha na seleção visual
  • zyccomando normal para esvaziar os registros "e z; útil antes de começar a puxar uma sequência de textos

Com ele, você pode:

  • copie algumas palavras pressionando zyiwa primeira palavra e repita a operação com o comando dot nas próximas
  • copie algumas linhas pressionando zyya primeira e repita a operação com o comando dot nas próximas
  • copie algumas seleções visuais, pressionando zycada uma delas

O código atual confunde o zregistro, se você preferir usar outro registro, como xpor exemplo, você pode alterar as seguintes linhas:

call setreg('z', @", 'a' . getregtype('"'))                call setreg('x', @", 'a' . getregtype('"'))
             ^                                                          ^
call setreg('"', @z, getregtype('z'))                 →    call setreg('"', @x, getregtype('x'))
                  ^              ^                                           ^              ^
nno <silent> zyc :<C-U>let [@", @z] = ['', '']<CR>p        nno <silent> zyc :<C-U>let [@", @x] = ['', '']<CR>p
                                 ^                                                          ^

Para mais informações, veja:

:h g@
:h getregtype()
:h setreg()

insira a descrição da imagem aqui

user9433424
fonte
O que é esse programa?
Segfault
byzanz-record e screenkey
user9433424
Isso é incrível! Isso pode ser alterado para adicionar um loop ao arranque em múltiplas seleções visuais? Digamos que eu queira puxar todas as seções sem um arquivo de remarcação. Eu poderia /^#\s.\+e depois fazer, zyvpor exemplo!
Luciano