Ответы:
Что вы должны сделать, это создать imap определенного ключа для серии команд, в этом случае команды переведут вас в нормальный режим, удалят текущее слово и затем вернут обратно в insert:
:imap <C-d> <C-[>diwi
imap <C-d> <C-o>diw
работает тоже. Это также не создает точку отмены, как это обычно делает <Esc>.
Нормальный режим:
daw : delete the word under the cursor
caw : delete the word under the cursor and put you in insert mode
da)
и , ci)
но никогда не думал об этом!
.vimrc
файле следующим образом: nmap <Leader>d daw
иnmap <Leader>c caw
aw
это один из примеров выбора объекта. Вы можете попробовать выбор объектов в визуальном режиме, чтобы увидеть, какой эффект они имеют: vimdoc.sourceforge.net/htmldoc/motion.html#object-select
Я думаю это просто daw
daw - delete a word
a
это команда, Append text after the cursor [count] times.
но как она daw
работает?
d
диктует, что вы будете «удалять». «A» является своего рода параметром, определяющим, что удаление должно включать разделитель. Наконец, «w», другой, parameter
если вы захотите, указывает, что word
юнит будет удален.
dw
а daw
?
dw
удалится от курсора до конца слова, при daw
этом удалит все слово вместе с пробелом. diw
удалит все слово, не касаясь пробелов вокруг него.
Нижеследующее работает для нормального режима: я согласен с ответом Дэна Олсона о том, что для большинства удалений вы, вероятно, должны быть в нормальном режиме. Более подробная информация ниже.
Если курсор находится внутри слова:
diw
удалить в слове (без пробелов),
daw
чтобы удалить вокруг слова (включает пробелы перед следующим словом).
Если курсор находится в начале слова, просто нажмите dw
.
Это можно умножить, добавив обычные числа для движения, например, 2w для перемещения вперед на 2 слова, поэтому d2w удалит два слова.
Режим вставки ^ w
Идея использования hjkl для перемещения в Vim состоит в том, что более продуктивно держать руки на домашнем ряду. В конце слова ^ отлично работает, чтобы быстро удалить слово. Если вы перешли в режим вставки, ввели некоторый текст и с помощью клавиш со стрелками попали в середину слова, которое вы пошли против философии домашнего ряда.
Если вы находитесь в обычном режиме и хотите изменить слово, вы можете просто использовать c
(изменить) вместо d
(удалить), если вы хотите полностью изменить слово, и снова войти в режим вставки, не нажимая i
для возврата печатать.
Вы имеете в виду как?
dw
dw
не удалится через дефис или другую пунктуацию.
Не похоже, что есть какой-то встроенный способ сделать это в режиме вставки, что было вопросом. Некоторые из других ответов верны для обычного режима, а также указывают на то, что можно создать пользовательское сопоставление для добавления функциональности в режиме вставки.
Честно говоря, вы, вероятно, должны сделать большую часть удаления в обычном режиме. ^ W неплохо знать, но я не уверен, что могу придумать ситуацию, в которой я бы предпочел сделать это, чем перейти в обычный режим и получить более мощные команды удаления в моем распоряжении.
В этом отношении Vim сильно отличается от ряда других редакторов (включая TextMate). Если вы используете его продуктивно, вы, вероятно, обнаружите, что не проводите много времени в режиме вставки.
Чтобы удалить все слово, на котором находится ваш курсор, используйте. diw
Чтобы удалить все слово, на котором находится ваш курсор, и чтобы перевести вас в режим вставки, используйте, ciw
если вы не хотите удалять все слово, но удаляете оттуда, где вы находитесь.dw/cw
Поскольку существует так много способов удалить слово, давайте проиллюстрируем их.
Предполагая, что вы редактируете:
foo-bar quux
и вызовите команду, когда курсор находится на панели «a» in:
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
Принятый ответ не удаётся при попытке повторить удаление слов, попробуйте следующее решение:
" delete current word, insert and normal modes
inoremap <C-BS> <C-O>b<C-O>dw
noremap <C-BS> bdw
Он отображает CTRL-BackSpace, также работает в обычном режиме.
Для удаления определенного количества символов перед курсором вы можете использовать X. Для удаления определенного количества слов после курсора вы можете использовать dw (можно удалить несколько слов, используя 3dw для 3 слов, например). Для удаления вокруг курсора в целом, вы можете использовать галку.
В старом vi b
перемещает курсор в начало слова перед курсором, w
перемещает курсор в начало слова после курсора, e
перемещает курсор в конец слова после курсора иdw
удаляет курсор из конца слова.
Если вы печатаете wbdw
, вы удаляете слово вокруг курсора, даже если курсор находится в начале или в конце слова. Обратите внимание, что пробелы после слова считаются частью слова, которое нужно удалить.
Я хотел бы удалить не только слово перед курсором, но и слово после или вокруг курсора.
В этом случае решение, предложенное ОП (т.е. использующее <c-w>
), может быть объединено с принятым ответом, чтобы дать:
inoremap <c-d> <c-o>daw<c-w>
альтернативно (более короткое решение):
inoremap <c-d> <c-o>vawobd
Пример ввода:
word1 word2 word3 word4
^------------- Cursor location
Вывод:
word1 word4