2011-08-05 13 views
7

私は一部のモジュールがインデント用にタブを使用し、他のモジュールはスペースを使用するコードで作業することがあります。 Np ++のような多くのテキストエディタには、前の行(またはコードブロック)がスペースやタブを使用する場合にインデント用のスペースを使用する、ある種の適応型タブ機能があります。vimのアダプティブタブ移動

私はこのようなvimで何も見たことがありません。このようなプラグインや設定はありますか?

答えて

4

は、私は以下の例が示すように私の的環境をセットアップするperfer。タブをスペースで置き換える一般的なルールを作成し、そのルールをオーバーライドする必要があるときはaugroupを使用します。 MakefileはTABSが必要な場合の良い例で、cppファイルはスペースが必要な場合です。

" A tab produces a 4-space indentation 
:set softtabstop=4 
:set shiftwidth=4 
:set expandtab 
" replace tabs with spaces unless noted otherwise 

" <snip> 

augroup CPPprog 
    au! 
    "----------------------------------- 
    " GENERAL SETTINGS 
    "----------------------------------- 
    au BufRead,BufNewFile,BufEnter    *.cpp,*.c,*.h,*.hpp set nolisp 
    au BufRead,BufNewFile,BufEnter    *.cpp,*.c,*.h,*.hpp set filetype=cpp 
    au FileType        *      set nocindent smartindent 
    au FileType        *.c,*.cpp    set cindent 
    au BufRead,BufNewFile,BufEnter    *.cpp     let g:qt_syntax=1 
    " turn on qt syntax highlighting (a plugin) 
    au BufNewFile,BufRead,BufEnter    *.c,*.h,*.cpp,*.hpp let c_space_errors=1 
    " trailing white space and spaces before a <Tab> 

    " <snip> 

augroup END 

" <snip> 

augroup filetype 
    au! BufRead,BufNewFile,BufEnter *Makefile*,*makefile*,*.mk set filetype=make 
augroup END 
" In Makefiles, don't expand tabs to spaces, since we need the actual tabs 
autocmd FileType make set noexpandtab 
0

@zkhrと同様に、smartindentまたはautoindentを使用できます。 cindentを使用することもできます。これは、C/C++ファイルの編集時にvimが使用するデフォルトのインデントです。

「smartindent」は、場合によっては1つの余分なレベルのインデントを自動的に挿入し、Cのようなファイルで動作します。

「cindent」はよりカスタマイズ可能ですが、構文に関してはより厳密です。

'smartindent'と 'cindent'は、ファイルタイプに基づくインデントを妨げる可能性があります。また、それと関連して使用しないでください。あなたが特定のファイルを編集していると、あなたは、そのファイル内の自動インデントを防ぎたい場合は

、次のように入力します

:setlocal noautoindent 
:setlocal nocindent 
:setlocal nosmartindent 
:setlocal indentexpr= 
0

Vimには、あなたが望むものはまったくありません。しかし、あなたはcopyindentをチェックしたいかもしれません。 :h copyindentを参照してください。それはあなたが望むものではなく、 "適応タブ"を与えます。新しい行の先頭のタブ/スペースは、前の行の先頭のタブ/スペースをコピーします。ただし、インデントを増やすと、タブまたはスペースの追加の決定はexpandtabの設定に依存します。 (あなたはまた、あなたのシナリオに設定する必要がありpreserveindentオプションのヘルプを見てみたいことがあり、私は思います。)

またautoindentまたはsmartindentのいずれかを介して、自動タブ移動の設定を持っていることになるでしょう。わからない場合は、copyindentを正しく設定するためにsmartindentまたはautoindentをリセットする必要があります(たとえば、:set nosmartindent:set smartindentなど)。

1

このプラグインはあなたの目標を達成しているようです。 IndentConsistencyCop

適切なオートコマンドをロードする無料のプラグインをインストールする必要があります。 IndentConsistencyCopAutoCmds