Mover após o final da palavra ou Excluir após cliente

8

Qual é a sequência mais rápida para excluir no final da linha após a posição do cursor?

Exemplo:

Eu quero excluir esta linha mais rapidamente

Sequência: 5eDexcluirá o último caractere da palavraline

Quero excluir este lin

Mover-se com o vim geralmente me coloca no primeiro ou no último caractere de uma palavra, forçando-me a mover mais uma vez cada vez que quero excluir o final da linha (no exemplo acima, adicionando um movimento à direita: 5elD) Existe uma maneira mais eficiente (movendo-se após o final da palavra ou excluindo após o cursor)?

Pierre-Jean
fonte
1
6wDdeixa um espaço após a última palavra, mas pelo menos o texto visível é como você deseja. 6wDxtermina o trabalho, mas você pressiona quatro vezes novamente.
precisa saber é o seguinte
Obrigado Peter pela alternativa, mas, de fato, esta solução me deixa com mais um toque de tecla para concluir o trabalho. Como esse cenário é bastante comum, seria ótimo realizar esse trabalho em uma ação. Sua solução é melhor que a do meu exemplo, na maioria dos cenários.
Pierre-Jean
Se você fizer isso como Peter sugere e acabar com um espaço em branco à direita, existem plugins como o DeleteTrailingWhitespace que podem eliminá-los automaticamente.
Philipp Moers

Respostas:

4

Dé um comando inclusivo que funciona sobre um movimento que inclui o cursor em uma extremidade e o último caractere imprimível na linha na outra extremidade. Não há maneira integrada do AFAIK de transformar um comando inclusivo em um comando exclusivo e vice-versa.

A solução mais pesada seria definir seus próprios operadores e movimentos / objetos de texto.

Uma solução um pouco mais leve seria definir mapeamentos para esses casos de canto.

Uma solução ainda mais leve - mas chata - seria gastar mais algumas teclas no modo visual.

Ou você pode simplesmente se mover de uma maneira um pouco mais "ágil":

5f D
romainl
fonte
1
Bem, estou um pouco triste por não haver uma maneira mais fácil, mas você respondeu minha pergunta. Obrigado!
Pierre-Jean
1

Existem várias maneiras de conseguir o que você deseja:

5elD
6f D
6wDx
6whD
# ... probably others too

Tudo isso custa apenas um toque de tecla.

Se foi possível excluir a partir da posição atual +1, será recomendável solicitar também a exclusão da posição atual -1. Também levantaria a questão sobre outros comandos, por exemplo, excluir até o final do arquivo da linha atual +1, -1 e assim por diante.

Como isso pode funcionar? Eu vejo apenas duas maneiras possíveis:

  1. Passe um parâmetro para os comandos existentes para modificar seu comportamento com a nuance desejada. Isso inevitavelmente custará +1 ao pressionamento de tecla, para que você não fique melhor do que o que já existe
  2. Tenha um novo pressionamento de tecla para esse comportamento. A maioria das teclas do teclado já tem algo mais importante e poderoso para fazer; seria uma escolha muito difícil atribuir uma das teclas não utilizadas para uma funcionalidade tão pequena.

Portanto, não vejo uma maneira de ter algo melhor do que os recursos atuais :-)

Concordo que é um pouco lamentável que não haja um comando "atômico" para excluir do próximo caractere. Vejo o uso prático do que você está perguntando: ao recortar um texto, geralmente desejo excluir a partir de um caractere de espaço, porque não quero deixar espaços em branco no final das linhas (o Git reclama, por exemplo). E os comandos we esalto de palavras não são muito adequados para isso, como wsalta para as primeiras letras e esalta para as últimas letras, e não há atalho para saltar no espaço após uma palavra, exceto pesquisas explícitas como f. Então eu entendo e até compartilho sua necessidade. Só não vejo onde isso pode ser espremido na funcionalidade existente.

A melhor alternativa em que posso pensar é gravar a ação em uma macro, digamos d. No final de uma palavra (na última letra), registre assim:

qdlDq

Em seguida, você pode refazer esta ação no final de outra palavra com @d. Para fazer isso repetidamente, você pode fazer @@. Ao fazer isso repetidamente, é mais rápido digitar do que lD, mas isso pode depender do seu gosto. Se você não fizer isso repetidamente, a macro não ajudará, pois é o mesmo número de pressionamentos de tecla (+ a criação da macro).

janos
fonte
"Como todas as teclas do teclado já têm algo mais importante e poderoso para fazer, essa opção parece completamente impossível". Não é verdade; existem várias chaves não utilizadas e algumas que são sem dúvida menos poderosas / importantes que poderiam ser remapeadas para exigir a chave do líder, liberando-as para algo genuinamente importante.
Bem, a chave que eu uso ao testar um mapeamento é a tecla backspace, e não é uma má escolha para uma operação que executa uma exclusão (atualmente, eu a defini para executar uma exclusão de linha sem alterar os registros geralmente usados ​​por essa ação, para copiar / recortar algum texto, excluir linhas usando backspace e colar o texto original).