vi atalho para excluir "até o próximo caractere X"

194

Entendo que o vi possui teclas de atalho para excluir caracteres, palavras e linhas com várias opções.

No entanto, não foi possível encontrar o seguinte:

  • excluir do cursor para o próximo caractere especificado

Por exemplo, eu poderia digitar du"esperando que o editor "exclua até que o próximo "caractere seja encontrado"

O mais próximo que eu sei é d9wonde 9está o número de palavras a serem excluídas.

Alguém sabe se isso é possível?

kctang
fonte
Se você estiver interessado em Vi e Vim, eles têm o seu próprio site SE agora: Vi e Vim
sobremesa

Respostas:

303

Use dtc, onde c é qualquer caractere, por exemplo, para você, você desejadt"

Isso excluirá até, mas não inclui c .

Se você tinha:

delete until exclamation point!

E o cursor estava no primeiro espaço e você digitou dt!, você obteria:

delete!

Também dfc.

Isso excluirá até e incluindo c .

Usar df!o mesmo exemplo acima daria a você:

delete

Apenas sobre qualquer "movimento" pode ser utilizado para as d, c, ye comandos semelhantes.

Arcege
fonte
7
Presumivelmente, o mnemônico é t para "até"? Boa resposta.
precisa
15
Você também pode excluir para a instância anterior de um caractere com a versão em maiúscula dos comandos de movimento. Talvez mais útil para vírgulas - dT,e dF,.
Joelostblom
3
Isso não funciona em várias linhas.
0xcaff
3
Isso pode ser feito em várias linhas?
Ray
2
Para fazer algo semelhante em várias linhas, uma pesquisa comum (como na resposta do zpletan) pode ser realizada: d/wordpesquisas até word. Deve ser seguido por enter (para fechar a pesquisa).
Eric O Lebigot
59
  • Para excluir o tipo de encaminhamento até o caractere 'X' dtX

  • Para excluir o encaminhamento através do caractere 'X' dfX

  • Para excluir o caractere 'X' de trás para frente dTX

  • Para excluir o caractere 'X' para trás dFX

Mark Wong
fonte
30

A entrada dt # (não um comando: use-o como um movimento como G)

excluirá do cursor até, mas não incluindo, o #. Você pode substituir qualquer caractere por #.

Jessie
fonte
2
Esta é a resposta certa! df # excluirá # também.
Viet
procurado este, isto é incrível
Nadeem Khedr
18

Parece que o @Arcege já respondeu à pergunta, mas fiz d/lpara excluir até o personagem l; outros personagens também funcionariam.

zpletan
fonte
3
Isso funciona para coisas em novas linhas.
Jasonszhao # 9/16
Nota: isso deve ser seguido por Enter.
Eric O Lebigot
6

wmove para a palavra seguinte. lmove para o seguinte personagem.

Portanto, é d9lpara excluir os próximos 9 caracteres.

Shun Zhang
fonte
2
Fechar, lé a tecla de seta direita do Vim, então você está realmente excluindo a direita. Por outro lado, d9hexcluiria 9 caracteres restantes.
Walf