Como duplicar uma linha inteira no Vim no Eclipse?


1624

Como duplico uma linha inteira no Vim de maneira semelhante a Ctrl+ Dno IntelliJ IDEA / Resharper ou Ctrl+ Alt+ / no Eclipse ?


49
As pessoas não executam mais o vimtutor? Provavelmente, isso ocorre dentro dos primeiros cinco minutos de aprendizado do uso do Vim.
Dash-tom-bang

131
Deseja duplicar esta linha? Yes Plocação. :)
Stavr00

3
FWIW Fiz o vimtutor cerca de uma dúzia de vezes nos últimos 2 meses e esse conceito não é coberto. Diz como executar “dd” e “v - navegar - y” seguido de “p”. Ele não informa como copiar uma única linha sem excluí-la, como é solicitado aqui.
danielson317

Respostas:


2769

yyou Ypara copiar a linha (mnemônico: y ANK )
ou
ddpara d élete a linha (VIM cópias que você excluídos em uma prancheta-like "registrar", como um corte de operação)

então

ppara p aste o copiado ou excluído texto após a linha atual
ou
Pa p aste o texto copiado ou excluído antes da linha atual


129
Um ponto excelente. Por alguma razão, porém, acho bater y duas vezes é mais rápido para mim do que SHIFT-y
Mark Biek

25
@camflan Eu acho que o Y deve ser "copiar a partir do cursor até o fim"
Dzung Nguyen

42
e 2yy podem ser usados para copiar as linhas 2 (e para qualquer outro n)
Amir Ali Akbari

5
@nXqd: Sim, uma grande porcentagem de usuários mapeia Ypara y$. (Consistente com De C; (mas não compatível com Vi (ninguém se importa.))) Isso é proposto em :help Y.
Aaron Thoma

11
Para copiar duas linhas, é ainda mais rápido ir yjou yk, especialmente porque você não duplica um personagem. Além disso, yké uma versão para trás que 2yynão pode ser executada, e você pode colocar o número de linhas para retroceder y9jou y2k, etc. A única diferença é que sua contagem deve ser n-1de um total de nlinhas, mas sua cabeça pode aprender que de qualquer forma.
Zelk

406

Modo normal: veja outras respostas.

O caminho Ex :

  • :t. duplicará a linha,
  • :t 7 irá copiá-lo após a linha 7,
  • :,+t0copiará a linha atual e a próxima no início do arquivo ( ,+é sinônimo do intervalo .,.+1),
  • :1,t$copiará as linhas do início até a posição do cursor até o fim ( 1,é sinônimo do intervalo 1,.).

Se você precisar mover em vez de copiar, use em :mvez de :t.

Isso pode ser realmente poderoso se você combiná-lo com :gou :v:

  • :v/foo/m$ moverá todas as linhas que não correspondem ao padrão "foo" até o final do arquivo.
  • :+,$g/^\s*class\s\+\i\+/t.copiará todas as linhas subseqüentes do formulário class xxxlogo após o cursor.

Referência: :help range, :help :t, :help :g, :help :me:help :v


1
Quando você pressiona :no modo visual, ele é transformado para '<,'>pré-selecionar o intervalo de linhas que a seleção visual abrange. Portanto, no modo visual, :t0copia as linhas no início.
Benoit

1
Para o registro: quando você digita dois pontos (:), entra no modo de linha de comando, onde pode inserir comandos Ex. vimdoc.sourceforge.net/htmldoc/cmdline.html Os comandos Ex podem ser realmente poderosos e concisos. As soluções yyp são comandos "modo normal". Se você deseja copiar / mover / excluir uma linha ou intervalo distante de linhas, um comando Ex pode ser muito mais rápido.
Niels Bom

7
Voto negativo não devido a um problema com a resposta em si (embora não funcione para a minha situação, não faço ideia do número da linha que desejo duplicar), mas porque REALMENTE não deve ser a resposta mais aceita / aceita pergunta comumente pesquisada.
Mjaggard

9
@ mjaggard: as respostas aceitas estão sempre no topo, independentemente de sua pontuação. Sim, eu adicionei essa resposta como um complemento, e parece que se adequou bem ao OP.
Benoit

7
:t.é a resposta exata para a pergunta.
Burak Erdem

294

YPou Ypou yyp.


Ynormalmente é remapeado para y$(puxar (copiar) até o final da linha (da posição atual do cursor, não do início da linha)). Com esta linha em .vimrc::nnoremap Y y$
Aaron Thoma

1
Não se esqueça o pobre velhoyyP
icc97

253

copie e cole no vim

Não fica mais simples do que isso! Do modo normal:

yy

depois vá para a linha na qual deseja colar e

p

34
O que você usou para fazer o gif?
Zoltán

4
@ Zoltán você pode usar o LiceCap, que é pequeno
onmyway133


44

Faça isso:

Primeiro, yycopie a linha atual e depois pcole.


