Vim Case-Agnostic Regex

Я несколько раз сталкивался с следующим случаем, и мне было интересно, есть ли у него быстрый способ справиться с этим в Vim.

У меня будет исходный файл, например:

#ifndef _FOO_H_
#define _FOO_H_

class Foo {
    Foo(int foo);
};
#endif

И я хотел бы преобразовать его в следующее:

#ifndef _BAR_H_
#define _BAR_H_

class Bar {
    Bar(int bar);
};
#endif

Итак, я хочу все foo → bar, но сохранить заглавную копию оригинала. Прямо сейчас, я делал это с 3 или 4 различными регулярными выражениями, но, похоже, должен быть лучший способ. Любые идеи?

Ответ 1

Этот script выполнит поиск/замену, сохраняющий регистр.

Скопируйте script в каталог плагина (~/.vim/plugin), затем выполните

:set ic
:%s/foo/\=KeepCaseSameLen(submatch(0), 'bar')/g

Ответ 2

Тим Папа Плагин Vim Abolish может сделать это и целую тонну больше. :%Subvert/string/new string/g сохранит регистр, капитализацию и т.д., а плагин также поддерживает варианты слов, используя синтаксис {var1,var2}. Очень полезно.