У меня есть некоторый текст в моем буфере вставки, например, я сделал yw
(yank word) и теперь у меня есть 'foo' в моем буфере.
Теперь я перехожу к слову «bar» и хочу заменить его на мой буфер вставки.
Чтобы заменить текст вручную, я мог бы сделать, cw
а затем ввести новое слово.
Как я могу «изменить слово», но использовать содержимое моего буфера вставки вместо того, чтобы вручную вводить слово замены?
Лучший вариант, который у меня есть сейчас, - это перейти к началу слова, которое я хочу заменить, и выполнить dw
(удалить слово), затем перейти в другое место и выполнить yw
( восстановить слово), затем вернуться в область замены и выполнить p
(вставить), что немного неуклюже, особенно если они не на одном экране.
vep
.ve"0p
будет работать, чтобы позволить вам повторить ваши измененияmap <C-j> ciw<C-r>0<ESC>
чтобы не имело значения, откуда в слове вы нажимаете^j
.:help insert
тогда ищите CTRL-R/CTRL-R
. Для тогоve"0p
, как работает, посмотрите на:help registers
yw
чтобы восстановить ваше слово, затем переместите курсор к слову, которое вы хотите заменить, и используйте его"_dw
для удаления, отправив текст в нулевой регистр (чтобы он не перезаписывал содержимое"
регистра, куда по умолчанию выводится / вырезанный текст ), а затем просто вставьтеp
.Вы можете использовать следующее отображение, чтобы сделать вещи немного проще:
... так что в обычном режиме вы можете использовать,
\dw
чтобы удалить слово, не влияя на"
регистр.источник
Чтобы сделать это способом VIM, вы намеренно используете янки, удаляете и другие регистры.
Регистрация
"0
- это регистрация янки. Все, что вы дергаете, будет помещено сюда, но удаляется, никогда не трогайте регистр"0
.Итак, в вашем примере вы только что выдернули слово. Чтобы заменить слово тем, что вы только что вытащили, вы можете использовать удаления, никогда не затрагивающие регистр янки. Итак, перейдите к целевому слову, удалите его с помощью
dw
, затем вставьте из своего янк-регистра с помощью"0p
или, еще лучше,cw
затем^R0
(что повторяется).Рядом с регистром янки находится регистр небольших удалений
"-
. Любое небольшое удаление или изменение удаления помещено здесь, но янки никогда не трогают"-
. Удаление считается малым, если оно меньше полной строки.Регистры
"1
-"9
это регистры истории удаления. С"1
последним большим удалением или удалением изменений, а также"9
самым старым крупным удалением или удалением изменений. Только удаления, которые не малы, т.е. удаляет из одной строки или более, получить толкнули на"1
-"9
.Для любой операции, которая изменяет регистр, копия также всегда помещается в регистр по умолчанию, то есть безымянный регистр
""
. Этот регистр используется, когда вы явно не называете регистр.Регистр
"_
- это регистр черной дыры, и он всегда пуст. Если вы удалите его, ничего в любом регистре не изменится вообще, даже""
регистр по умолчанию или сам регистр черной дыры. Удаленный текст полностью исчез, кроме вашей истории отмены. Срывание или вставка из регистра черной дыры практически ничего не делает.Регистр черной дыры
"_
позволяет вам выполнять сначала одно небольшое удаление, затем ряд других удалений,"_
не изменяя регистр небольших удалений"-
, а затем вставлять первое небольшое удаление.Другие регистры являются последним добавленным регистр
".
, регистры имен файлов"%
и"#
, регистр команд":
, регистр поиска"/
и выражение регистра"=
.Вы можете получить список всех этих регистров и их содержимое с помощью команды
:register
. Эта команда очень полезна для экспериментов и изучения того, что и где заканчивается.источник
Мне нужно это так часто, я написал плагин для упрощения и обеспечения максимальной скорости: ReplaceWithRegister .
Этот плагин предлагает
gr
команду « два в одном», которая заменяет текст, охватываемый объектом {motion} / text, всей строкой (ами) или текущим выделением, содержимым регистра; старый текст удаляется в регистр черной дыры, т.е. Он прозрачно обрабатывает многие угловые случаи и позволяет быстро повторить с помощью стандартной.
команды. Если вам это не нравится, на его странице есть ссылки на альтернативы.источник
Чтобы повторить вставку, используйте команду изменения.
cw ^R0ESC (^ R = Control + R; 0 для регистра 0)
заменит слово на содержание из рег. 0 и давайте повторим это с.
Это отлично подходит для cgn(VIM 7.4) для замены шаблонов поиска:
источник
Так как он еще не включен, вы обычно заменяете строки на
:%s/.../.../
и также можете делать это со словом под курсором.:s/find/
<ctrl-r>
и выбираете курсором слово, которым хотите заменить его.<ctrl-w>
(маленькое «слово») или<ctrl-a>
(большое «слово), чтобы вставить слово под курсором в командную строкуСмотрите ссылку о том, как использовать курсор курсора в командной строке .
источник
Я обычно использую это: ywчтобы восстановить
foo
, затем удалитьbar
с помощью dw, и, в качестве последнего шага, положитьfoo
из регистра,0
который содержит восстановленный текст, используя "0p. Повторите ввод с точки ( .) по мере необходимости.Также вместо ywи dwвы можете использовать yiwи diw(обратите внимание на дополнительное i- это значит внутри ). При этом вы можете восстановить или удалить слово из любого места внутри него, а не только в начале слова.
источник
Я использую этот плагин для расширения области выбора: https://github.com/terryma/vim-expand-region
Таким образом, моя комбинация для изменения слова будет:
vvp
в любом месте слова.У меня также есть хак для сохранения безымянного содержимого регистра после вставки, чтобы я мог повторить это.
(мой буфер обмена - авто-выбор)
источник
Я использую приведенное ниже сопоставление клавиш, чтобы заменить текущее слово скопированным словом.
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>
yiwскопировать слово Перейдите к слову. ,rrзаменить слово.
Ключ лидера - это карта ,.
источник
,rw
было бы больше смысла, и на QWERTY это, вероятно, smidgen проще и быстрее, чтобы пояс. Я выбрал DVORAK,,rc
который, хотя он и не имеет особого смысла, легче и быстрее, чем все они. На ДВОРАК,,rw
это шоу ужасов;)Во-первых, перейдите к началу слова, которое вы хотите нажать. Если вы находитесь в середине слова, просто
b
вернитесь к началу. Затем сделайте,ye
чтобы восстановить все слово без пробелов (отy
ank доe
nd). Наконец, перейдите к слову, которое вы хотите заменить - возможно, выполнивw
несколько раз, - и выполните команду a,vep
чтобы войти вv
режим обычного выбора, выбрать доe
слова иp
оценить содержимое, которое вы копали последним.(Если кто-то хочет знать, почему я просто не прокомментировал принятый ответ, для небольшой модификации использования,
ye
а неyw
потому, что моя репутация в этом стеке все еще слишком низкая.)источник
yw
чтобы дергать мир, иди в мир, который ты хочешь изменить.v
чтобы выбрать мир,ve
или вvw
зависимости от вашей ситуации.p
чтобы наклеить мир, который вы скопировали, чтобы заменить выбранный блокисточник
Добавление к другим лучшим ответам. Слишком очевидно, но вы можете просто вставить перед удалением. 'yw', затем введите слово, которое вы хотите заменить, 'pldw' (вставьте, переместите один символ вправо, удалите слово.
источник