Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

前回の記事の続きで、口頭説明の補足資料として公開する。
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='''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だけで動いて欲しいので、この設定を行う。

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

独自設定

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

~/.vimrc
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向け

~/.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
letg:unite_enable_smart_case =1

検索にagを使う設定

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

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

マッピングを晒す

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

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

動かしてみる

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

終わりに

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


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>