LoginSignup
15

More than 5 years have passed since last update.

watchdogs.vimとUnite.vimを布教する

Last updated at Posted at 2016-09-01

前回の記事の続きで、口頭説明の補足資料として公開する。
Ubuntu環境でPerlを書く人向けのやつ。

今回はこの2つのプラグインについて紹介する。

  • watchdogs.vim
  • Unite.vim

watchdogs.vim

概要

開いているファイルのシンタックスチェックができるプラグイン。
導入方法や詳しい使い方は、作者による解説記事が詳しい。
ここでは、ちょっと特殊なPerl向けの設定方法を紹介する。

個人的には、Perl以外にはSyntasticを使っている。
Perlは業務で使用しており規模が大きく、Syntasticの同期的なシンタックスチェックだとかなりストレスが溜まるため、非同期実行できるwatchdogs.vimを使用している。
(NeoVim向けにNeomakeというプラグインが出ていて気になっている。)

入れるプラグイン

NeoBundle向け

~/.vimrc
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形式)

~/.vim/dein.toml
[[plugins]]
repo = 'Shougo/vimproc'
hook_post_update = '''
  if dein#util#_is_windows()
    let cmd = 'tools\\update-dll-mingw'
  elseif dein#util#_is_cygwin()
    let cmd = 'make -f make_cygwin.mak'
  elseif executable('gmake')
    let cmd = 'gmake'
  else
    let cmd = 'make'
  endif
  let g: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だけで動いて欲しいので、この設定を行う。

~/.vimrc
let g:watchdogs_check_BufWritePost_enables = {
\   'perl' : 1,
\ }

独自設定

普段の環境ではPerlを実行するときは、実行環境を揃えるためにプロジェクト下のenv.sh的なやつをかませている。
perl -wc filepathとしただけでは適切にチェックできず、./env.sh perl -wc filepathとする必要がある。
そのため、watchdogsのデフォルトの設定では正しくチェックが行えないので、次のような設定を加える。

~/.vimrc
let g:quickrun_config = {} " 別の場所で定義済みなら不要
let g:quickrun_config["watchdogs_checker/perl-with-env"] = {
\   "command"     : './env.sh',
\   "exec"        : "%c perl -wc %s:p",
\   "errorformat" : '%m\ at\ %f\ line\ %l%.%#',
\ }
let g: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向け

~/.vimrc
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/neomru.vim'
NeoBundle 'Shougo/unite-outline'

dein向け(toml形式)

~/.vim/dein.toml
[[plugins]]
repo = 'Shougo/unite.vim'

[[plugins]]
repo = 'Shougo/neomru.vim'

[[plugins]]
repo = 'Shougo/unite-outline'

設定

これだけ設定しておけば、とりあえずは十分そうなやつ。

~/.vimrc
let g:unite_enable_smart_case = 1

検索にagを使う設定

grepは遅いのでagで検索したい。

~/.vimrc
if executable('ag')
    let g:unite_source_grep_command       = 'ag'
    let g:unite_source_grep_default_opts  = '--nogroup --nocolor --column'
    let g:unite_source_grep_recursive_opt = ''
endif

マッピングを晒す

自分が普段使っている設定の一部。

~/.vimrc
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を代わりに使用している。

動かしてみる

  • 例示したユースケースを何度も実行する
  • べんりっっ

終わりに

諸事情により、次があるのかはわからないけども今回はこれくらいにて。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15