ti-enxame.com

Como excluir as linhas abaixo da linha atual no vim?

Existe um comando para excluir uma linha (ou várias linhas) imediatamente abaixo da linha atual? Atualmente, estou fazendo isso como: jdd e depois . repetir conforme necessário. Existe um comando que combinaria tudo isso?

ATUALIZAÇÃO: A razão pela qual eu gostaria de ter esse comando é que não gosto de me afastar da posição atual e ainda poder excluir as linhas abaixo.

63
Valentin

O comando delete ex funcionará bem.

:+,$d

Isso excluirá todas as linhas do +1 atual até o final ($)

Para excluir as próximas 2 linhas, o seguinte intervalo funcionaria, +1,+2 ou abreviação +,+2

:+,+2d

Como @ib mencionou, o comando :delete ou :d moverá o cursor para o início da linha ao lado do texto excluído. (Mesmo com nostartofline definido). Para superar isso, podemos emitir o comando de modo normal ``. `` retornará à posição exata antes do último salto, neste caso, o comando :d. Nosso comando é agora

:+,+2denter``

Ou como um comando ex

:+,+2d|norm! ``

Para facilitar isso, agrupamos tudo isso em um comando:

command! -count=1 -register D :+,+<count>d <reg><bar>norm! ``

Agora, para excluir as próximas 3 linhas seguintes:

:3D

Este comando também pode ter um {reg} como :delete e :yank do. Portanto, excluir as próximas 4 linhas no registro a seria:

:4D a

Para maiores informações

:h :d
:h :command
:h :command-register
:h :command-count
:h ``
135
Peter Rincker

dG Deveria trabalhar.
Isso significa excluir todas as linhas até o final do arquivo do cursor atual.

64
Anand Nagaraj

Isso excluirá TODAS as linhas abaixo da atual:

jdG

Infelizmente, isso moverá o cursor para o início da linha atual após a exclusão.

26
ClosedID

bem, para fazer isso simplesmente você pode usar o comando xxdd. Na maioria das vezes eu sei (pelo menos tenho uma ideia) o tamanho do script que estou editando. Portanto, o comando abaixo é geralmente mais do que suficiente:

  • 99dd
  • 999dd para remover 999 linhas começando na posição do cursor.
  • 9999dd
  • 99999dd para script muito longo;)
7
xaa

As outras soluções são informativas, mas acho que seria mais simples usar uma macro para isso:

qq (inicia a gravação)

jddk (desça, exclua a linha e volte para cima - ou seja, o que você deseja fazer)

q (final da gravação)

Agora você pode executar _@q_ para executar esta ação, mantendo o cursor na posição atual. Você também pode fazer algo como _[email protected]_ para excluir 5 linhas abaixo do cursor.

E, finalmente, se você estiver repetindo a ação mais de uma vez, poderá digitar _@@_ após a primeira vez em que executar _@q_ (isso repetirá a última macro usada - neste caso, q)

4
mindthief

Este é um trabalho para marcas!

Tente maj20dd`a

ma define a marca específica do arquivo 'a', j20dd faz a exclusão desejada (20 linhas neste caso) e `a restaura a posição da marca (linha e coluna) .

Obviamente, esse padrão pode ser estendido para fazer o que você quiser antes de retornar à marca. Se você usar mA (ou qualquer outra letra maiúscula), a marca será realmente única entre os arquivos, para que você possa editar em outro lugar antes de retornar. Se você tem um uso muito frequente, pode transformá-lo em uma macro, conforme sugerido acima.

2
Alex Feinman

Você pode inserir o número de linhas a serem excluídas: j2ddk.

1
Paul Ruane