Como puxar uma linha com um determinado número de linha?


Respostas:


59

De :help :yank:

:[range]y[ank] [x]      Yank `[range]` lines [into register x].

Então, para puxar a linha 4, digite-se:

:4yank

Observe que você pode fazer isso facilmente no modo de inserção com <C-o>; isso permite que você execute um comando, após o qual você retorna ao modo de inserção; por exemplo:

<C-o>:4yank

Obviamente, você também pode usar outros intervalos. Alguns exemplos:

  • Linhas 1 a 3: :1,3yank
  • O buffer inteiro: :%yank
  • Da linha atual até o final do buffer: :.,$:yank
  • A linha atual e os próximos 3: :.,+3yank
  • A linha atual e as 3 anteriores: :-3,.yank
  • A linha 3 linhas acima da linha atual: :-3yank

As coisas mais úteis a serem lembradas sobre os intervalos:

  • Está na forma de :line1,line2command.
  • A .é a linha atual (na verdade você pode omitir o ponto na maioria dos casos; :.,+3yanke :,+3yanké o mesmo)
  • Você especifica linhas relativas à posição atual com +ne -n.

Veja :help [range]para mais informações.


6
Pontos de bônus por mencionar <Co>, estou subutilizando isso.
PhilippFrank

7
Também vale a pena mencionar que você pode abreviar :4yankcom:4y
NewbieOnRails

35

Além da resposta de Carpetsmoker, devo destacar o incrível :help :me :help :t.

Se você deseja copiar a linha 4 para a direita abaixo da linha atual, faça isso:

:4t.

ou isso, se você deseja copiar essa linha logo acima da linha atual:

:4t-

1

Além dos comandos ex-mode que você possui, é possível alcançá-lo também no modo de comando, por exemplo: 4GY''- o que significa: ir para a linha 4 ( 4G), puxar a linha ( Y) e retornar à linha anterior ( '').

Você também pode usar marcas de salto; para sua segunda pergunta, por exemplo: mm3kY'm- o que significa: defina a marca m ( mm), suba três linhas ( 3k), puxe a linha ( Y), retorne à marca m ( 'm).


11
Usar `` provavelmente é uma recomendação melhor do que '', pois o primeiro retorna à mesma linha e coluna. O mesmo vale para `m vs. 'm.
jamessan

Concordo. (Alguma idéia de como criar backtics literais na marcação wiki, pois eles têm um significado especial?) - Caso contrário, seu comentário servirá como uma emenda à minha resposta e como uma dica para os leitores.
Janis

É necessário usar vários backticks para delimitar o código embutido (cf, daringfireball.net/projects/markdown/syntax#code ). Eu sei que funciona em perguntas / respostas, mas não consegui fazê-lo funcionar no meu comentário.
jamessan

1

Basta digitar

:4y

puxar a linha 4

ele entrará no registro sem nome. Então, (por exemplo), você pode usar ppara colocá-lo em outro lugar. Você também pode usar [n]p, por exemplo, 10p para colar 10 vezes.

Você pode colocá-lo em um registro nomeado como "a" com

:4y a

2
A parte de colocá-lo em um registro nomeado com "ay4 não parece correta. Se você fizer isso, o vim estará esperando que você diga" 4 o quê? ". Por exemplo, se você pressionar Enter, ele arrancará 4 linhas a partir de a posição atual, se você digitar / foo <Enter> vai arrancar até o quarto seguinte occurrance de "foo", etc.
Don escotilha

O último comando deve ser lido 4G"ayy.
Romainl

0

Você pode fazer

:10y <Enter> (to copy the line 10)
p (paste line 10 where the cursor is)

A configuração do número relativo também ajuda a se mover entre linhas de código.

:set relativenumber

Agora você pode copiar a 5ª linha acima do cursor com:

:-5y <Enter>
:p (to paste)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.