如何在extern中设置vim非自动缩进;";{行

如何在extern中设置vim非自动缩进;";{行,vim,Vim,在我们的项目中,将有 #ifdef __cplusplus extern "C" { #endif int foobar(); // <-- vim auto indent it \ifdef\uuucplusplus 外部“C”{ #恩迪夫 int foobar();//通过“cinoptions”配置的vim中的缩进。但它不支持“extern C”。请参阅 将此另存为~/.vim/indent/cpp.vim我发现extern“C”{/}对我有效。不确定这是否取决于任何特定

在我们的项目中,将有

#ifdef __cplusplus
extern "C" {
#endif
    int foobar();  // <-- vim auto indent it
\ifdef\uuucplusplus
外部“C”{
#恩迪夫

int foobar();//通过“cinoptions”配置的vim中的缩进。但它不支持“extern C”。请参阅

将此另存为~/.vim/indent/cpp.vim

我发现
extern“C”{/}
对我有效。不确定这是否取决于任何特定的
cindent
cino
设置。

我认为vim中的缩进是基于正则表达式的,但不是语法,vim没有那么智能。如果用它工作,我在vim 8.1上就不工作了
function! IndentNamespace()
    let l:cline_num = line('.')
    let l:pline_num = prevnonblank(l:cline_num - 1)
    let l:pline = getline(l:pline_num)
    let l:retv = cindent('.')
    while l:pline =~# '\(^\s*{\s*\|^\s*//\|^\s*/\*\|\*/\s*$\)'
        let l:pline_num = prevnonblank(l:pline_num - 1)
        let l:pline = getline(l:pline_num)
    endwhile
    if l:pline =~# '^\s*extern "C".*'
        let l:retv = 0
    endif
    return l:retv
endfunction

setlocal indentexpr=IndentNamespace()