Open26

Vimの環境構築を今年こそはやりきるぞ2021冬

https://zenn.dev/sadness_ojisan/scraps/f96f58cb2ff878 にあるようにWin環境をつくるため。

repository: https://github.com/sadnessOjisan/dotfiles

方針

なるべく薄くしたい。
理想は plugin manager と init.vim だけ移せば引っ越しできる設定ファイル。pythonの設定とかやりたくない

Must

  • LSP Client
  • fazy finder
  • 補完
    • コメント
    • カッコ
  • 行数表示

Want

  • ファイラ(finderで十分だと思ったので優先度落とした
  • terminal
  • おしゃれな色
  • おしゃれなステータスバー

plugin 周りの整備。

マネージャーとして vim-plug を使う

https://github.com/junegunn/vim-plug
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
       https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

調べる限りたくさんプラグインマネージャがあったが、後発かつメンテされているというので vim-plug を選んだ

neovim の設定を書いてみる

https://neovim.io/doc/user/vim_diff.html#nvim-configuration

とりあえずは、.config/nvim/init.vim に置けばよさそう。

将来的に設定を分割するときは、.config/nvim/ に置けばよさそう。

$ mkdir -p ~/.config/nvim/

$ touch ~/.config/nvim/init.vim

$ vim ~/.config/nvim/init.vim

########
########
########

set number

で動いた

LSP Client

cocはyarnが必要

nvm use v12

npm i -g yarn

Unknown function: CocActionAsync が出た時の対応

:PlugInstall したあと、:CocInstall coc-tsserver すれば正常に動くが、vimを立ち上げなおすともう一度pluginstallからしないと動かない。なぜ。

call plug#begin('~/.vim/plugged')
...
call plug#end()

が抜けてた

tzf の検索でnode_modulesを省きたい

vim の中から「ファイル作成・ファイル名変更・ファイル削除したい」けどどうすればいいじゃろか。

  • nerdtree にそれやるコマンドあったの覚えてる
  • floaterm とかつかう
  • 素のexモードでがんばる

とか?

vimfilerは既に開発が終了していて、更に開発が終了しているFuzzy FinderのUniteに依存しているので今から使うのはおすすめできないです。
Unite後継のDeniteとvimfiler後継のdefxがあるのですが、どちらもPythonで実装されたRemote Pluginなので依存が大きくなってしまいます。

vimfilerと似たものを使いたいのであれば、同等の機能を目指して依存が小さくPure Vim scriptで実装されたFernがおすすめです。内部でPromiseを使っているので動作も軽快です。

https://github.com/lambdalisue/fern.vim

また、Node依存はありますがそもそもcoc.nvimに乗る前提であればcoc-explorerが比較的コスト低く導入可能です。

https://github.com/weirongxu/coc-explorer

やっぱり filler 経由からが良さそうですね。ありがとうございますmm

formatOnSave で prettier やりたい

prettierじゃないですが、coc-eslintの設定で "eslint.autoFixOnSave" があったので、eslintとintegrateさせる前提ならそれでやるのがよさそうです。

vimレベルの設定でいうと autocmd BufWritePre *.ts,*.tsx CocCommand prettier.formatFile で保存時にprettierを効かせることはできたんですが、CocCommandがasyncで走るので保存後にformatが走ってしまって、こちらはもうちょっと工夫する必要がありそうでした。

LSP経由でやるのがよさそうだなぁと薄々感じております

TSってLSPレベルでformat提供してないかと思ってたんですが、試してみたら :call CocAction('format') で整形できるみたいですね。(なんとなくtsserverじゃなくてcoc-eslintやcoc-prettierがサービスとして提供してる機能の予感がしますが・・・)
なので "coc.preferences.formatOnSaveFiletypes": ["typescript"] で自動整形設定できました。

多分 "coc.preferences.formatOnSaveFiletypes": ["typescript", "typescriptreact"] しておくといいかと思います。

LSPの規格自体にformatがあったはずで今どきの言語は大体対応していると思ってます。

あ、分かりにくくてすみません。
formatがあるの自体は知ってたんですが、tsserverがeslint, prettierとintegrateしてformatを実行するようにはなってなさそうって思ってたってことでした。

ちょっと試した感じ空気読んでくれそうなのでLSPに寄せるでよさそうですね。

coc の設定を設定ファイルでやること

ログインするとコメントできます