Como duplico uma linha inteira no Vim de maneira semelhante a Ctrl+ Dno IntelliJ IDEA / Resharper ou Ctrl+ Alt+ ↑/ ↓no Eclipse ?
Y
es P
locação. :)
Como duplico uma linha inteira no Vim de maneira semelhante a Ctrl+ Dno IntelliJ IDEA / Resharper ou Ctrl+ Alt+ ↑/ ↓no Eclipse ?
Y
es P
locação. :)
Respostas:
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
Y
para y$
. (Consistente com D
e C
; (mas não compatível com Vi (ninguém se importa.))) Isso é proposto em :help Y
.
yj
ou yk
, especialmente porque você não duplica um personagem. Além disso, yk
é uma versão para trás que 2yy
não pode ser executada, e você pode colocar o número de linhas para retroceder y9j
ou y2k
, etc. A única diferença é que sua contagem deve ser n-1
de um total de n
linhas, mas sua cabeça pode aprender que de qualquer forma.
Modo normal: veja outras respostas.
O caminho Ex :
:t.
duplicará a linha,:t 7
irá copiá-lo após a linha 7,:,+t0
copiará 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 :m
vez de :t
.
Isso pode ser realmente poderoso se você combiná-lo com :g
ou :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 xxx
logo após o cursor.Referência: :help range
, :help :t
, :help :g
, :help :m
e:help :v
:
no modo visual, ele é transformado para '<,'>
pré-selecionar o intervalo de linhas que a seleção visual abrange. Portanto, no modo visual, :t0
copia as linhas no início.
:t.
é a resposta exata para a pergunta.
YP
ou Yp
ou yyp
.
Y
normalmente é 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$
yyP
Não fica mais simples do que isso! Do modo normal:
yy
depois vá para a linha na qual deseja colar e
p
yy
puxará a linha atual sem excluí-la
dd
excluirá a linha atual
p
será put
uma linha agarrada por um dos métodos anteriores
Se você quiser outra maneira:
"ayy
: Isso armazenará a linha no buffer a
.
"ap
: Isso colocará o conteúdo do buffer a
no 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.
yyp - lembre-se com "yippee!"
Várias linhas com um número entre:
y7yp
:.,.+7 copy .+7
: P
yyp - colar depois
yyP - cole antes
Gosto de: Shift+ v(para selecionar a linha inteira imediatamente e permitir que você selecione outras linhas, se desejar), y, p
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>
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
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
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 .
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).
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 .vimrc
arquivo.
nmap <S-C-d> <Esc>Yp
Ou, para o modo Inserir:
imap <S-C-d> <Esc>Ypa
i
novamente 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.
imap <S-C-d> <Esc>Ypi
modo de inserção e nmap <S-C-d> <Esc>Yp
no modo normal