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?

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'.


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


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.


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 ;-)

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.)


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

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


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.


Se você quiser deletar o primeiro espaço em branco à esquerda, pressione? em vez de / no meu exemplo.
— brettkelly,
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.