Мне нужно сделать кучу замен слов в файле, и я хочу сделать это с помощью команды vi, а не команды EX, такой как :%s///g
. Я знаю, что это типичный способ cw<text><esc>
замены слова в текущей позиции курсора: но есть ли способ сделать это с содержимым безымянного регистра в качестве замещающего текста и без перезаписи регистра?
110
12yl
выдергивал 12 символов и"_cw^r0
заменял слово. Затем я смог использовать эту.
команду, чтобы повторить замену во всем файле.Ответы:
Я думаю, что под "вставкой" вы подразумеваете безымянный регистр (копирование / установка / изменение / удаление / замена), верно? (Так как это тот, который будет перезаписан командой изменения.)
Регистры , как правило , указано, введя
"
затем имя (один символ) регистра, как"ay
затем"ap
дергать в регистрa
, а затем поместить содержимое регистраa
. То же самое и с командой изменения. В этом случае, если вы не хотите, чтобы текст удалить с помощью команды изменения , чтобы пойти куда - нибудь, вы можете использовать черную дыру реестр"_
:"_cw
. Затем, войдя в режим вставки, вы можете нажать ctrl-R, а затем регистр, который вы хотите (возможно"
) поместить в содержимое этого регистра."*
- регистр выбора (вставка средней кнопки)"+
- регистр буфера обмена (возможно, также доступен с помощью ctrl-shift-v через терминал)""
- стандартный (безымянный) регистр vim yank / put / change / delete / replace.Короткий ответ:
"_cw^R"
Изменить: как предлагают другие, вы, конечно, можете использовать другой регистр для восстановления (или чего-то еще), который поместил ваш текст в регистр по умолчанию. Однако вы не всегда думаете об этом в первую очередь, поэтому неплохо сделать одну команду изменения, не сдувая ее. Хотя это не совсем так. Пронумерованные регистры
"0
проходят через"9
:источник
:help registers
.Используя информацию в этом посте, я сформировал это полезное отображение. Я выбрал "cp", потому что он означает "изменить вставку"
nmap <silent> cp "_cw<C-R>"<Esc>
РЕДАКТИРОВАТЬ:
Также я пошел дальше и поддержал любое движение.
Чтобы получить эквивалент приведенной выше команды, это будет
cpw
«изменить вставить слово»источник
nmap <silent> cp :let g:currentRegister=v:register<cr>:set opfunc=ChangePaste<CR>g@ function! ChangePaste(type, ...) silent exe "normal! `[v`]\"_c".getreg(g:currentRegister) endfunction
Для этого вы можете использовать визуальный режим vim. например, скопируйте слово:
ye
а затем замените другое скопированным словом:vep
источник
Если ваш курсор находится на слове, которое вы хотите заменить содержимым безымянного регистра, вы можете использовать
viwp
.v
переключается в визуальный режим,iw
выбирает внутреннее слово иp
помещает содержимое регистра на его место.На практике, когда мне нужно заменить одно слово (имя функции и т. Д.) Другим, я перейду к тому, которое будет использоваться в качестве замены,
yiw
чтобы перенести внутреннее слово в безымянный регистр, а затем перейду к слову I ' м замена, иviwp
на замену. Довольно быстрый способ замены одного слова другим. Если вы искали (/
) слово, которое вы заменяете, чтобы добраться до него, вы можете просто нажать,n
чтобы перейти к следующему вхождению, которое вам нужно заменить. Очевидно, что это не заменит использование:%s/find/replace/g
, но для пары быстрых замен это может быть удобно, особенно если у вас уже есть новое слово в регистре.источник
Если вы используете именованный регистр (например, используйте
"ay
или"ad
и т. Д., Чтобы заполнить свой регистр вставки), вы можете сделать что-то вродеcw<CTRL-R>a<esc>
Что заменит слово содержимым регистра
a
. Насколько я могу судить, вы не можете использовать регистр по умолчанию, потому что, когда выcw
его заполните, он будет заполнен словом, вырезанным этой командой.источник
Вы имеете в виду системный буфер вставки или регистр vi?
Если вы хотите использовать системный буфер вставки, тогда все в порядке
dw"+P
-"
выбирает регистр и"+
является системным буфером вставки.В противном случае скопируйте в регистр не по умолчанию, скажем,
"ay
чтобы скопировать в регистр,a
а затем что-то заменить, сделайтеdw"aP
источник
dw
удалял конечные пробелы после того, что я бы считал «словом», тогда как изменялcw
только слово. По этой причинеdw
мне это не подходит.de
у вас должно работать - он удалит до конца этого слова, аdw
удалит до начала следующего слова.Вы можете использовать
yw
для восстановления слова, затем вы можете изменить слово с помощью выделенного слова,vipw
чтобы восстановить слово и вставить ранее восстановленное слово.источник
Для этого можно использовать регистры:
первый текст замены в регистре
<mark some text>"ay
где
a
имя регистратогда вы можете использовать этот регистр вместо
ve"ap
источник
.
, а это еще одна вещь, которую я хотел сделать. Спасибо хоть. Очень признателен.Или вы можете сделать Shift+ v- p(выделите всю строку и вставьте на ее место)
источник