Відповіді:
Що вам слід зробити, це створити зображення певної клавіші для серії команд; у цьому випадку команди перейдуть у звичайний режим, видалять поточне слово, а потім повернуть вас у вставку:
: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