2009-09-04 3 views
86

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

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

ответ

146

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

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

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

+0

« caw »можно использовать вместо« ciw »той же функциональности. – Amjith

+0

Принимая во внимание, что «caw» и «ciw» заменят все слово, просто «cw» изменится с текущей позиции курсора на конец текущего слова. –

+0

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

8

Что касается второго вопроса: bPldw

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

+5

это также удаляет пробел после слова. Должно быть 'bPlde'. – 0x89

+9

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

2

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

+1

Вы можете использовать 'bcw', чтобы перейти к началу текущего слова, а затем изменить слово, которое оставляет вам режим вставки. –

+0

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

+3

@WarrenPena В этом случае просто используйте 'dwi'. Просто будьте осторожны, чтобы полицейские не заметили, поскольку DWI является незаконным в большинстве штатов. –

18

Ответ на ваш последующий вопрос: viwp

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

Как сделать это несколько раз подряд? Каждый раз, когда вы вставляете, буфер заполняется словом, которое я наклеил. –

+1

@BenGartner Обнаружено это в [Vim Tips wiki] (http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text#Alternate_method): используйте 'yiw' для копирования текущего слова, поместите курсор на слово для замены, используйте' ciw 0'. После этого вы можете поместить курсор на следующее слово и использовать '.' для повторной замены. – siegi

+0

@BenGartner Если все, что вы пытаетесь сделать, это заменить все экземпляры WORD_A на WORD_B, тогда вы просто используете ex-режим vim, ':% s/a/b/g'. 'a' может быть точным текстом или регулярным выражением, а' b' - это то, что вы замените всеми совпадениями 'a'. Вы можете тестировать регулярные выражения с помощью режима '/' vim. Замените '%' номером строки или диапазоном, если вы не хотите заменять на всех строках. –

2

Для первого вопроса, bcw также работать. Это означает «b ack к началу слова, c hange w ord». Но я думаю, что ciw более запоминающимся, что означает «c hange i nner w ord», всего лишь один шаг.

Для второго вопроса о замене с использованием пасты мое решение - "_diwP. Это d elete i nner w ord в регистр вам все равно и p aste содержание регистратуры по умолчанию. Преимущество состоит в том, что вы можете вставлять регистр по умолчанию много раз, потому что он не будет загрязнен. Это комплекс litte, поэтому я нахожу его как nnoremap ,r "_diwP.

Смежные вопросы