読者です 読者をやめる 読者になる 読者になる

特定の文字列で始まるグローバル変数を列挙する

vim

なんかやたらと設定用のオプションの変数が多いプラグインがあると、どんな変数があって今どんな値が入っているのか知りたくなることがある。てことで私のvimrcには以下のようなコマンドが定義してある。

command! -nargs=+ Vars PP filter(copy(g:), 'v:key =~# "^<args>"')

PP は prettyprint.vim のもの。なければ echo でもいいけど絶対見づらいので prettyprint.vim 推奨。
で、これを使うと以下のようなことができるようになる。

:Vars ref_
{
  'ref_alc_cmd': 'elinks -dump -no-numbering -no-references %s',
  'ref_alc_encoding': '',
  'ref_alc_start_linenumber': 37,
  'ref_alc_use_cache': 1,
  'ref_cache_dir': '/home/thinca/.vim/info/ref',
  'ref_clojure_cmd': 'clj',
  'ref_clojure_overview': 0,
  'ref_detect_filetype': {'_': function('1'), 'c': 'man', 'clojure': 'clojure', 'erlang': 'erlang', 'perl': 'perldoc', 'php': 'phpmanual', 'python': 'pydoc', 'ruby': 'refe'},
  'ref_erlang_cmd': 'erl',
  'ref_man_cmd': 'man',
  'ref_man_lang': '',
  'ref_open': 'vsplit',
  'ref_perldoc_cmd': 'perldoc',
  'ref_perldoc_complete_head': 0,
  'ref_phpmanual_cmd': 'elinks -dump -no-numbering -no-references %s',
  'ref_phpmanual_path': '/home/thinca/share/doc/php',
  'ref_pydoc_cmd': 'pydoc',
  'ref_pydoc_complete_head': 0,
  'ref_refe_cmd': '',
  'ref_refe_encoding': '',
  'ref_refe_rsense_cmd': '',
  'ref_use_vimproc': 1
}

ちなみに最初は neocomplcache の設定でも貼ろうかと思ったんだけどあまりに長かったのでやめた。

あるいは視点を変えてインストールしているプラグインのリストとか。

:Vars loaded_
{
  'loaded_AlignMapsPlugin': 'v41',
  'loaded_AlignPlugin': 'v35',
  'loaded_ZoomWinPlugin': 'v23',
  'loaded_ambicmd': 1,
  'loaded_arpeggio': 1,
  'loaded_autoload_fuf': 1,
  'loaded_autoload_fuf_bookmark': 1,
  'loaded_autoload_fuf_buffer': 1,
  'loaded_autoload_fuf_callbackfile': 1,
  'loaded_autoload_fuf_callbackitem': 1,
  'loaded_autoload_fuf_changelist': 1,
  'loaded_autoload_fuf_dir': 1,
  'loaded_autoload_fuf_file': 1,
  'loaded_autoload_fuf_givencmd': 1,
  'loaded_autoload_fuf_givendir': 1,
  'loaded_autoload_fuf_givenfile': 1,
  'loaded_autoload_fuf_help': 1,
  'loaded_autoload_fuf_jumplist': 1,
  'loaded_autoload_fuf_line': 1,
  'loaded_autoload_fuf_quickfix': 1,
  'loaded_autoload_fuf_tag': 1,
  'loaded_autoload_fuf_taggedfile': 1,
  'loaded_errormarker': '0.1.11',
  'loaded_eskk': 1,
  'loaded_fakeclip': 1,
  'loaded_fuf': 1,
  'loaded_getscriptPlugin': 'v29',
  'loaded_gist_vim': 1,
  'loaded_github': 1,
  'loaded_gzip': 1,
  'loaded_hirakata': 1,
  'loaded_ku': 1,
  'loaded_ku_file_mru': 1,
  'loaded_lingr_vim': 1,
  'loaded_matchit': 1,
  'loaded_matchparen': 1,
  'loaded_metarw': 1,
  'loaded_minscm': 1,
  'loaded_narrow': 1,
  'loaded_neocomplcache': 1,
  'loaded_nerd_comments': 1,
  'loaded_nerd_tree': 1,
  'loaded_netrwPlugin': 1,
  'loaded_operator_replace': 1,
  'loaded_partedit': 1,
  'loaded_poslist': 1,
  'loaded_prettyprint': 1,
  'loaded_projecteuler_vim': 1,
  'loaded_quicklaunch': 1,
  'loaded_quickrun': 1,
  'loaded_ref': 1,
  'loaded_renamer': 1,
  'loaded_repeat': 1,
  'loaded_rrhelper': 1,
  'loaded_rsense': 1,
  'loaded_scouter': 1,
  'loaded_setlocal': 1,
  'loaded_smartword': 1,
  'loaded_speeddating': 1,
  'loaded_spellfile_plugin': 1,
  'loaded_surround': 1,
  'loaded_taglist': 'fast_load_done',
  'loaded_tarPlugin': 'v24',
  'loaded_template': 1,
  'loaded_textobj_between': 1,
  'loaded_textobj_comment': 1,
  'loaded_textobj_datetime': 1,
  'loaded_textobj_diff': 1,
  'loaded_textobj_entire': 1,
  'loaded_textobj_fold': 1,
  'loaded_textobj_function': 1,
  'loaded_textobj_indent': 1,
  'loaded_textobj_jabraces': 1,
  'loaded_textobj_lastpat': 1,
  'loaded_textobj_parameter': 1,
  'loaded_textobj_syntax': 1,
  'loaded_vimballPlugin': 'v31',
  'loaded_vimfiler': 1,
  'loaded_vimrcbox': 1,
  'loaded_vimshell': 1,
  'loaded_visualstar': 1,
  'loaded_zipPlugin': 'v23'
}

コマンドをちょっと弄れば、文字列を含むとか、パターンにマッチするってのもできる。たまに便利。
ちなみに補完関数は設定してないけど作ろうと思えば簡単に作れると思う。