Posso excluir uma linha inteira, exceto a quebra de linha?


33

Uma operação bastante comum para mim no vim, já que sou obsessivo-compulsivo e gosto de manter meus arquivos livres de espaço em branco, é excluir o conteúdo de uma linha inteira, mas não a linha em si (ou seja, não a quebra de linha).

Existe uma maneira integrada do vim de fazer isso? Talvez uma d<movement command>operação?

Até agora, o melhor que tenho é (na linha em questão) 0d$. Existe uma maneira mais rápida?


2
Como alternativa para aparar espaços em branco manualmente, você pode usar um plug-in como o vim-better-whitespace , que destaca o espaço em branco à direita, fornece um comando para removê-lo de uma só vez e pode fazê-lo automaticamente ao salvar.
Deltab 29/04


3
Mesmo sem um plug-in, você pode excluir globalmente espaços em branco usando a pesquisa e substituição, por exemplo:%s/\s*$//
Kyle Strand

Respostas:


34

Você pode usar 0Disso para ir para o primeiro caractere da linha e excluir até o final da linha. Observe que você pode usá- ^Dlo se desejar deixar em branco qualquer espaço em branco anterior. Além disso, essas operações não podem ser repetidas usando .. Se você deseja uma operação que pode ser repetida com o .comando, consulte a resposta de David Lord.

Tópicos de ajuda:

  • :help 0
  • :help D
  • :help ^

4
Enquanto isso é direto, direto ao ponto e (provavelmente) o menor número de pressionamentos de tecla, não é repetível usando o .comando Por esse motivo, acho cc<Esc>ou S<Esc>é mais atraente se você se importa em repetir.
Tommcdo

Isso é verdade. No entanto, você pode gravá-lo como uma macro e repeti-lo usando ..
EvergreenTree

Em geral, as macros não podem ser repetidas com .. Eles funcionam como se essas teclas tivessem sido inseridas interativamente, para que comandos individuais fossem tratados separadamente. O uso .repetirá apenas o último comando da macro.
tommcdo

Eu testei e não é assim que funciona para mim. Se gravar a macro, use-a usando @{reg}, você poderá repeti-la .posteriormente.
EvergreenTree

1
Você está apenas repetindo o último comando da macro, que é D. Após uma 0Doperação, o cursor será deixado na coluna 0. Se o cursor já estiver no início da linha (depois de você passar para outra), parecerá que a macro foi repetida corretamente. Tente mover o cursor para frente na linha e digitar .- você verá que ele se repete apenas D.
Tommcdo

20

cc <Esc>fará o que você pede, mas é mais pressionamento de tecla do que 0D. Se você quiser colocar algo nessa linha depois, cctalvez seja melhor.


2
Se você incluir o Shift, é o mesmo e possivelmente mais fácil.
Holloway

4
Embora essa não seja a solução "mais limpa", ela tem uma vantagem: é exatamente uma ação e, portanto, pode ser repetida com o .comando. Por outro lado, 0D(como sugerido na resposta escolhida), há duas ações: o 0movimento e o Dcomando.
Tommcdo

@Trengot provavelmente é mais fácil do que 0Dpara mim desde que eu tenha jkmapeado para <Esc>no meu vimrc, então minhas mãos não teria sequer a deixar a linha de casa.
EvergreenTree

1
Veja @Nobilis resposta: Sestá documentada como "sinônimo para cc"
Volker Siegel

14

Se então Ctrl+Cou Escparece realizar exatamente a mesma função.

Pode então ser repetido com ., pois constitui uma única ação.


2
Eu só estava pensando em adicionar isso como uma resposta e, em seguida, a sua serra
sbell

7

0Dé provavelmente o que você quer. Ele será excluído do cursor até o final da linha, deixando a linha (e quaisquer caracteres antes do cursor) no lugar.


Altho esta resposta é almos um ano de idade, é importante notar que 0Dexcluirá a partir do início da linha , não a partir da posição do cursor
FliiFe

4

Eu normalmente uso ddO. ddpara excluir a linha atual e O(que é o maiúsculo) para adicionar uma nova linha.

Isso também são três pressionamentos de tecla, mas ddconta apenas como 1 ano e meio, e acho Omais fácil digitar do que $.

É diferente da 0Dsolução, pois faz a auto-indentação, por exemplo, com este código (onde !···está uma guia e █ o cursor:

def asd():
!···if foo:
!···!···foo()█
!···!···foobar()

0D vai deixar você com:

def asd():
!···if foo:
█
!···!···foobar()

E ddOvai deixar você com:

def asd():
!···if foo:
!···!···█
!···!···foobar()

E se você pressionar <Esc>imediatamente após isso, o Vim deverá remover a indentação automática, para que você tenha o mesmo que com 0D.

Não existe uma maneira 'correta', isso dependerá exatamente do que você deseja fazer. Eu prefiro ddOporque é mais flexível e porque está "nos meus dedos" :-)


2
^Ddeixará o espaço em branco sozinho.
EvergreenTree

Como o Odeixa no modo de inserção, isso é equivalente a cc, exceto sem recuo automático .... a menos que sua linha já tenha sido recuada automaticamente.
Kyle Strand

Isso se comportará de maneira diferente na última linha do arquivo.
Tommcdo

0

E para salvar aquele toque de tecla precioso que você pode usar, 0Cele excluirá todos os caracteres da linha atual e o colocará no modo de inserção.

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.