VIM: Как сохранить регистр для поиска и замены
Возможный дубликат:
Замену замены в Vim
Можно ли выполнить поиск и заменить в vim, который сохраняет случай поиска? Это была полезная функция в intelliJ, которую я пропускаю.
Например, что-то вроде:
:s/[uU]ser/[pP]erson/ (obviously, this doesn't work)
Таким образом:
user->person
User->Person
Другой пример с несколькими символами для сохранения:
:s/[mM]y[uU]ser/[tT]his[pP]erson/g
Таким образом:
myuser->thisperson
myUser->thisPerson
MyUser->ThisPerson
Ответы
Ответ 1
Существует несколько подходов, которые можно предпринять. Если вы хотите придерживаться базовой функциональности Vim, вы можете сделать что-то вроде
:%s/[uU]ser/\=submatch(0) ==# 'user' ? 'person' : 'Person'/g
Если вы создали Vim с привязками к Perl, вы можете использовать :perldo
. В зависимости от длины совпадающих/замещающих слов и того места, где вы хотите сохранить, это может работать или не работать.
:perldo s/(user)/"\L$1" ^ $1 ^ 'person'/ieg
Или вы можете использовать один из различные scripts, которые реализуют такие функции.
Ответ 2
Повторить ответ после некоторого раздумья; -)
:[email protected]\([Uu]\)[email protected]\=((submatch(1)=="U")?"P":"p")."erson"@gc
Конечно, его можно улучшить, но идея остается.
Ответ 3
Там есть плагин для vim: keepcase.vim