Como arrancar uma linha em particular sem mover o cursor no vim?

37

Por exemplo

ComopossoarrancarecolaraLinha4apenasnaLinha12semterquemoverocursorparaaLinha4?

    
por Lazer 26.08.2010 / 17:47

7 respostas

50

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

:4y
P

faz isso por mim.

    
por 26.08.2010 / 18:47
10

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

:4co.<return>

Você pode, aparentemente, também fazer isso com um padrão:

:/^Yank/co.<return>

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

    
por 26.08.2010 / 20:24
9

Tente isto:

:4,4y  
P
    
por 26.08.2010 / 18:07
8

Tente:

: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 de maneira semelhante.

    
por 27.08.2010 / 02:58
2

Isso deve ser feito:

:4,12y
p
k
    
por 26.08.2010 / 17:52
2

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

Um, se você digitar :help range , aprenderá tudo sobre o uso de intervalos para aplicar aos comandos de estilo Ex. MUITO útil em muitos casos e muito mais versátil do que usar números de linha. Por exemplo, se você quiser arrancar a primeira linha começando com "yank" após o início do documento (mesmo se estiver na primeira linha), use :0/^yank/y . A parte mais poderosa das faixas é a capacidade de combiná-las, por exemplo, :./^Chapter/+50?Pete?d significa "Encontre a próxima linha para começar com a palavra Chapter (busca para frente a partir da linha atual), pule para frente 50 linhas e pesquise para trás palavra Pete, e exclua a primeira linha em que você a encontrar. " Só que na verdade 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 busca pelo nome da função sob o cursor, em seguida, pesquisando a próxima linha que dizia "Descrição" e puxando para um registrador específico ... etc)

A outra dica é que você deve saber sobre pular. Digite :help jump-motions para aprender completamente, mas a maneira como se relaciona aqui é que você pode pular para a linha 4, arrancá-la e RETURN com 4Gyy'' (ou usar backticks ao invés de apóstrofos para voltar à sua posição inicial exata, em vez de apenas a mesma linha em que você começou.)

    
por 27.09.2015 / 14:16
1

Mais curto:

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

Com intervalos: :1,4t. copia a linha 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 copia a quarta linha abaixo da linha desejada.

Nota: :t é um sinônimo para o comando :co[py] .

    
por 18.02.2017 / 13:41

Tags