web-development-kb-pt.site

Como puxar uma linha específica sem mover o cursor no vim?

Por exemplo

alt text

Como posso puxar e colar a Linha 4 apenas na Linha 12 sem precisar mover o cursor para a Linha 4?

alt text

40
Lazer

Se o cursor já estiver na linha 12, um simples

: 4a 
 P 

faz isso por mim.

53
frabjous

Que tal isso: o cursor está na linha 11, você está no modo "vi".

:4co.<return>

Aparentemente, você também pode fazer isso com um padrão:

:/^Yank/co.<return>

Você pode usar "mo" (mover) em vez de "co" (copiar) para simplesmente mover a linha, em vez de puxar e colocar.

10
Bruce Ediger

Tente o seguinte:

:4,4y  
P
9
Louis Salin

Experimentar:

:4co11

Você pode usar um argumento de 0 para colar na linha 1. Isso também funcionará com intervalos:

:m,n co k

copiará as linhas m a n para a linha k+1. Além disso, não importa onde você esteja no buffer. O comando move, m, funciona da mesma forma.

8
gvkv

Isso deve servir:

:4,12y
p
k
2
Umang

Mais curto:

:1t. copia a primeira linha abaixo da atual.

Com intervalos: :1,4t. copia as linhas 1 a 4 (inclusive) abaixo da corrente.

Também é possível com números de linha relativos:

:-1t. copia a linha anterior abaixo da atual.

No seu exemplo :4t-1 copiaria a quarta linha abaixo da linha desejada.

Nota: :t é sinônimo de :co[py] comando.

2
Erwin Rooijakkers

Outros já mencionaram o método mais direto de fazer isso, que é :4y, mas quero adicionar duas notas sobre isso que podem ser úteis:

Um, se você digitar :help range você aprenderá tudo sobre o uso de intervalos para aplicar aos comandos do estilo Ex. MUITO útil em muitos casos, e muito mais versátil do que usar números de linha. Por exemplo, se você deseja puxar a primeira linha que começa com "puxar" após o início do documento (mesmo que esteja na primeira linha), use :0/^yank/y. A parte mais poderosa dos intervalos é a capacidade de combiná-los, por exemplo, :./^Chapter/+50?Pete?d significa "Encontre a próxima linha para começar com o Capítulo do Word (pesquisando a partir da linha atual), depois pule 50 linhas, procure o Word Pete e exclua a primeira linha em que o encontrar". Exceto que, na verdade, ele não move o cursor, apenas faz o que você diz.

(Eu usei esse tipo de especificação de intervalo para automatizar a criação de documentação complicada, envolvendo a pesquisa do nome da função sob o cursor e, em seguida, procurando a próxima linha que diz "Descrição" e puxando-a para um registro específico ... etc.)

A outra dica é que você deve saber sobre pular. Tipo :help jump-motions para aprender sobre o assunto completamente, mas o modo como ele se relaciona aqui é que você pode pular para a linha 4, puxá-lo e depois VOLTAR com 4Gyy'' (ou use backticks em vez de apóstrofos para voltar à sua posição inicial exata, em vez da mesma linha em que você começou.)

2
Wildcard

Com base em resposta de Erwin Rooijakkers , isso copia a linha 4 abaixo da linha 11, independentemente de onde está o seu cursor:

:4t11
0
Lorin Hochstein