私の.vimrc
ではftplugin
を使おうとしていますが、正常に読み込まれたことを前提として、それに関連するいくつかのコマンドを使用しています。ただし、プラグインがインストールされていない古いマシンがいくつか見つかりました。どういうわけか、このプラグインのロードを条件付きにして、filetype on
と同様のディレクティブを同じ条件付きブロックに追加できますか?
配色とVimバージョンには条件があるのを見てきましたが、プラグインをチェックする(または認識しなかった)例を見たことがありません。
注意:私はVimScriptの初心者です。
そのブロックを、プラグインによって定義された変数、コマンド、または関数がvimに認識されているかどうかを確認するために、exists()
関数を使用する条件でラップできます。
〜/ .vimの下のファイルにあるいくつかのビットを以下に示します。
" after/plugin/speeddating.vim
if exists(':SpeedDatingFormat')
SpeedDatingFormat %-d %B %Y
endif
" ftplugin/Ruby.vim
if exists('g:loaded_surround') && !exists('b:surround_'.char2nr(':'))
let b:surround_{char2nr(':')} = ":\r"
endif
上記のビットは、通常のプラグイン、ここではftplugin、およびafter/plugin
ディレクトリ内のファイルの後に評価されるファイルにあることに注意してください。
もう1つのオプションは、try/catchブロックを使用することですが、これには少なくともvim7.0が必要です。
if v:version >= 700
try
runtime bundle/pathogen/autoload/pathogen.vim
call pathogen#infect()
catch
endtry
endif
そのブロックのtry
セクションで何かが失敗すると、それはcatch
セクションにスキップします。 catch
セクションは空であるため、endtry
ステートメントの後の初期化ファイルの残りの部分に進みます。
これは、すでにロードされているプラグインに依存するのではなく、手動でコードをロードするため、.vimrcファイル自体で実行できます。
私の好みの方法は、プラグインファイルの存在を確認することです。これはもっと簡単だと思います。
if !empty(glob("path/to/plugin.vim"))
echo "File exists."
endif
_.vimrc
_ディレクトリの束ではなく、_after/
_内でVim構成をまとめながらこれを実現したかったのです。これは私が思いついた解決策です:
exists()
で提供される単一のコマンドをチェックすることによって各プラグインの存在をチェックし、存在する場合はそのオプションを設定します。 (これは、受け入れられた回答と同じです。)
上記の方法で設定されたすべてのオプションを関数内に配置します(コードではSetPluginOptionsNow()
と呼ばれます)。
新しいVimセッションに入るときにトリガーされるVimEnter
イベントでこの関数を呼び出しますが、重要なのはafterプラグインがすべて読み込まれたことです。このため、exists()
チェックでは、プラグイン関数を問題なくチェックできます。
これが私の_.vimrc
_のその部分からのサンプルです。
_""" PLUGIN-SPECIFIC OPTIONS
" These are "supposed to be" set in after/plugin directory, but then
" cross-platform synchronization would get even messier. So, au VimEnter it is.
function! SetPluginOptionsNow()
" NERDTree Options
if exists(":NERDTree")
map <F10> :NERDTreeToggle<CR>
endif
" Syntastic Options
if exists(":SyntasticCheck")
let g:syntastic_stl_format = '[Syntax: line:%F (%e+%w)]'
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
" and so on...
endfunction
au VimEnter * call SetPluginOptionsNow()
""" END OF PLUGIN-SPECIFIC OPTIONS
_
さらに別の方法は、:silent! {cmd}
を使用することです。これは、{cmd}
が存在しない場合のエラーを抑制します。主な利点は、それが短い単一のコマンドであることです。これはVim 6でも機能し、オプションのものに最適です。
たとえば、Tim Popeの repeat.vim を使用してマッピングを繰り返し可能にするプラグインで使用されます。
最初に別の質問で投稿されました: https://stackoverflow.com/a/48178537/284358
別の方法として、正規表現を使用して、手元のプラグインがruntimepath
にあるかどうかを判断することもできます。
if &rtp =~ 'plugin-name'
...
endif
これには、autoload
ディレクトリにvimscriptコードのみがあるプラグインで機能するという利点があります。これは、関数の実行時にオートロードスニペットがロードされるため、.vimrcが最初に解析されるときに検出されません。コール。