В vim (например, 7.3), как я могу использовать / изменить параметры cindent
или smartindent
, или как-то иначе увеличить мой .vimrc
, чтобы автоматически вставлять фигурные скобки в открытых скобках для выравнивания с первыми »слово "(определено позже), непосредственно предшествующее открытию (
?
Параметр fN
выглядит многообещающим, но, по-видимому, переопределяется параметром (N
в открытых скобках.С :help cinoptions-values
:
fN Place the first opening brace of a function or other block in
column N. This applies only for an opening brace that is not
inside other braces and is at the start of the line. What comes
after the brace is put relative to this brace. (default 0).
cino= cino=f.5s cino=f1s
func() func() func()
{ { {
int foo; int foo; int foo;
Текущее поведение:
func (// no closing )
// (N behavior, here N=0
{ // (N behavior overrides fN ?
int foo; // >N behavior, here N=2
, пока я желаю:
func (// no closing )
// (N behavior as before
{ // desired behavior
int foo; // >N behavior still works
Что я спрашиваюfor это отличается от fN
, потому что fN
выравнивается с преобладающим отступом, и я хочу выровнять к любому C ++ nested-name-specifier
, который непосредственно предшествует открытию (
, например
code; f::g<T> ( instead of code; f::g<T> (
{ {
Если нет nested-name-specifier
, я бы хотел, чтобы оно совпадало с (
.Возможно, сопоставление nested-name-specifier
слишком сложно, или, может быть, есть другая часть грамматики, которая больше подходит для этого сценария.В любом случае, для моего типичного случая использования, я думаю, я был бы удовлетворен, если бы {
совпал с первым непробельным символом максимальной последовательности символов слева от самого внутреннего незамкнутого (
включительно, который не содержит никакихточки с запятой или левые фигурные скобки }
.
Кстати, я пришел к этому, пытаясь автоматически добавлять различные конструкции std::for_each(b,e,[]{});
в vim7.3.Спасибо за вашу помощь!