vim удаляет обратные трюки


119
  • Как удалить слово слева? Другими словами, удаляйте слово, когда курсор стоит на его конце.
  • Как удалить символы в начале строки?
  • Как удалить первый пробел слева?

  • Есть ли другие уловки, связанные с удалением слов?

Ответы:


163

Как правило, d <motion> удалит из текущей позиции в конечную позицию после <motion>. Это означает, что:

  1. d <leftArrow> удалит текущий и левый символ
  2. d $ удалит с текущей позиции до конца строки
  3. d ^ удалит от текущего назад до первого символа без пробела
  4. d0 удалит от текущего назад до начала строки
  5. dw удаляет текущее до конца текущего слова (включая конечный пробел)
  6. db удаляет текущее до начала текущего слова

Прочтите это, чтобы узнать обо всем, что можно сочетать с командой 'd'.


2
Еще один удобный ярлык на случай, если вам dbсложно вспомнить: 5. dw or d<ctrl+rightarrow>и 6. db or d<ctrl+leftarrow>
Crisboot

7
Вместо того, чтобы печатать « d<leftArrow>делай» dh, потому hчто это ключ к левому ходу
Дилантепигуй

4
Почему это принятый ответ? d <leftArrow> (и ни один из перечисленных ниже, кроме dw) не удалит символ под курсором, как того требует OP.
listerreg

74

Я был в этом сценарии много раз. Я хочу избавиться от всех пробелов в строке 10, чтобы она присоединялась к строке 9 после запятой.

введите описание изображения здесь

По сути, это простое соединение строк в VIM.

kJ делает свое дело (смотрите ниже)

Строки соединения Vim


10
Я везде это искал!
functionvoid

2
ха-ха, я хочу это и понятия не имею, как это описать в Google. Так повезло, что я прокручиваю вниз =))
Thai Tran

1
Не могу поверить, сколько раз я делал это вручную. Это именно то, что я искал, СПАСИБО!
tobiasandersen

1
это именно то, что я искал. Vim сносит мой мозг каждый день
singmotor

4
Объяснение этому: k= Вверх, J= Присоединить строку ниже к текущей с одним пробелом между ними. Вы также kgJможете присоединиться без пробела. gJ= Присоединиться к строке ниже без пробелов между ними. Через cheatsheet
KhalilRavanna

31

Чтобы ответить на пункт 3, diwи dawотлично.


4
Мне грустно, что нет двухсимвольных команд для удаления слова назад, когда вы находитесь на последней букве, потому что в стандартных редакторах, таких как notepad ++, gedit и т. Д., Вы можете легко использовать CTRL + Backspace ... кроме этого vim отличный.
itmuckel 04

3
@ roggan87 Если вы находитесь на последней букве слова, dbудаляет буквы, предшествующие последней букве, но по-прежнему оставляет последнюю букву.
Прашант Чандра

2
Не могли бы вы объяснить, что iи aделают в середине этих команд? Я знаю, что начало d- это «удалить», и я предполагаю, что завершение w- это «слово».
Carl G

1
@CarlG Лучшее объяснение здесь :help text-objects. Начальный абзац очень краток и, я думаю, очень хорошо его описывает.
Рэнди Моррис

5
<kbd> i </kbd> - это «внутренний», а <kbd> a </kbd> - «а», как в «слове». Первый не будет включать закрывающие пробелы, в то время как второй будет включать завершающие пробелы, если они есть, в противном случае будет включать предшествующие пробелы. Очень полезно, спасибо.
Carl G

25

В режиме вставки:

  • ^ ш
  • ^ U
  • не могу ответить из головы ;-)

В противном случае:

  • с.в.
  • V0x
  • не могу ответить из головы ;-)

Я не знал, что могу удалить слово в режиме вставки в Vim. Это очень помогает.
Đỗ Tiến

18

В командном режиме:

  1. bdw, назад удалить слово.
  2. d^(до первого непустого d0символа) , (до первого символа)
  3. BdW (перейти к первому пробелу удалить до следующего пробела)

(Вики сообщества, не стесняйтесь взламывать.)


14
  1. db (если курсор стоит после слова) или bdw
  2. d0(или d^если вы хотите удалить до первого непустого символа)
  3. dEлибо dtSpaceудалить до первого пробела, либо d/\sEnterудалить до следующего символа пробела.

редактировать

Поскольку вопрос был изменен таким образом, что 3 - это удаление первого символа пробела слева, мой ответ должен измениться на:

  1. dBлибо dShiftTSpaceдля удаления обратно к первому пробелу, либо d?\sEnterдля удаления до предыдущего символа пробела.

Видеть:

:help motion.txt
:help WORD

Хороший звонок по №3. Я не был уверен, как обрабатывать ЛЮБЫЕ пробелы. Стоит отметить, что dF <SPACE> удалит до <SPACE> включительно, тогда как dT <SPACE> оставит <SPACE> там.
Марк Бик

Пришел сюда искал что-то вроде bdw. Оставшийся персонаж (тот, что изначально был под курсором) dbпродолжал меня раздражать.
Deiwin 02

8

Я чувствую, что ни один из ответов не является полным:

Как правило, вы обычно начинаете операцию удаления, используя d<motion>, и редко используя x.

Примечание: если Nне указано, ведет себя как если бы N=1(удаляет один символ)

Дискретные символы:

<N>x - Удалить N символов справа

d<N><left-arrow> - Удалить N символов слева

d<N><right-arrow> - Удалить N символов справа

Границы слов:

Примечание. Первое предшествующее / последующее слово находится под курсором.

d<N>b - Удалить с начала предыдущего N-го слова до текущей позиции

d<N>e - Удалить с текущей позиции до конца следующего N-го слова

d<N>w- То же, d<N>eно с завершающим пробелом

diw - Удалить все слово под курсором

daw- То же, diwно с завершающим пробелом

Границы линии:

d0 - Удалить с начала строки до текущей позиции

d^ - Удалить с первого символа без пробелов до текущей позиции

d$ - Удалить с текущей позиции до конца строки


1

/ <CR>x

(найдите пробел вперед, нажмите Enter, чтобы перейти туда, x, чтобы удалить)

Возможно, есть более волшебный способ сделать это, но я не знаю ни одного.


Если вы хотите удалить первый пробел слева, нажмите? вместо / в моем примере.
brettkelly
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.