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
あなたの質問には少し用語が混在しているようです。 vimでは、autoindentという用語は、前の行のインデントレベルに続く特別な種類のインデントを指します(これは非常に便利な場合があります)。削除するにはset noautoindent
手動で、または_vimrcに書き込みます。
他に2つの自動インデント、cindent
とsmartindent
があります。同様に、それらを無効にしたい場合は、set nocindent
およびset nosmartindent
ヘルプを見ると(help autoindent
、...)それらはすべて非常にうまく説明されています。どちらを好むか(または好まないか)は、ほとんどの場合、プログラミングスタイルと習慣によって決まります。だから、それらを試してみて、あなたが最も好きなものを見てください。
残念ながら、私はLaTeXをあまり使用しなくなったため、内部のファイルタイプのインデント規則に精通していません。
Javascriptを使ってインデントの問題を解決するのに数時間を費やしましたが、結論はvimrcからfiletype indent on
を削除しないでください!
この設定は、複数のファイルタイプに最適なスマートインデントを提供します。これで悪い結果が得られる場合は、構成の問題が発生している可能性があります。
ですから、あなたが私のようなら、おそらくvimrcにfiletype indent on
があり、それが何をしているのかわからなかったでしょう。
この設定はすべて、ファイルタイプ固有のインデントルールを持つファイルを探すようにvimに指示するだけです。見た目はいくつかありますが、興味のある場所はおそらく2つだけです。
$VIMRUNTIME/indent/
~/.vimrc/after/indent/
そもそも、vimに付属しているデフォルトのインデントルールがあります。 filetype indent on
を新しいvimインストールに設定する場合、これがすべてのスマートインデントの元になります。たとえば、index.html
というファイルを開くと、$VIMRUNTIME/indent/html.vim
からルールが取得されます。
私の経験では、これらのデフォルトのルールはかなり良いですが、他の設定によって台無しになる可能性があります。
2番目の場所(after
ディレクトリ)では、最初の場所の設定に優先する設定を追加できます。デフォルトのファイルをカスタマイズするために編集する必要がないので、これは素晴らしいことです。
これまで見てきたように、いくつかの異なるインデントオプションがあり、それらすべてが一緒にニースを再生するわけではありません。 Vim wiki: から
'autoindent'は、新しい行を開始するときに、前の行からインデントをコピーするだけです。構造化されたテキストファイルの場合や、Vimに干渉せずにほとんどのインデントを手動で制御したい場合に便利です。 「autoindent」は他のインデント設定に干渉せず、一部のファイルタイプベースのインデントスクリプトはそれを自動的に有効にします。
filetype indent on
とset autoindent
は一緒にうまく機能するので、vimrcで使用しています。私は他の人を設定していません。
'smartindent'は、場合によっては1レベルのインデントを自動的に挿入し、Cのようなファイルに対して機能します。 'cindent'はよりカスタマイズ可能ですが、構文に関してはより厳密でもあります。 'smartindent'および 'cindent'は、ファイルタイプベースのインデントを妨げる可能性があるため、一緒に使用しないでください。
CおよびC++の場合、ファイルタイプベースのインデントは自動的に「cindent」を設定します。そのため、このようなファイルに対して「cindent」を手動で設定する必要はありません。このような場合でも、「cinwords」、「cinkeys」、および「cinoptions」オプションが適用されます。
一般に、「smartindent」または「cindent」は、ファイルタイプベースのインデントの動作に満足できない場合にのみ手動で設定する必要があります。
(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のインデント設定を無効にしたいが、他のすべてのファイルタイプはそのままにしておきたい。 after
ディレクトリ内のファイルでこれらの値をデフォルトに設定することで、簡単に行うことができます。
TexやLaTexについてはよくわかりませんが、拡張子が.tex
のファイルを作成し、:filetype
を実行すると、ファイルタイプはplaintex
になりました。これが正しいと仮定すると、ファイル~/.vim/after/indent/plaintex.vim
を作成する必要があります。そのファイル内:
set autoindent&
set cindent&
set smartindent&
set indentexpr&
これにより、.tex
ファイルを開くたびに、これらすべての値がデフォルトに設定されます。
行を削除しますset autoindent
およびset smartindent
すべてのvim自動インデンテーションを削除します。
同様の問題を抱えている他の人にとって、私のために働いた解決策は次のとおりでした:
:verbose set indentexpr?
_を使用して、インデント解除の原因となっているファイルを見つけますindentexpr
が変更された場所を見つけます(私にとってはsetlocal indentexpr=GetTeXIndent()
でした)setlocal indentexpr&
_に変更して、indentexpr
をオフにしますこれにより、角かっこ、かっこ、中かっこからすべてのインデント解除が削除されました。