Відповіді:
Що вам слід зробити, це створити зображення певної клавіші для серії команд; у цьому випадку команди перейдуть у звичайний режим, видалять поточне слово, а потім повернуть вас у вставку:
: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 полягає в тому, що більш продуктивно тримати руки в домашньому ряду. В кінці слова ^ w працює чудово, щоб швидко видалити слово. Якщо ви перейшли в режим вставки, ввели текст і скористалися клавішами зі стрілками в середині слова, яке ви суперечили філософії домашнього ряду.
Якщо ви перебуваєте в звичайному режимі і хочете змінити слово, ви можете просто скористатися c(змінити), а не d(видалити), якщо ви хочете повністю змінити слово, і знову ввести режим вставки, не натискаючи, iщоб повернутися до набору тексту.
Ви маєте на увазі, як?
dw
dwне видалить дефіс чи інші розділові знаки.
Схоже, немає вбудованого способу зробити це в режимі вставки, в чому полягало питання. Деякі з інших відповідей є правильними для звичайного режиму, а також вказують, що для додавання функціональності у режимі вставки можна створити спеціальне відображення.
Чесно кажучи, ви, ймовірно, повинні зробити більшу частину своїх видалень у звичайному режимі. ^ W це акуратно знати, але я не впевнений, що я можу придумати ситуацію, коли я вважаю за краще це зробити, ніж esc, щоб перейти в звичайний режим і мати в своєму розпорядженні більш потужні команди видалення.
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 слів). Для видалення навколо курсору взагалі можна використовувати daw.
У старому 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