Як видалити слово і перейти в режим вставки у Vim?


98

У звичайному режимі я можу натиснути Ctrl+, Eщо видаляє решту поточного слова та переходить у режим вставки.

Я хочу видалити ціле слово, незалежно від позиції курсору (в межах слова, звичайно).

Відповіді:


164

Ви можете використовувати "змінити внутрішнє слово", набравши "ciw", щоб видалити слово, на якому знаходиться курсор.

Команди "internal" та "a" чудові у Vim, також спробуйте "ci {" всередині блоку {} або "ca {", якщо ви також хочете видалити символи {}. Щоб перекласти ці команди на англійську, щоб краще їх запам'ятати, спробуйте: "змінити внутрішній {блок" та "змінити {блок".

Документація за адресою http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects


"caw" можна використовувати замість "ciw" тієї ж функціональності.
Amjith

Тоді як 'caw' та 'ciw' замінять ціле слово, просто 'cw' зміниться з поточної позиції курсору на кінець поточного слова.
Дрю Стівенс

Я відредагував відповідь від розповіді про "co {" до "ca {", як нагадував коментар jinxed_coders. Моя стара налаштування реалізує команди "(a) <>" як команди "(o) uter <>".
Kaali

19
ciwі cawне зовсім однакові: ciwвидаляє лише слово, також cawвидаляє кінцевий простір.
Роберто Бонваллет

5
: допоможіть об’єктам у vim прочитати більше про ці види виділень.
Аарон,

19

Відповідь на ваше подальше запитання: viwp

v    -> start visual mode
iw   -> select the 'inner word'
p    -> paste - in visual mode it replaces the visually selected text.

3
Як це робити кілька разів поспіль? Кожного разу, коли ви вставляєте, буфер заповнюється словом, яке я вставив.
Бен Гартнер,

1
@BenGartner Знайшов це на вікі Vim Tips : Використовуйте yiwдля копіювання поточного слова, наведіть курсор на слово, яке потрібно замінити, використовуйте ciw<C-r>0. Після цього ви можете помістити курсор на наступне слово і використати .для повторення заміни.
siegi

@BenGartner Якщо все , що ви намагаєтеся зробити , це замінити всі екземпляри WORD_A з WORD_B, то ви просто використовувати Vim, режим ех, :%s/a/b/g. aможе бути точним текстом або регулярним виразом, і bсаме цим ви заміните всі збіги a. Ви можете перевірити регулярні вирази в /режимі vim . Замініть %номером рядка або діапазоном, якщо ви не хочете замінювати всі рядки.
Braden Best

8

Щодо другого питання: bPldw

Це призведе до того, що ви перейдете на початок поточного слова, вставте регістр за замовчуванням перед курсором, перейдете до наступного символу (пройде повз кінець щойно вставленого тексту) та видалите решту слово.


5
це також видаляє пробіл після слова. Повинно бути bPlde.
0x89

10
Ні, повинно бутиviwp
aehlke

3

Для першого питання bcwтакож працюйте. Це означає " back на початку слова, change word". Але я думаю, що ciwце більше запам'ятовується, що означає " cповісити iпорядок w", лише один крок.

Що стосується другого питання про "заміну за допомогою пасти", моє рішення: "_diwP . Це dдаліть inner wога в регістр ви не дбаєте і pAste вмісту регістра за замовчуванням с. Перевага полягає в тому, що ви можете вставити реєстр за замовчуванням багато разів, оскільки він не буде забруднений. Це невеликий комплекс, тому я наношу його на карту nnoremap ,r "_diwP.


2

Або, можливо, ви можете використовувати послідовність клавіш, bdwiщоб видалити поточне слово та перейти в режим ВСТАВКИ.


1
Ви можете використовувати, bcwщоб перейти до початку поточного слова, а потім змінити слово, що залишає режим вставки.
Hank Gay

Якщо курсор уже на першому символі слова, це призведе до видалення попереднього слова.
Уоррен Пена,

3
@WarrenPena У такому випадку просто використовуйте dwi. Тільки будьте обережні, щоб копи цього не помітили, оскільки DWI є незаконним у більшості штатів.
Брейден Бест
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.