Cole várias vezes

93

Qual é a melhor maneira de substituir várias linhas pelo conteúdo da área de transferência?

O problema que estou tendo é que, quando puxo uma linha e colo sobre outra, "puxar" é substituído pela linha que acabei de substituir. Agora, se eu quiser substituir outra linha com a mesma linha, tenho que voltar e puxar novamente.

Deve haver uma maneira melhor de fazer isso.

Jwerre
fonte

Respostas:

106

Eu tenho isso no meu .vimrc:

xnoremap p pgvy

(observação: isso funcionará apenas com o registro padrão, mas este mapeamento é fácil de lembrar). Escrever uma versão mais elaborada seria possível. Além disso, você ainda pode usar P para obter o comportamento antigo.

Benoit
fonte
28
Inteligente. 'p' para colar, 'gv' para selecionar novamente o que foi originalmente selecionado. 'y' para copiá-lo novamente.
Amjith
@SibbsGambling, provavelmente usando uma versão anterior ao Vim 7? Em seguida, atualize o Vim ou use v em vez de x ( vnoremap). O arquivo de ajuda do Vim version7.txtafirma que xmap e smap apareceram nessa versão.
Benoit
1
@Benoit Hmm, eu tenho 7.4.52, mas xnoremapnem vnoremapfunciona
Sibbs Gambling
8
Por que este não é o comportamento padrão ??
Seth
27

"0deve ter o conteúdo do seu puxão. É um pouco mais tedioso de digitar, mas "0pvocê deve fazer o que quiser.

Como alternativa, não selecione e substitua as linhas antigas antecipadamente. Se você encontrar essas linhas com uma pesquisa, basta bater n.várias vezes (depois de uma inicial p), então quando todas elas estiverem coladas, faça nddseguido por quantos n.s forem necessários.

A maior mudança mental que precisei fazer ao mudar para o Vim é descobrir como aplicar as edições de grupo sequencialmente. Ou seja, em vez de fazer várias edições em uma linha e, em seguida, fazer várias das mesmas edições em outra linha, farei a primeira edição em várias linhas (usando .com grande efeito), depois a segunda edição em várias de linhas, etc. Alternativamente, o uso de macros pode ajudar, pois são fantásticas, mas às vezes um pouco mais tediosas para trabalhar corretamente com alterações "complexas".

dash-tom-bang
fonte
2
parece um lugar onde regex com :%s/.../.../gccomandos de confirmação de tipo podem estar mais perto do que você deseja
Milimetric,
@Milimetric +1 não sabia que você poderia confirmar isso.
1
Votar positivamente porque as macros podem tornar isso um problema. Basta fazer a edição uma vez e você pode fazer algo como 5@m(para uma macro chamada m)
skatenerd
Obrigado pela grande explicação. Agora eu uso xnoremap p "0pno meu ~ / .vimrc
nexayq
13

Costumo usar outro registro, copio a linha de que você precisa para algum registro nomeado "aye colo de lá"ap

Facundo Casco
fonte
11

Quando você cola uma seleção no Vim, ele substitui o registro padrão com o conteúdo da seleção. Se colar sobre uma seleção está apagando o conteúdo do registro da área de transferência, então é muito provável que você tenha a seguinte linha no seu .vimrc

set clipboard=unnamed

Uma opção é removê-lo e usar o registro explícito da área de transferência "+

Outra opção é usar qualquer um dos outros registros explicitamente nomeados (az). Depois da primeira pasta, puxe a linha de volta, "cpor exemplo, e use "cppara colar a partir daí.

JaredPar
fonte
Na verdade, o padrão (aqui, no Ubuntu) era clipboard = autoselect; ainda assim, obrigado pela resposta mais elegante até agora.
Tobu
8

use nponde né o número de quanto tempo você deseja colar as linhas, por exemplo, 3pirá colar 3 linhas.

toopay
fonte
7
Não funciona quando você deseja colar a mesma linha sobre linhas não contíguas.
Tobu
@Tobu, mas responde ao título da pergunta 'como você cola várias vezes'
icc97
6

Em vez de usar copiar / colar, geralmente é melhor usar um comando de objeto de texto, como ciwpara alterar a palavra interna. Este método tem a vantagem de ser facilmente repetível usando o .comando repeat.

  1. yiw Arranque a palavra interna (copie a palavra sob o cursor, diga "primeiro").
  2. ... Mova o cursor para outra palavra (diga "segundo").
  3. ciw<C-r>0 Mude o "segundo", substituindo-o por "primeiro" (é Ctrl-R).
  4. ... Mova o cursor para outra palavra (diga "terceira").
  5. . Mude "terceiro", substituindo-o por "primeiro".
jack guan
fonte
1
ciw<C-r>0não funciona no meu caso. ciwmuda para o modo de inserção onde <C-r>se torna inútil. Existe uma explicação fácil para isso? Isso pode ter a ver com o editor de texto (não estou usando pur VIM, mas VIM Keyboard bindings no RStudio)
Bushroot
@Bushroot <C-r>deve ser usado no modo de inserção, pois é como você cola de um registro sem sair do modo de inserção - no Vim, é claro; Não estou familiarizado com o RStudio, mas acho que você está certo e eles não implementaram esta ligação de tecla específica.
inseto
@Sean H: Sim. Eles não implementaram a vinculação de chave. Funciona bem no VIM e até mesmo com vínculos VIM em outros programas (por exemplo, Visual Studio Code).
Bushroot