vim apagando truques para trás

119
  • Como deletar uma palavra à esquerda? Em outras palavras, exclua a palavra quando o cursor estiver no final dela.
  • Como deletar caracteres no início da linha?
  • Como alguém deleta o primeiro espaço em branco à esquerda?

  • Algum outro truque envolvendo a exclusão de palavras?

Vehomzzz
fonte

Respostas:

163

Em geral, d <motion> irá deletar da posição atual para a posição final após <motion>. Isso significa que:

  1. d <leftArrow> irá deletar o caractere atual e esquerdo
  2. d $ irá deletar da posição atual até o fim da linha
  3. d ^ irá deletar do retrocesso atual para o primeiro caractere sem espaço em branco
  4. d0 irá deletar do retrocesso atual até o início da linha
  5. dw exclui atual até o final da palavra atual (incluindo espaço à direita)
  6. db apaga atual para o início da palavra atual

Leia isto para aprender todas as coisas que você pode combinar com o comando 'd'.

Lucas omã
fonte
1
Outro atalho útil caso você ache dbdifícil lembrar: 5. dw or d<ctrl+rightarrow>e 6. db or d<ctrl+leftarrow>
Crisboot
6
Em vez de digitar, d<leftArrow>faça dh, já que hé a chave para mover para a esquerda
Dylanthepiguy
4
Por que essa resposta é aceita? d <leftArrow> (e nenhum dos abaixo, exceto dw) não excluirá um caractere sob um cursor como OP queria.
listerreg
73

Já estive neste cenário muitas vezes. Quero me livrar de todos os espaços na linha 10 para que ela se junte à linha 9 após a vírgula.

insira a descrição da imagem aqui

Esta é basicamente uma junção de linha simples no VIM.

kJ faz o truque (veja abaixo)

Linhas de junção do Vim

Abdo
fonte
9
Estive procurando por isso em todos os lugares!
functionvoid
2
haha, eu quero isso e não tenho ideia de como descrever no Google. Sorte que eu rolei para baixo =))
Thai Tran
1
Não consigo acreditar quantas vezes fiz isso manualmente. Isso é exatamente o que eu estava procurando, OBRIGADO!
tobiasandersen,
1
isso é exatamente o que eu estava procurando. Vim me
surpreende
4
A explicação para isso é: k= Up, J= Unir a linha abaixo à atual com um espaço no meio. Você também pode fazer kgJpara entrar sem um espaço. gJ= Junte a linha abaixo sem espaço entre eles. Via cheatsheet: vim.rtorr.com
KhalilRavanna
31

Para responder ao ponto # 3, diwe dawsão excelentes.

Randy Morris
fonte
4
Acho triste que não haja comandos de dois caracteres para excluir uma palavra ao contrário quando você está na última letra, porque em editores padrão como notepad ++, gedit etc., você pode facilmente usar CTRL + Backspace ... exceto nesse vim é excelente.
itmuckel
3
@ roggan87 Se você estiver na última letra de uma palavra, dbexclui as letras que precedem a última letra, mas ainda deixa a última letra.
Prashanth Chandra
2
Você pode explicar o que ie aestão fazendo no meio desses comandos? Sei que o início dé "excluir" e presumo que o final wseja "palavra".
Carl G
1
@CarlG A melhor explicação está em :help text-objects. O parágrafo inicial é muito conciso e acho que o descreve muito bem.
Randy Morris
5
<kbd> i </kbd> é "interno" e <kbd> a </kbd> é "a", como em "uma palavra". O primeiro não incluirá espaços em branco delimitadores, enquanto o último incluirá espaços em branco à direita, se houver; caso contrário, incluirá espaços em branco precedentes. Muito útil, obrigado.
Carl G
25

No modo de inserção:

  • ^ w
  • ^ u
  • não consigo responder da minha cabeça ;-)

De outra forma:

  • dw
  • v0x
  • não consigo responder da minha cabeça ;-)
Michael Krelin - hacker
fonte
Eu não sabia que posso deletar palavra no modo Inserir no Vim. Isso ajuda muito.
Đỗ Tiến
18

No modo de comando:

  1. bdw, voltar excluir palavra.
  2. d^(para o primeiro não vazio), d0(para o primeiro caractere)
  3. BdW (vá para o primeiro espaço em branco, exclua o próximo espaço em branco)

(Wiki da comunidade, sinta-se à vontade para hackear.)

zoul
fonte
14
  1. db (se o cursor estiver após a palavra) ou bdw
  2. d0(ou d^se você deseja excluir o primeiro caractere não em branco)
  3. dEou dtSpacepara excluir para o primeiro espaço ou d/\sEnterpara excluir para o próximo caractere de espaço em branco.

Editar

Como a pergunta foi alterada de forma que 3 é excluído até o primeiro caractere de espaço em branco à esquerda, minha resposta deve mudar para:

  1. dBou dShiftTSpacepara deletar de volta ao primeiro espaço ou d?\sEnterdeletar para o caractere de espaço em branco anterior.

Vejo:

:help motion.txt
:help WORD
DrAl
fonte
Boa chamada em # 3. Eu não tinha certeza de como lidar com QUALQUER espaço em branco. Vale ressaltar que dF <SPACE> excluirá até e incluindo <SPACE> enquanto dT <SPACE> deixará <SPACE> lá.
Mark Biek,
Vim aqui procurando algo parecido bdw. O personagem restante (aquele originalmente sob o cursor) de dbcontinuou me irritando.
Deiwin
8

Sinto que nenhuma das respostas está completa:

Em geral, você geralmente inicia uma operação de exclusão usando d<motion>, e raramente usando x.

Nota: Quando Nnão especificado, se comporta como se N=1(exclui um único caractere)

Carateres discretos:

<N>x - Exclua N caracteres à direita

d<N><left-arrow> - Exclua N caracteres à esquerda

d<N><right-arrow> - Exclua N caracteres à direita

Limites de palavras:

Nota: A primeira palavra anterior / seguinte é aquela sob o cursor

d<N>b - Excluir do início da enésima palavra anterior para a posição atual

d<N>e - Excluir da posição atual até o final da enésima palavra seguinte

d<N>w- O mesmo que, d<N>emas incluindo espaços em branco à direita

diw - Exclua a palavra inteira sob o cursor

daw- O mesmo que, diwmas incluindo espaços em branco à direita

Limites de linha:

d0 - Excluir do início da linha para a posição atual

d^ - Exclua do primeiro caractere sem espaço em branco para a posição atual

d$ - Excluir da posição atual até o final da linha

Daniel Trugman
fonte
1

/ <CR>x

(procure um espaço para frente, pressione Enter para ir até lá, x para deletar)

Pode haver uma maneira mais mágica de fazer isso, mas não conheço nenhuma.

Brettkelly
fonte
Se você quiser deletar o primeiro espaço em branco à esquerda, pressione? em vez de / no meu exemplo.
brettkelly,