удалить слово после или вокруг курсора в VIM - PullRequest
194 голосов
/ 07 мая 2009

Я сейчас переключаюсь на VIM из TextMate. Я нашел ^+W в режиме INSERT очень полезным. Однако я хотел бы удалить не только слово перед курсором, но и слово после или вокруг курсора.

Я немного погуглил, но единственное, что я смог найти, это ^+W удалить слово ДО курсора.

Ответы [ 16 ]

503 голосов
/ 07 мая 2009

Нормальный режим:

daw : delete the word under the cursor    
caw : delete the word under the cursor and put you in insert mode 
96 голосов
/ 13 сентября 2010

Я думаю, что это просто daw

daw - delete a word
74 голосов
/ 07 мая 2009

Что вам нужно сделать, это создать imap определенного ключа для серии команд, в этом случае команды переведут вас в нормальный режим, удалят текущее слово и вернут обратно в insert:

:imap <C-d> <C-[>diwi
66 голосов
/ 07 мая 2009

Нижеследующее работает для нормального режима: Я согласен с ответом Дэна Олсона, что для большинства удалений вы, вероятно, должны быть в нормальном режиме. Более подробная информация ниже.

Если курсор находится внутри слова:
diw удалить в слове (без пробелов)
daw для удаления вокруг слова (включая пробелы перед следующим словом).

Если курсор находится в начале слова, просто нажмите dw.

Это можно умножить, добавив обычные числа для движения, например, 2w для перемещения вперед на 2 слова, поэтому d2w удаляет два слова.

Режим вставки ^ w
Идея использования hjkl для передвижения в Vim заключается в том, что более продуктивно держать руки на домашнем ряду. В конце слова ^ отлично работает, чтобы быстро удалить слово. Если вы перешли в режим вставки, ввели некоторый текст и с помощью клавиш со стрелками попали в середину слова, которое вы пошли против философии домашнего ряда.
Если вы находитесь в обычном режиме и хотите изменить слово, вы можете просто использовать c (изменить) вместо d (удалить), если вы хотите полностью изменить слово, и повторно войти в режим вставки без необходимость нажать i, чтобы вернуться к печати. ​​

40 голосов
/ 07 мая 2009

Ты имеешь в виду как?

dw
20 голосов
/ 07 мая 2009

Не похоже, что есть какой-либо встроенный способ сделать это в режиме вставки, о чем и был вопрос. Некоторые из других ответов верны для обычного режима, а также указывают на то, что можно создать пользовательское сопоставление для добавления функциональности в режиме вставки.

Честно говоря, вы, вероятно, должны делать большую часть удаления в обычном режиме. ^ W очень полезно знать, но я не уверен, что могу придумать ситуацию, в которой я предпочел бы сделать это, чем esc, чтобы перейти в обычный режим и иметь в своем распоряжении более мощные команды удаления.

В этом отношении Vim сильно отличается от ряда других редакторов (включая TextMate). Если вы используете его продуктивно, вы, вероятно, обнаружите, что не проводите много времени в режиме вставки.

19 голосов
/ 07 декабря 2016

Для удаления всех символов между двумя пробелами в обычном режиме:

daW

Чтобы удалить только одно слово:

daw 
12 голосов
/ 21 апреля 2017

Чтобы удалить все слово, на котором находится курсор, используйте diw
. Чтобы удалить все слово, на котором находится курсор, и чтобы перевести вас в режим вставки, используйте ciw
, если вы не хотите удалять весь текст. слово, но удалить оттуда, где вы dw/cw

5 голосов
/ 10 ноября 2017

В режиме вставки такой команды, к сожалению, нет. В VIM, чтобы удалить все слово под курсором, вы можете набрать viwd в режиме NORMAL. Что означает " V isual-block I nner W ord D elete". Используйте верхний регистр W, чтобы включить знаки препинания.

3 голосов
/ 25 марта 2019

Поскольку существует так много способов удалить слово, давайте проиллюстрируем их.

Если вы редактируете:

foo-bar quux

и вызовите команду, когда курсор находится на «а» в «строке»:

foo-bquux  # dw:  letters then spaces right of cursor
foo-quux   # daw: letters on both sides of cursor then spaces on the right 
foo- quux  # diw: letters on both sides of cursor
foo-bquux  # dW:  non-whitespace then spaces right of cursor
quux       # daW: non-whitespace on both sides of cursor then spaces on the right
 quux      # diW: non-whitespace on both sides of cursor
...