という事の顛末を、迷えるVimmerに伝えるべく・・。
脱Vimしようとしたきっかけ
Lintが遅い。
- eslint
- flow
Webなフロントエンドの開発をよくやる身としては、
- この2つのLinterを
- リアルタイムに
- エディタ上で
使いたい。
今までずっとSyntasticというプラグインを使ってたけど、デカいプロジェクトだと如実に遅い。
GitHub - vim-syntastic/syntastic: Syntax checking hacks for vim
小さいプロジェクトでも`:w`してから5秒くらい待たされたりしてて、どうにかならんかなーと思ってた。
ESLintに関しては、Lintのサーバーを裏で走らせておいて・・っていうことができる`eslint_d`を使うことでだいぶマシになる。
let g:syntastic_javascript_eslint_exec = 'eslint_d'
けどFlowに関してはどうしようもないっぽく(公式のIssueでも色々でてるけど・・)、遅いのを我慢するか、型チェックはエディタ上でやらないかとか考え始めてて、それならいっそVimを捨てるかなーとか考えてた。
こんにちはAtom
そういう時に、WebStormやらAtomやらVSCodeやら、エディタを使ってる勢の話を聞いてちょっと意識するように。
普段からも、コードじゃないメモとか原稿とかを書くのにはAtomを使ってて(昔はCotEditorやったけどシンタックスハイライトが激重いので捨てた)、コード書く分にもプラグインとかも豊富そうなのでAtomでコード書ける環境を整えてみた。
- https://github.com/t9md/atom-vim-mode-plus
- https://github.com/AtomLinter/linter-eslint
- https://github.com/AtomLinter/linter-flow
とりあえずこんなもんで。
よかった
そしたら良いじゃないですかこれー!
とかちょっと浮かれてしまった。
けどもちろん惜しいなーとかちょっとなーってとこもあり。
あといっぽ
`vim-mode-plus`には`vim-mode-plus-exmode`っていうプラグインもあって、これをいれると`:w`とか`:vs`とかできるようになる。
けど・・・、
- `:q!`
- `:vs filename`
ができなかった・・。
だめだ・・
黒い画面よく使う勢なので、ターミナルといかにシームレスに使えるかも譲れないポイントで。
ターミナル -> Vimの関係性だと、各種コマンドを打ちながらすっとファイルを編集できて、ブラウザとターミナルさえあれば開発が完結する。
これがほんとに身軽で気に入ってるポイントで。
AtomはAtomなので、別途ターミナルを用意するか、Atomの中でターミナルを動かすソリューションが必要になる。
`terminal-plus`はなぜか動かなかったので、そのForkであるやつを。
ただこれも惜しい・・。
- `Ctrl + L`のコンソールのクリアが綺麗に消えない
- てかターミナルの中にエディタじゃなく、エディタの中にターミナルが気持ち悪い
- ターミナル専用のタブとか開きたい
- 現状だと、エディタ内ターミナルなので、レイヤー的にタブと関係ない
- `tmux`とかも
- 横に出てるプロジェクトツリー、ターミナルの`pwd`と連動してほしい・・
などなど気になる点がいっぱい出てくる。
`linter-flow`と`linter-eslint`も、マウスでホバーしないとエラー文言がわからないという感じで惜しい。
うう・・Vimが恋しい・・ターミナルだけで完結する世界に帰りたい・・。
VimでさくっとLintするやつさえあれば・・本当にないの?2017年やで?
あった
あったわ・・・!
要求するVimのバージョンが8なので、そこだけアップデートしたらすぐ使えた。
Syntasticの時には自前のVim scriptで書いてた「最も近い`.eslintrc`を探す」みたいなコードももちろん実装されてるし、非同期で速い。
てか1文字打つごとに判定してくてウザいくらい速い!(設定で変えられる)
というわけでAtomに乗り換える理由もなくなり、またしばらくVimだけで生きていけそう。
ALEのアレコレ
ファイルタイプを見て勝手にLintしてくれる。
そしてタイプごとに色んな種類のLinterが勝手に動いちゃう。
JavaScriptの場合、
- eslint
- jscs
- jshint
- flow
- standard
- xo
と、やってほしくないのまでやってくれるので、制限する。
let g:ale_linters = { \ 'javascript': ['eslint'], \}
Lintするのは保存時だけでいいよって場合は、
let g:ale_lint_on_text_changed = 'never' let g:ale_lint_on_enter = 0
よきVimライフを!