Вопрос по – Vim заменить все без перемещения курсора

22

В Vim, когда я делаю:

:%s/foo/bar/g

Он заменит все вхождения «foo» с "баром" во всем документе. Когда он завершается, курсор перемещается в последнюю позицию, где «foo»; был заменен на "бар".

Как ты бегаешь:%s/foo/bar/g без курсора, покидающего исходную позицию перед выдачей этой команды?

Есть ли какая-нибудь опция, которую я могу установить в.vimrc файл?

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

Ваш Ответ

2   ответа
29

Когда:substitute команда выполняется, прежде чем фактические замены сделаны, Положение курсора сохраняется в списке переходов. Для того, чтобы вернуться к положение перед последним прыжком, можно использовать`` или же'' Нормальный режим команды. В то время как первый прыгает точно в сохраненную позицию, последний перемещает курсор на первый непустой символ в строке, где это позиция находится.

Итак, чтобы быстро вернуть курсор в исходное положение, наберите `` после завершения команды подстановки.

Чтобы объединить замену и перемещение курсора в одну команду, введите

:%s/pat/str/g|norm!``

или, если этого достаточно, чтобы перейти не к точному положению, а только к его линии,

:%s/pat/str/g|''

Как показано выше,'' может быть использован в предпочтенииnorm!'' во-вторых команда из-за синтаксиса диапазона команд Ex (см.:help :range).

Хорошая попытка. Но не элегантно. Шоуд использоватьCtrl-o.
@mattn: Простите?`` длиннее чемCtrl+O?! Также,Ctrl+O обновляет список переходов тоже! (Увидеть:help jumplist или просто попробуй сам.) Так`` а такжеCtrl+O находятся рядом друг с другом как в отношении изменения списка переходов, так и количества нажатых клавиш. По этим критериям одна команда не превосходит другую. Вы все еще считаете один из них более элегантным? Если да, то по какой причине?
Это простой ответ. дольше чем с-о. И ваша команда обновляет список переходов. Если я буду использовать ваш способ, я буду использовать g`. :)
@ib.and @mattn Я думаю, что это в основном дело вкуса. Для меня `` козыри & lt; C-o & gt; (легче набирать, выражает использование регистра и логически соединяется с:'', :g//copy '' и прочее. Я не знаю, кто отрицал этот ответ, но я, конечно, думаю, что несогласие со вкусом не должно быть причиной для отрицательного ответа.
@mattn: По какому критерию используетсяCtrl+O элегантно, в то время как`` не является? Последняя команда не длиннее первой с точки зрения нажатия клавиш; оба они приводят к одному и тому же движению курсора в этом случае. Почему вы находите насущным`` (вместоCtrl+O) неэлегантный?
23

Ctrl+O после замены, чтобы вернуться на прежнее место.

Есть ли & quot;: & quot; команда для этого?
@lucapette Спасибо за редактирование форматирования.
@ib. никогда не уставал делать ответы более совершенными :)

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