it-swarm-pt.tech

Duplicar uma linha inteira no Vim

Como faço para duplicar uma linha inteira no Vim de maneira semelhante a Ctrl+D em IntelliJ IDEA/Resharper ou Ctrl+Alt+/ no Eclipse?

1492
sumek

yy ou Y para copiar a linha
ou
dd deletar (cortar) a linha

então

p para colar o texto copiado ou excluído após a linha atual
ou
P para colar o texto copiado ou excluído antes a linha atual

2555
Mark Biek

Modo normal: veja outras respostas.

O Ex caminho:

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

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

Isso pode ser muito poderoso se você combiná-lo com :g ou :v

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

Referência: :help range, :help :t, :help :g, :help :m e :help :v

375
Benoit

YP ou Yp ou yyp.

279
Linulin

copy and paste in vim

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

yy

em seguida, mova para a linha que você deseja colar e

p
229
Adam

yy

vai arrancar a linha atual sem excluí-la

dd

irá apagar a linha atual

p

será put uma linha capturada por um dos métodos anteriores

49
pjz

Faça isso:

Primeiro, yy para copiar a linha atual e p colar.

38
Eric Z Beard

Se você quer outro jeito :-)

"ayy isto irá armazenar a linha no buffer a

"ap isto irá colocar o conteúdo do buffer a no cursor.

Existem muitas variações sobre isso.

"a5yy isto armazenará as 5 linhas no buffer a

veja http://www.vim.org/htmldoc/help.html para mais diversão

38
Kwondri

yyp - lembre-se com "yippee!"

Várias linhas com um número entre elas:

y7yp

37
theschmitzer

yyp - colar depois

yyP - colar antes

22
yemu

Você também pode tentar <C-x> <C-l>, que irá repetir a última linha do modo de inserção e traz uma janela de conclusão com todas as linhas. Funciona quase como <C-p>

11
nikolavp

Outra opção seria ir com:

nmap <C-d> mzyyp`z

dá-lhe a vantagem de preservar a posição do cursor.

11
Rook

Eu gosto: Shift+v (para selecionar toda a linha imediatamente e deixar você selecionar outras linhas se quiser), y, p

10
Gabe

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

yy ou Y para copiar a linha
ou
dd para deletar a linha

então

p para colar o texto copiado ou excluído após  cursor
ou
P para colar o texto copiado ou excluído antes do cursor


Para mais combinações de teclas, você pode visitar este site: vi Lista Completa de Encadernação

10
Michael

1 pegadinha: quando você usa "p" para colocar a linha, ele coloca after a linha em que seu cursor está, então se você quiser adicionar a linha depois da linha que você está girando, não mova a linha cursor abaixo de uma linha antes de colocar a nova linha.

3
cori

O padrão é yyp, mas eu tenho usado essa revinculação por um ano ou mais e adoro isso:

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

2
Chris Penner

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

vi (Vim) para usuários do Windows

1
ap-osd

Eu sei que estou atrasado para a festa, mas seja o que for; Eu tenho isso no meu .vimrc:

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

o comando :copy apenas copia a linha selecionada ou o intervalo (sempre linhas inteiras) abaixo do número de linha dado como argumento.

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

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

1
DarkWiiPlayer

Se você gostaria de duplicar uma linha e colá-la logo abaixo da atual, assim como no Sublime Ctrl+Shift+D, então você pode adicionar isso ao seu arquivo .vimrc.

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

0
jedi

Eu gosto de usar este mapeamento:

:nnoremap yp Yp

porque torna consistente a utilização juntamente com o comando nativo YP.

0
yolenoyer