2011-06-25 16 views
1

vimプラグインで、ユーザーが既に.vimrcファイルに変数を設定しているかどうかを確認するにはどうすればよいですか?vimスクリプトで、.vimrcで設定が指定されているかどうかを確認するには?

たとえば、私が.vimrcを持っている:

set shiftwidth=2 

それから私は、だから私はそうのようなプラグインを変更すると思います

set shiftwidth=3 

を持っているプラ​​グインのロード:

if !exists("shiftwidth") 
    set shiftwidth=3 
endif 

をしかし、修正されたプラグインがロードされた新しいvimウィンドウを読み込むと、タブはまだに設定されていますであり、2ではありません。

.vimrcで特に指定されていない限り、shiftwidth=3を設定するにはどうすればよいですか?

答えて

2

これらのコマンドは、shiftwidthが設定された場所を示す必要があります:あなたがプログラムでその情報で何かをしたい場合は

:set verbose=15 
:set shiftwidth 
:set verbose=0 

はあなたが詳細な出力redirectに必要とあなたが望むもののためにそれを解析したい:

:redir => myvariable 
:set verbose=15 
:set shiftwidth 
:set verbose=0 
:redir END 

myvariableには、スクリーンに印刷されたテキストが表示されるようになりました。

改訂ANSWER は、ここで私はあなたがあなたのコメントで明確に何を行う可能性が考える方法です。

ユーザのvimrcに最後の行を追加して、shiftwidthの現在の値をグローバル変数に保存します。プラグインが最後の行の前にvimrcで明示的にソースされていない限り、値はプラグインがロードされる前に保存されます。 shiftwidthを自分のプラグインでこの値にリセットすることができます。

[everything in vimrc comes before this line] 
:let g:vimrc_shiftwidth = &shiftwidth 

あなたは、プログラムwrite >> [file]コマンドのようなもので、この行を追加することができます。おそらく、このコマンドをvimrcに追加したプラグインを示すコメントを追加することになります。また、ユーザーがexrcオプションを使用してshiftwidthを別のvimrcに設定した場合など、正しい値を取得するとは思われません。全体的に、まだ推奨されていません。

+0

':set shiftwidth'の冗長出力は、私のプラグインが' shiftwidth'の値が最後に設定された場所であることを確認しますが、あなたのプラグインを変更する方法について質問しませんでした。それが設定されている場合は '.vimrc'です。 – neezer

+0

@neezer - 申し訳ありませんが、私は十分に近く読んでいませんでした。 Verboseは最後に設定された場所のみを通知します。起動後にユーザーが設定した値が変更された場合は、それは役に立ちません。私はvimrcファイルを開き、 'shiftwidth'を設定する行を検索する必要があると思います。' set sw = ... '、' set shiftwidth = ... '、' let&sw = ... '、または' let&shiftwidth = ... 'を実行します。 –

+0

@Herbert Sitz - うーん、プラグインが読み込まれるたびに '.vimrc'ファイルをたどるよりも良い方法があるはずです。私はプラグインがロードされた後にユーザーがそれを変更するかどうかについて心配していません、私はちょうどロード時にそれを取得しようとしています:例えば、ftypeでファイルを開いてプラグインをロードする=> 'shiftwitdth'を' '.vimrc'に設定がない場合を除き、' shiftwidth'はプラグインのデフォルトと同じになります。 – neezer

関連する問題