Ответы:
Что вы должны сделать, это создать 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