2012-05-06 2 views
20

В Vim, когда я делаю:Vim заменить все без перемещения курсора

:%s/foo/bar/g 

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

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

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

+6

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

ответ

23

Я просто введите Ctrl + O после замены вернуть прежнее место.

+0

@ lucapette Спасибо за редактирование форматирования. –

+0

@ib. никогда не уставал от ответов более совершенным :) – sehe

+1

Есть ли команда «:» для этого? – Bunder

25

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

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

Совместить подставляя и перемещая курсор в одну команду, выпуск

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

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

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

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

+0

Хорошая попытка. Но не изящно. shoud использует 'Ctrl-o'. – mattn

+0

@mattn: Согласно какому критерию использование 'Ctrl' +' O' является элегантным, а '\' \ '' - нет? Последняя команда не длиннее первой по количеству нажатий клавиш; оба они приводят к тому же движению курсора в этом случае. Почему вы нажимаете '' '' '' '(вместо' Ctrl' + 'O') inelegant? –

+0

Это простой ответ. дольше, чем c-o. И ваша команда обновит jumplist. Если я использую ваш путь, я буду использовать g'. :) – mattn

Смежные вопросы