46

私はすべてのコーディングをvimで行っており、非常に満足しています(したがって、「別のエディターを使用してください」という応答はしないでください)が、smartindent機能が#で始まるコメントをインデントしたくないという点で、常にイライラしています。例:欲しい

  # Do something
  $x = $x + 1;
  if ($y) {
    # Do something else
    $y = $y + $z;
  }

vimの優先の代わりに

# Do something
  $x = $x + 1;
  if ($y) {
# Do something else
    $y = $y + $z;
  }

コメントが行の先頭に送信されないようにすることができた唯一の方法は、 # を押す前に行の文字を挿入および削除するか (毎回忘れないようにしなければならない面倒です)、または smartindent を完全にオフにすることです。 (中かっこを開閉すると、自動インデントの増減が失われます)。

コメントを行の先頭に送信するのではなく、コメントのインデントを維持するようにvimを設定するにはどうすればよいですか?

4

4 に答える 4

47

Perl でコーディングしているようです。以下が .vimrc に設定されていることを確認してください:

filetype plugin indent on
syntax enable

これらは、バッファーを開くときにファイルタイプを設定し、インデントと構文の強調表示を構成するように Vim に指示します。Vim に含まれている Perl シンタックス ファイル (およびその他の Perl 固有のカスタマイズ) が自動的に設定されるため、smartindent を明示的に設定する必要はありません。


注: set smartindentand/or set autoindentinを使用すると~/.vimrc、ソリューションが機能しなくなる可能性があります。問題がある場合は、それらを探してください。

于 2008-10-10T13:27:40.180 に答える
18

"smartindent" インデント オプションを使用している場合、問題の解決策は ":help smartindent" VIM ドキュメントで説明されています。

    When typing '#' as the first character in a new line, the indent for
    that line is removed, the '#' is put in the first column.  The indent
    is restored for the next line.  If you don't want this, use this
    mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
    When using the ">>" command, lines starting with '#' are not shifted
    right.

「smartindent」を使用しており、説明されている修正が機能することを確認できます。「#」のキーストロークを「X」の入力に置き換え、バックスペースを押してからもう一度「#」を入力することで、VIM を騙します。これを自分で手動で試してみると、自動アウトデントがトリガーされないことがわかります。

于 2010-02-24T04:44:34.987 に答える
10

この問題は、_vimrc ファイルに以下を追加することで解決できます。

set cindent
set cinkeys=0{,0},!^F,o,O,e " default is: 0{,0},0),:,0#,!^F,o,O,e

詳細...

于 2008-10-10T13:20:15.950 に答える
7

「smartindent」は C 用に設計されていると思うので、「#」はコメントではなくプリプロセッサ ディレクティブの開始と見なされます。スペースを入力してからバックスペースを入力し、次に「#」を入力した場合を除いて、解決策はわかりません。

于 2008-10-10T13:20:09.257 に答える