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.

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.


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".


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


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í.


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.


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".

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.