Я должен сделать набор замен слова в файле и хотеть сделать это с командой vi, не командой EX такой как :%s///g
. Я знаю, что это - типичный способ, которым каждый заменяет слово в текущей позиции курсора: cw<text><esc>
но есть ли способ сделать это с содержанием регистра без имени как текст замены и не перезаписывая регистр?
Я думаю, что под словом «вставить» вы подразумеваете безымянный регистр (копирование / установка / изменение / удаление / замена), верно? (Так как это тот, который будет перезаписан командой изменения.)
Регистры обычно указываются путем ввода "
, затем имени (одного символа) регистра, например " ay
, затем "ap
, чтобы скопировать в регистр a
, затем поместить содержимое регистра a
. То же самое касается команды изменения. В этом случае, если вы Чтобы текст, который вы удаляете с помощью команды изменения, никуда не перемещался, вы можете использовать регистр черной дыры "_
: " _ cw
.Затем, войдя в режим вставки, вы можете нажать ctrl-R, а затем регистр, который вы хотите (вероятно, "
), чтобы вставить содержимое этого регистра.
" *
- регистр выбора (средний -button paste) "+
- регистр буфера обмена (возможно, также доступен с помощью ctrl-shift-v через терминал) " "
- vim по умолчанию (безымянный) yank / put / change / delete / replace register. Краткий ответ: "_ cw ^ R"
Редактировать: как предлагают другие, вы, конечно, можете использовать другой регистр для yank (или чего-то еще), который поместил ваш текст в значение по умолчанию Регистр. Вы не всегда думаете об этом в первую очередь, так что неплохо сделать одну команду изменения, не сдувая ее. Хотя это не совсем сносно. Есть пронумерованные регистры с "0
по "9
:
Vim заполняет эти регистры текстом из команд восстановления и удаления.
Пронумерованный регистр 0 содержит текст из самой последней команды восстановления, если в команде не указан другой регистр с ["x].
Пронумерованный регистр 1 содержит текст, удаленный самой последней командой удаления или изменения, если в команде не указан другой регистр или текст меньше одной строки (тогда используется малый регистр удаления). Исключение сделано для оператора удаления с этими командами перемещения:
%
,(
,)
,`
,/
,?
,n
,N
,{
и}
. В этом случае всегда используется регистр "1" (он совместим с Vi).Регистр "-" также используется, если удаление выполняется внутри строки.При каждом последующем удалении или изменении Vim сдвигает предыдущее содержимое регистра 1 в регистр 2, 2 в 3 и так далее, теряя предыдущее { {1}} содержимое регистра 9.
Если вы используете именованный регистр (т. Е. Используйте "ay
или " ad
] и т. д., чтобы заполнить регистр вставки), вы можете сделать что-то вроде
cw
, который заменит слово содержимым регистра a
. Насколько я могу судить, вы не можете использовать регистр по умолчанию, потому что, когда вы cw
, он будет заполнен словом, вырезанным этой командой.
Вы имеете в виду системный буфер вставки или регистр vi?
Если вы хотите использовать системный буфер вставки, то все в порядке и можете сделать dw "+ P
- "
выбирает регистр, а "+
является системным буфером вставки.
В противном случае скопируйте в регистр не по умолчанию, скажем "ay
скопировать в регистр a
, а затем что-то заменить, сделайте dw" aP
Для этого вы можете использовать регистры:
текст для замены первого места в регистре
<отметить текст> «ay
где a
- имя регистра
тогда вы можете использовать этот регистр вместо
ve "ap
Для этого можно использовать визуальный режим vim. например скопируйте слово: ye
, а затем перезапишите другое слово скопированным: vep