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


98

В обычном режиме я могу нажать Ctrl+, Eкоторый удаляет остальную часть текущего слова и переходит в режим вставки.

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

Ответы:


165

Вы можете использовать «изменить внутреннее слово», набрав «ciw», чтобы удалить слово, на котором находится курсор.

Команды "inner" и "a" отлично подходят для Vim, попробуйте также "ci {" внутри блока {} или "ca {", если вы также хотите удалить символы {}. Чтобы перевести эти команды на английский язык, чтобы лучше их запомнить, попробуйте: "изменить внутренний {блок" и "изменить {блок".

Документация на http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects


"caw" может использоваться вместо "ciw" той же функциональности.
Амджит, 04

Тогда как «caw» и «ciw» заменят все слово, просто «cw» изменится от текущей позиции курсора до конца текущего слова.
Дрю Стивенс

Я отредактировал ответ от «co {» до «ca {», как напомнил комментарий jinxed_coders. Моя старая настройка реализует команды "(a) <>" как команды "(o) uter <>".
Kaali

19
ciwи cawне совсем то же самое: ciwудаляет только слово, также cawудаляет конечный пробел.
Роберто Бонвале,

5
: help для объектов в 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 04

10
Нет, должно бытьviwp
aehlke

3

По первому вопросу bcwтоже работаю. Это означает « bв начале слова, cизменить wпорядок». Но я думаю , что ciwэто более запоминающееся, что означает « cвисящий inner wог», всего лишь один шаг.

На второй вопрос о «замене пастой» я могу ответить "_diwP. Он dвыбирает регистр, который вам не нужен, и iсохраняет содержимое регистра по умолчанию. Преимущество состоит в том, что вы можете вставлять регистр по умолчанию много раз, потому что он не будет загрязнен. Это небольшой комплекс, поэтому я отображаю его как .wpnnoremap ,r "_diwP


2

Или вы могли бы использовать последовательность клавиш bdwiдля удаления текущего слова и перехода в режим INSERT.


1
Вы можете использовать bcwдля перехода к началу текущего слова, а затем изменить слово, после чего вы перейдете в режим вставки.
Hank Gay,

Если ваш курсор уже находится на первом символе слова, это приведет к удалению предыдущего слова.
Уоррен Пена,

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