20
Não digite o espaço.
Niels Bom

1
Sim, se o cursor estiver no final da linha e você digitar o espaço como mostrado, duplicará a linha que você puxou duas linhas abaixo da linha que você puxou.

44

Se você quiser outra maneira:

"ayy: Isso armazenará a linha no buffer a.

"ap: Isso colocará o conteúdo do buffer ano cursor.

Há muitas variações nisso.

"a5yy: Isso armazenará as 5 linhas no buffer a.

Consulte " Arquivos de ajuda do Vim para mais diversão.


Obrigado, eu usei isso como um bind: map <Leader> d "ayy" ap
frbl

39

yyp - lembre-se com "yippee!"

Várias linhas com um número entre:

y7yp


17
7yy é equivalente a y7y e provavelmente é mais fácil lembrar como fazê-lo.
graywh

10
y7yp (ou 7yyp) raramente é útil; o cursor permanece na primeira linha copiada para que p cole as linhas copiadas entre a primeira e a segunda linha da fonte. Para duplicar um bloco de linhas, use 7yyP
Nefrubyr

@Nefrubyr or :.,.+7 copy .+7: P
DarkWiiPlayer

23

yyp - colar depois

yyP - cole antes


6
Como a linha está sendo duplicada, o resultado final do conteúdo é o mesmo.
Acumenus 6/11

4
@ABB No entanto, há uma diferença em miniatura aqui - em que linha seu cursor pousará.
Mikk

12

Gosto de: Shift+ v(para selecionar a linha inteira imediatamente e permitir que você selecione outras linhas, se desejar), y, p


11

Você também pode tentar <Cx> <Cl>, que repetirá a última linha do modo de inserção e exibirá uma janela de conclusão com todas as linhas. Funciona quase como <Cp>


Isto é muito útil, mas para evitar ter de imprensa muitas chaves que tenho mapeado-lo apenas para CTRL-L, este é o meu mapa: inoremap ^ L ^ X ^ L
Jorge Gajon

11

Outra opção seria ir com:

nmap <C-d> mzyyp`z

oferece a vantagem de preservar a posição do cursor.


10

Para alguém que não conhece o vi, algumas respostas acima podem enganá-lo com frases como "colar ... depois / antes da linha atual ".
Na verdade, é "colar ... depois / antes do cursor ".

yyou Ypara copiar a linha
ou
ddexcluir a linha

então

pcolar o texto copiado ou excluído após o cursor
ou
Pcolar o texto copiado ou excluído antes do cursor


Para obter mais ligações de teclas, você pode visitar este site: vi Lista Completa de Ligações de Chaves


3

1 dica: quando você usa "p" para colocar a linha, coloca-a após a linha em que o cursor está, portanto, se você deseja adicionar a linha após a linha que está puxando, não mova o cursor para baixo de uma linha antes de colocar a nova linha.


4
ou capital de uso P - colocar antes
Ghoti

3

O padrão é yyp, mas eu uso essa religação há mais ou menos um ano e adoro:

" set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv


3

Eu sei que estou atrasado para a festa, mas tanto faz; Eu tenho isso no meu .vimrc:

nnoremap <C-d> :copy .<CR>
vnoremap <C-d> :copy '><CR>

a :copy comando apenas copia a linha ou o intervalo selecionado (sempre linhas inteiras) abaixo do número da linha fornecido como argumento.

No modo normal, o que isso faz é copy . copiar esta linha para logo abaixo desta linha .

E no modo visual, ele se transforma em '<,'> copy '> cópia do início da seleção para o final da seleção até a linha abaixo do final da seleção .


1
↑↑ melhor resposta aqui!

2

Para quem está começando a aprender o vi, aqui está uma boa introdução ao vi, listando lado a lado os comandos do vi para o movimento típico do cursor do Windows GUI Editor e as teclas de atalho. Ele lista todos os comandos básicos, incluindo yy(linha de cópia) e p(colar depois) ou P(colar antes).

vi (Vim) para usuários do Windows


1

Se você deseja duplicar uma linha e colá-la imediatamente abaixo do atual, como no Sublime Ctrl+ Shift+ D, você pode adicioná-lo ao seu .vimrcarquivo.

nmap <S-C-d> <Esc>Yp

Ou, para o modo Inserir:

imap <S-C-d> <Esc>Ypa


No entanto, isso deixa o modo de inserção e, ao adicionar inovamente ao final para reinserir, ele quebra undo, portanto, a solução para duplicar linhas no modo de inserção não é tão trivial quanto parece.
DarkWiiPlayer

Isso funciona perfeitamente bem para mim: imap <S-C-d> <Esc>Ypi modo de inserção e nmap <S-C-d> <Esc>Ypno modo normal
jedi

0

Eu gosto de usar este mapeamento:

:nnoremap yp Yp

porque torna consistente o uso juntamente com o YPcomando nativo .

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.