前回の記事の続きで、口頭説明の補足資料として公開する。
Ubuntu環境でPerlを書く人向けのやつ。
今回はこの2つのプラグインについて紹介する。
- watchdogs.vim
- Unite.vim
watchdogs.vim
概要
開いているファイルのシンタックスチェックができるプラグイン。
導入方法や詳しい使い方は、作者による解説記事が詳しい。
ここでは、ちょっと特殊なPerl向けの設定方法を紹介する。
個人的には、Perl以外にはSyntasticを使っている。
Perlは業務で使用しており規模が大きく、Syntasticの同期的なシンタックスチェックだとかなりストレスが溜まるため、非同期実行できるwatchdogs.vimを使用している。
(NeoVim向けにNeomakeというプラグインが出ていて気になっている。)
入れるプラグイン
NeoBundle向け
NeoBundle 'Shougo/vimproc.vim', {
\ 'build' : {
\ 'windows' : 'tools\\update-dll-mingw',
\ 'cygwin' : 'make -f make_cygwin.mak',
\ 'mac' : 'make',
\ 'linux' : 'make',
\ 'unix' : 'gmake',
\ },
\ }
NeoBundle 'thinca/vim-quickrun'
NeoBundle 'jceb/vim-hier'
NeoBundle 'dannyob/quickfixstatus'
NeoBundle 'osyo-manga/shabadou.vim'
NeoBundle 'osyo-manga/vim-watchdogs'
dein向け(toml形式)
[[plugins]]repo='Shougo/vimproc'hook_post_update='''ifdein#util#_is_windows()letcmd='tools\\update-dll-mingw'elseifdein#util#_is_cygwin()letcmd='make -f make_cygwin.mak'elseifexecutable('gmake')letcmd='gmake'elseletcmd='make'endifletg:dein#plugin.build=cmd'''[[plugins]]repo='thinca/vim-quickrun'[[plugins]]repo='jceb/vim-hier'[[plugins]]repo='dannyob/quickfixstatus'[[plugins]]repo='osyo-manga/shabadou.vim'[[plugins]]repo='osyo-manga/vim-watchdogs'
設定
Perlだけで動いて欲しいので、この設定を行う。
letg:watchdogs_check_BufWritePost_enables = {
\ 'perl' : 1,
\ }
独自設定
普段の環境ではPerlを実行するときは、実行環境を揃えるためにプロジェクト下のenv.sh
的なやつをかませている。perl -wc filepath
としただけでは適切にチェックできず、./env.sh perl -wc filepath
とする必要がある。
そのため、watchdogsのデフォルトの設定では正しくチェックが行えないので、次のような設定を加える。
letg:quickrun_config = {} " 別の場所で定義済みなら不要letg:quickrun_config["watchdogs_checker/perl-with-env"] = {
\ "command" : './env.sh',
\ "exec" : "%c perl -wc %s:p",
\ "errorformat" : '%m\ at\ %f\ line\ %l%.%#',
\ }
letg:quickrun_config["perl/watchdogs_checker"] = {
\ "type" : "watchdogs_checker/perl-with-env",
\ }
call watchdogs#setup(g:quickrun_config)
動かしてみる
- ダメそうな実装で保存する
- 怒られる
- よっしゃ
Unite.vim
概要
Unite.vimは、何かのリスト
から選択して何かの操作
を実行するプラグイン。
例えば以下の様なことが、全く同じインタフェースで扱える。
ディレクトリ以下のすべてのファイル
から選択してファイルを開く
最近開いたファイル
から選択してファイルを開く
ファイルのすべての行
から選択して行へ移動
クラスのアウトライン
から選択してメソッドへ移動
grepやagの検索結果
から選択してファイルを開き、その行へ移動
適当に文字を入力して曖昧にフィルタリングできることが極めて便利。ぶっちゃけ、EmacsのHelmやコマンドラインツールのpecoのアレ
ここでデモ。
入れるプラグイン
NeoBundle向け
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/neomru.vim'
NeoBundle 'Shougo/unite-outline'
dein向け(toml形式)
[[plugins]]repo='Shougo/unite.vim'[[plugins]]repo='Shougo/neomru.vim'[[plugins]]repo='Shougo/unite-outline'
設定
これだけ設定しておけば、とりあえずは十分そうなやつ。
letg:unite_enable_smart_case =1
検索にagを使う設定
grep
は遅いのでag
で検索したい。
if executable('ag')letg:unite_source_grep_command ='ag'letg:unite_source_grep_default_opts ='--nogroup --nocolor --column'letg:unite_source_grep_recursive_opt =''endif
マッピングを晒す
自分が普段使っている設定の一部。
nnoremap [unite] <Nop>
nmap <Space>u [unite]
nnoremap [unite]f :<C-u>Unite file_rec/git -start-insert<CR>nnoremap [unite]m :<C-u>Unite file_mru -start-insert<CR>nnoremap [unite]l :<C-u>Unite line -start-insert<CR>nnoremap [unite]o :<C-u>Unite outline -start-insert<CR>nnoremap [unite]a :<C-u>Unite grep:. -start-insert<CR>nnoremap [unite]r :<C-u>UniteResume -start-insert<CR>
このマッピングは、上から順に最初に上げたユースケースに(ほぼ)対応している。
ディレクトリ以下のすべてのファイル
から選択してファイルを開く
最近開いたファイル
から選択してファイルを開く
ファイルのすべての行
から選択して行へ移動
クラスのアウトライン
から選択してメソッドへ移動
grepやagの検索結果
から選択してファイルを開き、その行へ移動
- (前回Uniteで開いたリストを再表示)
ディレクトリ以下のすべてのファイル
は、本当はfile_rec
と指定したいところだが、ある程度の規模もプロジェクトでファイル数が多い場合(特に外部モジュールをプロジェクト以下に配置するパターン)に、実用的ではない速度になってしまう。
そのため、git管理下のファイルのみを対象としたfile_rec/git
を代わりに使用している。
動かしてみる
- 例示したユースケースを何度も実行する
- べんりっっ
終わりに
諸事情により、次があるのかはわからないけども今回はこれくらいにて。