Подтвердить что ты не робот

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

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

:%s/foo/bar/g

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

или, если достаточно перепрыгнуть не к точной позиции, а только к ее строке,

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

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