はじめに
※ vim + quickrun + eslint です.
vim でファイルを編集,npm run lint 実行,エラー文を覚える,編集...
この流れは効率が悪いので,なんとかしたいなと思い quickrun を使うことにしました.
※ 2016/09/22
outputter/quickfix/errorformat,
outputter/quickfix/open_cmd を追加した
quickrun の設定
~/.vimrc
let g:quickrun_config = get(g:, 'quickrun_config', {})
let s:eslint_path = system('PATH=$(npm bin):$PATH && which eslint')
let b:quickrun_eslint_path = substitute(s:eslint_path, '^\n*\s*\(.\{-}\)\n*\s*$', '\1', '')
let g:quickrun_config = {
\ '_': {
\ 'runner' : 'vimproc',
\ 'runner/vimproc/updatetime' : 60,
\ 'outputter' : 'buffered',
\ 'outputter/buffered/target' : 'message',
\ 'outputter/buffer/close_on_empty' : 1,
\ 'outputter/buffer/split' : ':rightbelow 2sp',
\ },
\ 'javascript.jsx': {
\ 'command' : b:quickrun_eslint_path,
\ 'cmdopt' : '--config ~/.react/.eslintrc',
\ 'exec' : '%c %o %s',
\ 'outputter': 'error',
\ 'outputter/error/error' : 'quickfix',
\ 'outputter/quickfix/errorformat': '\ \ %l:%c\ \ error\ %m,%-G%.%#',
\ 'outputter/quickfix/open_cmd': 'copen 1',
\ },
\}
let g:quickrun_no_default_key_mappings = 1
nnoremap <Leader>r :ccl<CR>:write<CR>:QuickRun -mode n<CR>
nnoremap <expr><silent> <C-c> quickrun#is_running() ? quickrun#sweep_sessions() : "\<C-c>"
let s:hook = {
\ "name" : "face",
\ "kind" : "hook",
\ "is_success": 0,
\ "config" : {
\ "enable" : 1
\ }
\ }
function! s:hook.on_success(...)
if(&ft=='javascript.jsx')
let self.is_success = 1
endif
endfunction
function! s:hook.on_exit(...)
if self.is_success
echo ":-)"
endif
endfunction
call quickrun#module#register(s:hook, 1)
unlet s:hook
unlet s:eslint_path
やってること
let s:eslint_path = system('PATH=$(npm bin):$PATH && which eslint')
let b:quickrun_eslint_path = substitute(s:eslint_path, '^\n*\s*\(.\{-}\)\n*\s*$', '\1', '')
これは mtscout6/syntastic-local-eslint.vimを参考にしました.
eslint をグローバルにインストールしてたら,この設定は必要ないと思います.
\ 'outputter/quickfix/errorformat': '\ \ %l:%c\ \ error\ %m,%-G%.%#',
\ 'outputter/quickfix/open_cmd': 'copen 1',
出力をエラーメッセージだけに絞ります.
quickfix の表示領域も狭くしてます.
let s:hook = {
\ "name" : "face",
\ "kind" : "hook",
\ "is_success": 0,
\ "config" : {
\ "enable" : 1
\ }
\ }
function! s:hook.on_success(...)
if(&ft=='javascript.jsx')
let self.is_success = 1
endif
endfunction
function! s:hook.on_exit(...)
if self.is_success
echo ":-)"
endif
endfunction
call quickrun#module#register(s:hook, 1)
eslint は成功した時に何もメッセージを返してくれないので,顔 :-) を表示するようにしてます.
最後に
vim から eslint を実行したいけど,そのためだけに syntastic を使うのもなー と思い,quickrun で済ませました.
今後は quickfix について調べて,もっといい感じにしていきたいです.
2016/09/22
結構いい感じになったと思う.