Vimのタブサイズ自動インデントが適用されると

Vimのタブサイズ自動インデントが適用されると

タブのサイズを 4 から 2 に変更することにしました。理由はないからです。コードを見たい人は誰でも自分の設定をそのまま使用できます。

しかし、疑問が。

Tab キーを押すと 2 が挿入されますが、Vim の自動インデントでは依然として 4 が挿入されます。これを 2 にするには何を変更すればよいでしょうか?

関係のない質問ですが、C や類似の言語にはどのインデント スタイルが最適ですか? 私は 1TBS を使用していますが、選択肢がたくさんあります。よりプロフェッショナルなものや好まれるものはありますか?

答え1

shiftwidth' ' を ' ' と同じ値に設定してみてくださいtabstop。さらに良い方法として、Vim の最新バージョンを使用している場合は、' shiftwidth' を 0 に設定すると、' ' に設定されている値がデフォルトになりますtabstop

答え2

Vimのインデントオプション

Vim はインデントのサイズに関して主に 3 つの設定を使用します。

  • tabstop, ts: Vimは開いているファイル内でタブに遭遇すると、タブを{ts}個のスペースとして表示します(タブストップヘルプ、または:help tabstopVim で入力します)。
  • softtabstop, sts: ファイルを編集中にタブキーを押すと、Vimはこの設定を使用して挿入されるタブの幅を定義します(softtabstop ヘルプ、または:help softtabstopVim で入力します)。
  • shiftwidth, sw: Vim がインデントするときに使用するスペースの数。自動インデント機能または通常の>>,<<コマンドを使用します。Heptite が気づいたように、これはこの特定のケースで探していたものです。そして最近のバージョンの Vim では、このオプションを定義しなくても、shiftwidthで定義された値を取ることができますtabstop。非常に便利です (シフト幅ヘルプ)。

たとえば、次の設定を使用する場合:

set sts=4
set ts=2
set sw=8

これらは次のような動作を生み出します。

  1. ファイルにタブを挿入すると、4 スペース幅のインデントが生成されます。
  2. が 2 に設定されているためtabstop、これは実際には 2 つの表に相当します。これは簡単に確認できます。表を表示するには、listおよびlistcharsオプションを使用するだけです。
  3. を使用して行をインデントすると>>、インデントの幅は 8 スペースになります (したがって、tabstop値に基づいて 4 つのタブに相当し、上記と同じです)。

ここに画像の説明を入力してください

Vim のインデントの推奨事項 (Vim のドキュメントより)

ヘルプからtabstop:help tabstopVimの場合):

There are four main ways to use tabs in Vim:
  1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
    (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
    will use a mix of tabs and spaces, but typing <Tab> and <BS> will
    behave like a tab appears every 4 (or 3) characters.
  2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
    'expandtab'.  This way you will always insert spaces.  The
    formatting will never be messed up when 'tabstop' is changed.
  3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
    |modeline| to set these values when editing the file again.  Only
    works when using Vim to edit the file.
  4. Always set 'tabstop' and 'shiftwidth' to the same value, and
    'noexpandtab'.  This should then work (for initial indents only)
    for any tabstop setting that people use.  It might be nice to have
    tabs after the first non-blank inserted as spaces if you do this
    though.  Otherwise aligned comments will be wrong when 'tabstop' is
    changed.

私は個人的に、2 スペース幅の表を使用する 2 番目のソリューションを主に使用します。

set ts=2
set sts=2
set et     "expand tabs to spaces

答え3

によるとhttp://vim.wikia.com/wiki/ソースコードのインデント'filetype plugin indent on' コマンドを実行すると、プログラムは Vim インストールの indent サブディレクトリにあるファイルタイプ固有のインデント スクリプトを使用します。このページには、C および C++ ファイルでは 'cindent' が自動的に使用されるため、このコマンドを手動で使用する必要はないとも記載されています。

私は Vim にあまり詳しくなく、たまに基本的なテキスト編集にしか使用しませんが、そのコードに Vim のデフォルトの自動インデント サイズを使用するには、'cindent' コマンドを手動で発行してみます。それが機能しない場合は、'filetype plugin indent on' を試して、スクリプトを自分で編集し、必要なインデントを取得してください。

関連情報