Слово Замены VIM с содержанием буфера?

Я должен сделать набор замен слова в файле и хотеть сделать это с командой vi, не командой EX такой как :%s///g. Я знаю, что это - типичный способ, которым каждый заменяет слово в текущей позиции курсора: cw<text><esc> но есть ли способ сделать это с содержанием регистра без имени как текст замены и не перезаписывая регистр?

110
задан PeeHaa 29 January 2012 в 03:05
поделиться

5 ответов

Я думаю, что под словом «вставить» вы подразумеваете безымянный регистр (копирование / установка / изменение / удаление / замена), верно? (Так как это тот, который будет перезаписан командой изменения.)

Регистры обычно указываются путем ввода ", затем имени (одного символа) регистра, например " 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.

125
ответ дан 24 November 2019 в 03:13
поделиться

Если вы используете именованный регистр (т. Е. Используйте "ay или " ad ] и т. д., чтобы заполнить регистр вставки), вы можете сделать что-то вроде

cw a

, который заменит слово содержимым регистра a . Насколько я могу судить, вы не можете использовать регистр по умолчанию, потому что, когда вы cw , он будет заполнен словом, вырезанным этой командой.

5
ответ дан 24 November 2019 в 03:13
поделиться

Вы имеете в виду системный буфер вставки или регистр vi?

Если вы хотите использовать системный буфер вставки, то все в порядке и можете сделать dw "+ P - " выбирает регистр, а "+ является системным буфером вставки.

В противном случае скопируйте в регистр не по умолчанию, скажем "ay скопировать в регистр a , а затем что-то заменить, сделайте dw" aP

2
ответ дан 24 November 2019 в 03:13
поделиться

Для этого вы можете использовать регистры:

текст для замены первого места в регистре <отметить текст> «ay

где a - имя регистра

тогда вы можете использовать этот регистр вместо

ve "ap

0
ответ дан 24 November 2019 в 03:13
поделиться

Для этого можно использовать визуальный режим vim. например скопируйте слово: ye , а затем перезапишите другое слово скопированным: vep

27
ответ дан 24 November 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: