バンドルされた「ファイルタイププラグインインデント」がタブ幅で混乱する


9

昨日vundleをインストールしましたが、それ以降、vimrcで構成したタブ幅は無視され、2ではなく4に戻されました。

バンドルの段落の後の次の行が原因であることがわかりました。

filetype plugin indent on

私のインデントは次のように設定されています:

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set smartindent " Do smart indenting when starting a new line
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
exec 'set tabstop='    .s:tabwidth
exec 'set shiftwidth=' .s:tabwidth
exec 'set softtabstop='.s:tabwidth

ここで私の完全なvimrcを確認できます

私はPythonスクリプトを使用してインデントの問題をテストしました(インデントが本当に重要な場合)。

に変更filetype plugin indent onしてみましたfiletype plugin onが、何も変わりません。その行をコメント化するだけが役立ちます。
バンドルインストールガイドによると、この行は必須です。

このインデントの問題を修正するにはどうすればよいですか?filetype行を省略してもいいですか、それともvimrcに保持することが本当に必須ですか?

解決:

@ChristianBrabandtと@romainlのおかげで、単一のvimrcファイルにも常駐できるソリューションが見つかりました。

filetype plugin indent on

[...]

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
au Filetype * let &l:tabstop = s:tabwidth
au Filetype * let &l:shiftwidth = s:tabwidth
au Filetype * let &l:softtabstop = s:tabwidth

あなたの質問には答えませんが、Vundleの代わりにvim-plugを試してみましたが、完全に機能しました...
nobe4

2
参照してください。よくある質問を
クリスチャンBrabandt

新しいOptionSet自動コマンドを使用して、シフト幅とソフトタブストップの設定をリセットすることもできます
Christian Brabandt

回答:


10

まず最初に; 以下の行は、Vundleまたはプラグインの管理とはまったく関係ありません

filetype plugin indent on

このコマンドは次の3つのことを行います。

  • ファイルタイプの検出を有効にします。
  • ファイルタイプ固有のスクリプト(ftplugins)を有効にします。
  • ファイルタイプ固有のインデントスクリプトを有効にします。

一部のプラグインマネージャーは、マジックを実行する前にファイルタイプの検出が無効になっていることを確認する必要があり、プログラミングにVimを使用すると、ftpluginsと適切なインデントなしではかなり難しくなります。彼らは単にファイルタイプの検出を内部的に処理するべきだと私は思うが、それは…

とにかく、あなたの問題は、インデント設定を上書きするftpluginsが原因であることが原因です。Python ftpluginが最も一般的な犯人です。なぜなら、PEP8を強制するべきであるとずっと前に決定されていないからです。

簡単な方法は、ftpluginsをまったく調達しないようにすることです。

filetype indent on

しかし、彼らは通常便利なものを持っているので、その方法は本当にお勧めできません。

最もクリーンなソリューションは、filetypeラインを「最適な」状態のままにすることです。

filetype plugin indent on

自分のオーバーライドでオーバーライドしますafter/ftplugin/python.vim

setlocal noexpandtab
setlocal shiftround
setlocal autoindent

let s:tabwidth=2
let &l:tabstop = s:tabwidth
let &l:shiftwidth = s:tabwidth
let &l:softtabstop = s:tabwidth

ノート:

  • smartindentとにかくファイルタイプ固有のインデントスクリプトで非推奨になるのはそれほど賢くないので、削除しました。
  • 不要な連結を避けるために、:executeコマンドをよりわかりやすい:letコマンドに置き換えました。

1
あなたが設定した場合はshiftwidthゼロにし、softtabstop-1、それはタブストップの設定に従います。
クリスチャンブラバンド2015

説明ありがとうございます。ほとんどの設定をvimrcで維持したいのは、複数のコンピューターと同期したいからです。私は自分のvimrcであなたのソリューションを使用し、使用のFAQ @ChristianBrabandtは私の質問の下に掲載のリンクを、それが動作します。質問を編集して自分の解決策を含めます。
wullxz 2015

4

インデントの問題はftpluginが原因で発生/usr/share/vim/vim-version-/ftplugin/-filetype-.vimします。ftpluginは.vimファイルをロードし、ファイル内のすべてのものをオーバーライドし.vimrcます。vim内で次のコマンドを実行すると、そのファイルの場所を確認できます:verbose set tabstop?。出力は、構成をオーバーライドしているファイルを示します。

私の場合、Pythonのインデント設定に問題がありました。

これを解決する簡単な方法は、以下を実行することです。

ホームフォルダーに.vimフォルダーを作成します(ない場合)。

cd ~/.vim
mkdir -p after/ftplugin/
cd ~/.vim/after/ftplugin/
vim python.vim

以下を追加します。

setlocal noexpandtab shiftwidth=4 softtabstop=4 tabstop=4

コマンドで必要なものを変更します。私は空白の代わりにタブを使っているので、私のように見えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.