Довольно часто мне нужно выполнить подстановку, в которой совпадения будут разбросаны по всему большому файлу с нетривиальными выражениями поиска и замены.
Например, скажем, у меня есть некоторые вызовы функций, такие как okFunction(arg1, arg2 arg3)
. Конечно, аргументы будут отличаться при каждом вызове функции. Теперь скажите, что я обнаружил лучшую функцию, которая не нужна arg2
. Я могу легко настроить весь файл с
:%s/\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))/betterFunction(\1, \3)/gc
Хотя концептуально просто, я не уверен, что правильно понял синтаксис в этом довольно длинном паттерне. Здесь c
действительно помогает флаг, но проблема в том, что при запросе подтверждения vim не будет показывать, на что будет заменен матч. Я имею в виду, он покажет выражение замены, но не оцененный результат. Если я подтвердлю замену с помощью y
, vim немедленно перейдет к следующему матчу, и я не буду в состоянии видеть, сделал ли я какие-либо ошибки.
Я обнаружил плагин vim-over, который частично решает проблему, но только в том случае, если при вводе команды на экране отображаются все совпадения. Как только вы нажмете Enter, поведение будет точно таким же, как я описал выше, и я не получу предварительный просмотр.
Итак, есть ли способ получить vim для оценки выражения замены при запросе подтверждения для команд замены?
%
, проверьте, что результат - то, что я ожидал, и затем используйте замену с %
(это всего лишь несколько нажатий клавиш:) :<up><c-b>%
. Очевидно, что предварительный просмотр будет гораздо более эффективным, чем это. Хотя патч недоступен, может быть, можно обернуть подстановку в функции vimscript с помощью этой опции, но это звучит как большая работа ...