1

私は、さまざまなコード スタイル (タブとスペースなど) を持つ大規模なコード ベースに取り組んでいます。間隔の問題については、ファイルのパスに基づいていくつかの vim 設定を自動化したいと考えています。理想的には、次のようなことをしたいと思います

if (absolute_path.match(".*/kernel")) then 
   use_tabs()
else if (abslute_path.match(".*/someuserspace_folder/*")) then
   use_spaces()
end

この件についてグーグルで検索した結果、このフランケンシュタインを作成しました。

function! SetIndentSpaces()
        set tabstop=4
        set shiftwidth=4
        set expandtab
        echo "Using spaces for indentation"
endfunction

function! SetIndentTabs()
        set tabstop=8
        set shiftwidth=8
        set noexpandtab
        echo "Using tabs for indentation"
endfunction

autocmd BufEnter,BufRead */kernel/*.\(c|h\) call SetIndentTabs() 
autocmd BufEnter,BufRead */userpace_code/*.\(cpp|c|h\) call SetIndentSpaces()

ただし、トリガーが呼び出されることはありません。私の正規表現が間違っていると推測していますが、それを検証する方法が見つかりません(読んでください:私はvimを吸っています)。

私が間違っていることで誰かが明らかなことを見つけますか?

4

1 に答える 1

1

|with をエスケープするだけでよいと思います\|

autocmd BufEnter,BufRead */kernel/*.\(c\|h\) call SetIndentTabs() 
autocmd BufEnter,BufRead */userpace_code/*.\(cpp\|c\|h\) call SetIndentSpaces()

set softtabstop=8また、インデント関数に追加 (または 4) する必要があります。通常、tabstop、shiftwidth、および softtabstop は同じにする必要があります。


:h file-pattern(およびIngo Karkat)によると、代わりに次の行を使用する必要があります

autocmd BufEnter,BufRead */kernel/*.{c,h} call SetIndentTabs() 
autocmd BufEnter,BufRead */userpace_code/*.{cpp,c,h} call SetIndentSpaces()

ファイルパターンマッチングで使用されるパターン

                            *file-pattern*
The pattern is interpreted like mostly used in file names:
    { } like \( \) in a |pattern|
    ,   inside { }: like \| in a |pattern|
于 2013-08-06T04:13:51.063 に答える