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
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.
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.
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
Não fica mais simples do que isso! Do modo normal:
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.
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
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
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.
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).
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 .
Y
esP
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
fonte
Y
paray$
. (Consistente comD
eC
; (mas não compatível com Vi (ninguém se importa.))) Isso é proposto em:help Y
.yj
ouyk
, especialmente porque você não duplica um personagem. Além disso,yk
é uma versão para trás que2yy
não pode ser executada, e você pode colocar o número de linhas para retrocedery9j
ouy2k
, etc. A única diferença é que sua contagem deve sern-1
de um total den
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 intervalo1,.
).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árioclass xxx
logo após o cursor.Referência:
:help range
,:help :t
,:help :g
,:help :m
e:help :v
fonte
:
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
ouYp
ouyyp
.fonte
Y
normalmente é remapeado paray$
(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:
depois vá para a linha na qual deseja colar e
fonte
yy
puxará a linha atual sem excluí-la
dd
excluirá a linha atual
p
será
put
uma linha agarrada por um dos métodos anterioresfonte
Faça isso:
Primeiro, yycopie a linha atual e depois pcole.
fonte
Se você quiser outra maneira:
"ayy
: Isso armazenará a linha no buffera
."ap
: Isso colocará o conteúdo do buffera
no cursor.Há muitas variações nisso.
"a5yy
: Isso armazenará as 5 linhas no buffera
.Consulte " Arquivos de ajuda do Vim para mais diversão.
fonte
yyp - lembre-se com "yippee!"
Várias linhas com um número entre:
y7yp
fonte
:.,.+7 copy .+7
: Pyyp - colar depois
yyP - cole antes
fonte
Gosto de: Shift+ v(para selecionar a linha inteira imediatamente e permitir que você selecione outras linhas, se desejar), y, p
fonte
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>
fonte
Outra opção seria ir com:
oferece a vantagem de preservar a posição do cursor.
fonte
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
fonte
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.
fonte
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
fonte
Eu sei que estou atrasado para a festa, mas tanto faz; Eu tenho isso no meu .vimrc:
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 .fonte
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
fonte
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
fonte
i
novamente ao final para reinserir, ele quebraundo
, 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 enmap <S-C-d> <Esc>Yp
no modo normalEu gosto de usar este mapeamento:
porque torna consistente o uso juntamente com o
YP
comando nativo .fonte