web-dev-qa-db-ja.com

vimですべての自動インデントを無効にする

TeXでは、vimは通常私のインデントを台無しにします。主に、表示された方程式を使用しているときは、次のようになります。

\[
    x=\frac{y}{z}  
\]

ここで、xの前の空白は1つのタブです。

方程式の入力を開始するときは、最初に\[マークと\]マークを入力してから、それらの間に戻り、タブを入力してから、方程式の残りの部分を入力します。

中括弧を組み込んだもの(たとえば、\frac{})を使用する必要があるまで、Vimは何も悪いことをしません。終了}を入力すると、vimは行全体のインデントを自動的に左にシフトし、入力したタブを元に戻します。

これは非常に厄介ですが、どうすれば無効にできますか?

私の.vimrcに含まれるもの:

"indentation
set smartindent
set autoindent
set tabstop=5
set shiftwidth=5
filetype indent on
19
romeovs

あなたの質問には少し用語が混在しているようです。 vimでは、autoindentという用語は、前の行のインデントレベルに続く特別な種類のインデントを指します(これは非常に便利な場合があります)。削除するにはset noautoindent手動で、または_vimrcに書き込みます。

他に2つの自動インデント、cindentsmartindentがあります。同様に、それらを無効にしたい場合は、set nocindentおよびset nosmartindent

ヘルプを見ると(help autoindent、...)それらはすべて非常にうまく説明されています。どちらを好むか(または好まないか)は、ほとんどの場合、プログラミングスタイルと習慣によって決まります。だから、それらを試してみて、あなたが最も好きなものを見てください。

残念ながら、私はLaTeXをあまり使用しなくなったため、内部のファイルタイプのインデント規則に精通していません。

18
Rook

Javascriptを使ってインデントの問題を解決するのに数時間を費やしましたが、結論はvimrcからfiletype indent onを削除しないでください!

この設定は、複数のファイルタイプに最適なスマートインデントを提供します。これで悪い結果が得られる場合は、構成の問題が発生している可能性があります。

ファイル固有のインデント設定

ですから、あなたが私のようなら、おそらくvimrcにfiletype indent onがあり、それが何をしているのかわからなかったでしょう。

この設定はすべて、ファイルタイプ固有のインデントルールを持つファイルを探すようにvimに指示するだけです。見た目はいくつかありますが、興味のある場所はおそらく2つだけです。

  1. $VIMRUNTIME/indent/
  2. ~/.vimrc/after/indent/

そもそも、vimに付属しているデフォルトのインデントルールがあります。 filetype indent onを新しいvimインストールに設定する場合、これがすべてのスマートインデントの元になります。たとえば、index.htmlというファイルを開くと、$VIMRUNTIME/indent/html.vimからルールが取得されます。

私の経験では、これらのデフォルトのルールはかなり良いですが、他の設定によって台無しになる可能性があります。

2番目の場所(afterディレクトリ)では、最初の場所の設定に優先する設定を追加できます。デフォルトのファイルをカスタマイズするために編集する必要がないので、これは素晴らしいことです。

インデントのフレーバー

これまで見てきたように、いくつかの異なるインデントオプションがあり、それらすべてが一緒にニースを再生するわけではありません。 Vim wiki: から

自動インデント

'autoindent'は、新しい行を開始するときに、前の行からインデントをコピーするだけです。構造化されたテキストファイルの場合や、Vimに干渉せずにほとんどのインデントを手動で制御したい場合に便利です。 「autoindent」は他のインデント設定に干渉せず、一部のファイルタイプベースのインデントスクリプトはそれを自動的に有効にします。

filetype indent onset autoindentは一緒にうまく機能するので、vimrcで使用しています。私は他の人を設定していません。

smartindent&cindent

'smartindent'は、場合によっては1レベルのインデントを自動的に挿入し、Cのようなファイルに対して機能します。 'cindent'はよりカスタマイズ可能ですが、構文に関してはより厳密でもあります。 'smartindent'および 'cindent'は、ファイルタイプベースのインデントを妨げる可能性があるため、一緒に使用しないでください。

CおよびC++の場合、ファイルタイプベースのインデントは自動的に「cindent」を設定します。そのため、このようなファイルに対して「cindent」を手動で設定する必要はありません。このような場合でも、「cinwords」、「cinkeys」、および「cinoptions」オプションが適用されます。

一般に、「smartindent」または「cindent」は、ファイルタイプベースのインデントの動作に満足できない場合にのみ手動で設定する必要があります。

indentexpr

(vimfolder)\indent\\(indentscripts)にあるファイルタイプのインデントスクリプトを実行します。それは、ファイルタイプの vimドキュメント で、今述べた他のものと一緒に言及されています(また、それは私が抱えていた問題の原因でした):

'autoindent'、 'cindent'、 'smartindent'、および/または 'indentexpr'をリセットして、開いているファイルのインデントを無効にします。

トラブルシューティング

不正なプラグインがインデント設定を変更している可能性があり、そのため、結果が悪くなります。幸い、verboseは、問題のオプションを最後に変更したファイルを教えてくれます。

:verbose set autoindent?
:verbose set cindent?
:verbose set smartindent?
:verbose set indentexpr?

次のような結果が得られる場合があります

indentexpr=SomeMessedUpValue
Last set from ~/.vim/bundle/some_plugin/indent/plaintex.vim

その場合は、そのファイルを移動し、vimを閉じて開いて、問題が解決するかどうかを確認できます。

TeXのインデント設定をオフにする

たぶん、デフォルトではうまくいかず、TeXのインデント設定を無効にしたいが、他のすべてのファイルタイプはそのままにしておきたい。 afterディレクトリ内のファイルでこれらの値をデフォルトに設定することで、簡単に行うことができます。

TexやLaTexについてはよくわかりませんが、拡張子が.texのファイルを作成し、:filetypeを実行すると、ファイルタイプはplaintexになりました。これが正しいと仮定すると、ファイル~/.vim/after/indent/plaintex.vimを作成する必要があります。そのファイル内:

set autoindent&
set cindent&
set smartindent&
set indentexpr&

これにより、.texファイルを開くたびに、これらすべての値がデフォルトに設定されます。

26
Dean

行を削除しますset autoindentおよびset smartindentすべてのvim自動インデンテーションを削除します。

2
Jared Ng

同様の問題を抱えている他の人にとって、私のために働いた解決策は次のとおりでした:

  1. _:verbose set indentexpr?_を使用して、インデント解除の原因となっているファイルを見つけます
  2. indentexprが変更された場所を見つけます(私にとってはsetlocal indentexpr=GetTeXIndent()でした)
  3. その行を_setlocal indentexpr&_に変更して、indentexprをオフにします

これにより、角かっこ、かっこ、中かっこからすべてのインデント解除が削除されました。

2
AetherUnbound