プラグインがアクティブかどうかを確認する方法


15

vim-latexsuite適切なファイルを開いたときに、filetypeプラグイン(など)がインストールされ、アクティブ化されているかどうかを確認するにはどうすればよいですか?別の人気のあるエディターは、関連する「マイナーモード」がアクティブであることを示します。vimと同等のものは何ですか?

回答:


20

ファイルタイププラグイン(vim-latexsuiteなど)がインストールされているかどうかを確認する方法

あなたは:scriptnamesすべてのソースファイルをリストすることができます。

別のオプションは、プラグインがそのままロードされたかどうかを示す変数をチェックすることですrecommended practice to allow the user to disable the loading of a given plugin.。通常g:loaded_...<plugin_name>/pluginフォルダー内で変数を見つけることができます。あなたが言及しプラグインには、を使用できますecho exists("loaded_libList")

適切なファイルを開くとアクティブになりますか?

ファイルタイプのプラグインである場合、'filetype'オプションが設定されたときに自動的にアクティブ化されます。オプションが現在のバッファーに対して正しいかどうかを確認できます。

:set filetype?

別の人気のあるエディターは、関連する「マイナーモード」がアクティブであることを示します。vimと同等のものは何ですか?

あなたはで説明したように、オプションを直接プラグインを使用するかのどちらか、そのような指示を表示するためにあなたのステータスラインをカスタマイズすることができ:help 'statusline'、およびでvi-improved.org


6

Vimプラグインにはアクティベーションの指示はありません。適切なセットアップでは、これは必要ありません。

副作用、通常はマッピングを照会することにより、プラグインがアクティブかどうかをすばやく確認できます。したがって、たとえば、NERDCommenterマッピングはで始まることがわかっている<Leader>cため、そのアクティブ化のクエリはになります:nmap <Leader>c。マッピングがリストされている場合、プラグインはアクティブです。カスタムコマンドと:autocmdプラグインのグループでも同じことが実現できます。ほとんどのプラグインは、g:loaded_pluginnameチェック可能な包含ガード変数も定義します。

同じことがファイルタイププラグインにも当てはまります(そして、エフェクトはすべてバッファスコープである必要があります)。アクティブなプラグインを決定する上で最も重要な要素は、ファイルタイプを正しく検出することです。を介してクエリを実行する:setlocal filetype?'statusline'%y/ %Yアイテムを介してこれを入力することもできます。


6

その特定の場合、私はで遊ぶだけ:scriptnamesです。グローバル変数を使用してftプラグインがロードされているかどうかをチェックすることは期待できません-LaTeXSuiteにはプラグインがあるかもしれませんが、確かなことはftpluginスクリプトがたくさんあることです。多くのftpluginが使用しますb:did_ftplugin(少なくともVimに同梱されているもの)が、このアプローチは間違いなくスケーリングしません:結果として、すべてのftpluginがこの無意味な変数を使用するわけではなく、特定のftpluginがロードされている-たとえば、Cのみの場合、22個のftpluginsがあり、それらは間違いなく同じ再挿入防止ガードを使用していません。

だから:scriptname。悲しいかな:scriptname、人間の目には多くの不規則な結果が出ます。幸いなことにexecute()(非常に最近の機能)、そしてfilter()救助に来てください。その場合、ラテックス関連のvimスクリプトを探します

:echo filter(split(execute(':scriptname'), "\n"), 'v:val =~? "tex"') 
" or even "latex" instead of "tex"

プラグインマネージャーを使用している'runtimepath'場合も、プラグインマネージャーがオプションを使用している可能性があります。で値を表示できます:echo &rtp。次の方法で値をフィルタリングすることもできます。

:echo filter(split(&rtp), ','), 'v:val =~? "tex")

(これにより、プラグインマネージャーがプラグインをアクティベートしたかどうか、場合によってはLaTeX-suiteがわかります。これにより、関連するftpluginsが正しく読み込まれたかどうかがわかりません。:scriptnameこの情報が得られます。)


3

autocommandによってファイルタイププラグインをアクティブにする場合、verbose = 9を設定して、Vimが実行するときにautocommandをエコーするようにします。

:set verbose=9

3

1つの方法は、次の正規表現検索を実行することですruntimepath

if match(&runtimepath, 'MY-PLUGIN') != -1
    " ...
endif

vim-plugを使用している場合は、以下をチェックする一般的な方法があります。

function! PlugLoaded(name)
    return (
        \ has_key(g:plugs, a:name) &&
        \ isdirectory(g:plugs[a:name].dir) &&
        \ stridx(&rtp, g:plugs[a:name].dir) >= 0)
endfunction

使用法:

if PlugLoaded('MY-PLUGIN')
    " ...
endif

足りません。また、プラグインマネージャーでインストールされたプラグインのみを処理します。すべての場合において、プラグイン内に含まれるftpluginスクリプトは処理されません。これはOPの質問でした。
リュックエルミット

0

vim-plugを使用する場合plugs、ロードされたすべてのプラグインとそれらに関するいくつかの情報をリストするという変数を設定します。YCMを実行しているかcoc.nvimを実行しているかを確認する必要があるときに、自分の質問を解決しました。プラグインがロードされているかどうかを確認するにはhas_key(plugs, "name")、次を実行します:

if has_key(plugs, 'YouCompleteMe')
        call YCM()
endif
if has_key(plugs, "coc.nvim")
        call CocStart()
endif

注:これは、それが現在にリストされている場合にのみ表示され、vimrcたとえば、遅延ロードに設定されている場合には表示されません。

    Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
    ...
if has_key(plugs, 'nerdtree')
        echo "HAS NERDTREE"
endif

まだnerdtreeロードされていなくても、起動時にそれを印刷します。

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