Como uso números de linha relativos no modo de linha de comando?


16

Recentemente, aprendi com o Practical Vim uma maneira de copiar ou mover um bloco de linhas sem precisar mover o cursor da posição atual. Isso é feito no modo de linha de comando. por exemplo

:123,133m.  # moves lines from 123 to 133 below the cursor position.

Enquanto eu gosto, é difícil digitar os números das linhas longas, especialmente quando o arquivo tem muitas linhas.

Às vezes, as linhas a serem movidas são relativamente próximas do cursor (mas eu não quero mover meu cursor, puxe, volte para onde estava, cole!). Seria ótimo se eu pudesse usar números relativos, semelhante ao que fazemos no modo normal. É como dizer

mover 5 linhas que são 10 linhas acima da linha atual para aqui

Em resumo, como usar números relativos no modo de linha de comando (semelhante ao modo normal)?

Respostas:


23

Supondo que suas linhas abrangem de 15 a 10 linhas acima da atual, você pode obter o que solicitou usando números de linha relativos:

:-10,-15m.

Infelizmente, ao especificar um intervalo para trás, o Vim solicita que você confirme se é isso que você realmente queria. Para evitar a etapa de confirmação, você pode digitar silentantes do seu comando ou apenas especificar um intervalo de avanço :

:-15,-10m.

Como você pode esperar, +pode ser usado para se referir às linhas abaixo da atual.

Ajuda detalhada pode ser encontrada com:

:help cmdline-ranges

1
Mas nunca usei esse recurso uma vez. Eu faço 15k d5j 10j P.
Joeytwiddle

A diferença é que 15k, 5j funciona no modo de comando e o explicado na resposta está no modo de inserção. Então, com base no modo, podemos escolher o apropriado. Os comandos no modo de inserção geralmente são os critérios de seleção para executar outros comandos.
Soundararajan

12

Você pode usar números concretos em seu intervalo:

:200,300command

Ou números relativos:

:-27,+46command

Ou marcas manuais:

:'a,'bcommand

Ou marcas automáticas:

:'[,'>command

Ou pesquisas:

:?foo?,/bar/command

Ou atalhos de linha:

:.,$command

Ou qualquer combinação dos truques acima:

:?foo?,+46command
:'a,$command
...

3

Você pode usar o endereçamento relativo (por exemplo .-10,.+3) com qualquer comando Ex, cp. :help :range.

Como alternativa, dê uma olhada no meu plugin LineJuggler ; ele fornece vários mapeamentos curtos para mover linhas ou duplicá-las, e todos esses mapeamentos têm um deslocamento de linha relativo como [count].

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.