У меня есть файл со строкой, которая выглядит так:
foofoo.xy.barbar
Я хочу , чтобы изменить xy
To gh
. Я пытался сделать 2r-> gh, но очевидно , что не работает, как он заменил xy
с , gg
а затем переместил курсор на одно место влево.
Есть ли способ сделать это, не входя в режим вставки, или не используя намного больше нажатий клавиш (например :s/xy/gh/)?
replace
repeated-commands
durron597
источник
источник
R
входит в режим замены.:help replace-mode
за дополнительной информацией.vt.rgh
. Но результат был таким же, как у вас, за исключением положения курсора.cwgh<esc>
будет работать нормально.minimize-keystrokes
это хороший тег, обычно это не совсем то , что речь идет о , как таковой. (Я отклонил предложенные вами изменения) ... Возможно, вам следует обсудить в мета?Ответы:
Если новый текст имеет ту же длину, что и старый текст, опция замены Vim является опцией. Из обычного режима R(это заглавная "r") вы переходите в режим замены. Это похоже на «перезапись» в некоторых других текстовых редакторах: вместо вставки новых символов, как в режиме вставки, ввод текста заменит курсор под курсором, а затем перейдет к следующему курсору. (Думайте об этом как о нижнем регистре
r
, но не только по одному символу за раз.) Найдите документацию для режима замены на:help replace-mode
.В вашем случае: с курсором между
.
иx
, войдите в режим замены, нажав R. Теперь, когда вы печатаете, gон заменяет «x» и переходит к следующему символу, поэтому вы можете печатать, hчтобы заменить «y». Ваше редактирование завершено, поэтому Escapeвернитесь в обычный режим.(Это работает, когда ваш текст замены имеет ту же длину, что и старый текст, но если ваша замена длиннее или короче, вам
c
может понадобиться все: она заменит 1 текст внутри движения на текст, который вы затем напечатаете. много способов сделать использованиеc
, например: с курсором между.
иx
, ct.ABC
Escapeговорят гр висящего текста (до ' т иль следующий.
) с „ABC“).1 Он будет перетаскивать текст в движении в безымянный /
"
регистр, а затем переключаться в режим вставки, так что вы можете набрать что-то, чтобы заменить его, а затем Escapeвернуться в нормальный режим.источник
n
для замены до-гоn
вхождения целевого символа. Это полезно для замены частей меток форматомw_x_y_z
иa-b-c-d
. Используйтеf
вместо того,t
чтобы удалить ограничивающий символ.Есть несколько способов сделать это, но я думаю о простейшем:
TL; DR
fxcw<REPLACEMENT TEXT>
объяснение
fx
подскакивает к х (см.help *f*
)cw
говорит, чтобы изменить слово (см.:h *c*
,:help *w*
и:help cw
для получения дополнительной информации), удалив текст «xy» и войдя в режим вставки, позволяя вам положить все, что вы хотите прямо там.Одним из преимуществ этого подхода является то, что он использует очень часто используемые команды для работы с текстом и навигации. Другое - это то, что «xy» может быть любой длины, и это все равно будет работать.
В
cw
работах , потому что ваш текстовый объект окружены точками (.
), которые выступают в качестве границы к слову.Если ваш курсор уже находится на символе «y» (или любом символе в тексте, который нужно заменить), вы можете использовать
ciw<REPLACEMENT TEXT>
. Это говорит vim изменить слово, в котором вы находитесь, даже если вы не в начале. Смотрите:help text-objects
для получения дополнительной информацииciw
и текстовых объектов в целом.источник
Заменить режим:
является наиболее очевидным решением, если замена имеет ту же длину, что и оригинал, но вы также можете сделать:
или:
источник