Vimのタブとスペース

Vimのタブとスペース

私はvimのインデントを次のように動作させたいです。

▷   ▷   int function(int x,▒int y, int z) {

Enter キーを押すと、次の結果が表示されます。

▷   ▷   int function(int x,
▷   ▷   _____________int y, int z) {

ここで、「▷」はタブ、「_」はスペースです。

つまり、タブを使用したいのですが、インデント レベルを追加しない場所で改行がある場合は、インデントされていない行を空白に揃える必要があります。

これにより、インデントにタブを使用できますが、インデント以外のレベルで書式設定が保持されるため、タブのサイズが変更されても書式設定が保持されます。

今のところ、Vim でこれを実現する方法は見つかっていません。Preserveindent と copyindent は私が探しているものではありません。これらは expandtab を尊重しますが、私は expandtab をインデントにのみ使用し、スペースは配置にのみ使用したいと考えています。

答え1

によるVim ウィキスマートタブプラグインはこれを実行します。私は自分で試していません。

答え2

現在、これは vim では実行できないようです。タブかスペースのどちらかしか使用できません。タブとスペースのどちらを使用するかは言語によって大きく異なるため、驚くことではありません。次の点を考慮してください。Python では、次のコードをどのように処理しますか。

x = fn(abc, 'def', {
                       ghi: jkl,
                       mno: pqr,
                   })

いつかタブに戻るべきでしょうか? それは理想的ですが、非常に状況依存的であり、実際には言語間では機能しません。Haskell での別の楽しい例:

data Something = Something { flag1 :: Bool
                           , flag2 :: Bool }
               deriving (Eq, Ord, Show)

頑張ってください。

残念ながら、この種の機能には言語固有の拡張機能が必要であるという結論に達しました。ただし、これを行う良い方法をご存知でしたら、ぜひ教えてください。

関連情報