Как заменить одно слово под курсором?

153

Как заменить слово под курсором в Vim.

Итак, вместо того, чтобы использовать dwзатем iслово, а затем Esc, есть ли более простая комбинация для замены слова под курсором?

говорит
источник

Ответы:

262
ciw

(изменить внутреннее слово) изменит все слово под курсором. Сравнить с

cw

который изменит только слово из текущей позиции курсора . Для получения дополнительной информации см. Этот вопрос / ответ SO .

Брайан Агнью
источник
Что делать, если слово содержит точки или косые черты (например, /usr/bin/bashили 1222.333)? Похоже, vim интерпретирует /и .как конец слова и не выбирает всю строку.
Александр Цска
87

Я часто обнаруживаю, что хочу заменить одно слово другим, которое я выдернул из другого места. Проблема с другими решениями является то , что если вы пытаетесь изменить слово, то ваша следующая паста будет этим словом , что вы удалили с cw.

Попробуйте следующее:

1 "This first word should overwrite the second"

yiw     yank inner word (copy word under cursor, say "first").
...     Move the cursor to another word (say "second").
viwp    select "second", then replace it with "first". 

Надеюсь, это то, что вы искали.

Эфирный
источник
7
Он работает нормально, но только если необходимо произвести замену once. Если мне нужно заменить пару second' by первых` (в вашем примере), скопированное слово станет secondпосле первой замены.
ViFI 06
32

ciw

c   change
iw  inner word

Это удалит слово под курсором (даже если курсор находится где-то посередине слова) и перейдет в режим вставки.


Также см. Документацию Vim для справки:

:help c
:help text-objects
Ксофмейстер
источник
17

Если вы хотите изменить слово на слово, которое ранее было перетащено, есть другое решение viwp(после того, как вы перетащили первое слово).

ciwудаляет предыдущее слово и переводит вас в режим вставки, где оно было. Но затем вы можете использовать ctrl+r, 0для вставки содержимого регистра 0 (который содержит ранее извлеченное слово).

Так:

yiw
[move to next word]
ciw
ctrl+r
0

Это работает лучше, чем viwpпотому, что после первого использования вы можете повторно выполнить замену .. Он также не переключается в визуальный режим и не выделяется на короткое время.

Коннор
источник
1
Не уверен, что вы имеете в виду, что он не меняет режимы, кажется, наоборот, но, возможно, это то, что вы хотели, чтобы оставаться в режиме вставки. Но большим преимуществом является то, что это (в отличие от viwp) можно проделать несколько раз с помощью одного рывка. Благодарность!
Palo
О, ты прав, я думал перейти в визуальный режим, отредактировал. Я не понимал, что это ограничение viwp- даже .не дублирует.
Коннор
3
Это, безусловно, лучшее решение, когда мы уже выдернули заменяющее слово.
mljrg 04
1
Это ответ! Возможность использовать .с этим отличная!
izzy 03
1

Попробуйте cw- как в «поменять слово».

Используйте http://linuxmoz.com/vi-commands-cheat-sheet/ или любую другую шпаргалку в качестве справки.

Косма Дуниковски
источник
1
Это работает, но изменит только символы справа от курсора
Брайан Агнью