この記事はあくあたん工房 クリスマスアドベントカレンダー2020の6日目の記事として書かれたものです。
はじめに
Neovim/Vimを使い始めて1年半程、自分が求める操作感や機能などを追加してきました。
いい感じにNeovim/Vim環境が出来上がってきたので、dotfilesと使用しているプラグインの紹介をしてみたいと思います。
環境
PC | ASUS ZenBook UX303LN
OS | Arch Linux x86_64
Kernel | 5.9.9-arch1-1
vim | 8.2.1989
neovim | 0.4.4
Neovim/Vim
C言語でCUnitを使っていい感じにテストをする方法の記事を書くためにC言語でプログラムを書いていた様子ですが、こんな感じで使ってます。
普段使いにはNeovimを使っていますが、一部Vimの方が使いやすいプラグインがあるので、それを使いたいときだけVimを使い分けています。
dotfiles
僕が使っているNeovim/Vim用のdotfilesはGitHubに乗せてあるので気になったら見てみてください。
Vim
Neovim
Arch Linuxでclipboardを使う方法
$ sudo pacman -S vim
でインストールできるVimではclipboardに対応していません。
そこで、extra/vimの代わりに、extra/gvimを使うようにすればよい。
$ sudo pacman -S gvim
vimrc, init.vim
中身のほとんどはよく見る設定だと思う。
1つ触れておくことがあるとすれば、LaTeXのアンダーバーの扱いをいい感じにして、間違ったエラー表示をしないようにする設定を用意していること。
LaTeXで、図表や数式のrefとして、reffig、 reftab、refsec、 refeqnなどを用意している人は書いておくと良いかもしれない。
Vim の ft-tex-syntax で \reffig も \ref と同様にハイライトする方法
Neovim向けPython仮想環境
Neovim用のPython仮想環境を用意してそれを使うようにしています。
例えば、Python2.7.18の仮想環境をneovim2、Python3.8.5の仮想環境をneovim3という名前で作成してそのパスを指定しておきます。
let g:python_host_prog = '/home/hiroya/.config/nvim/neovim2/bin/python'
let g:python3_host_prog = '/home/hiroya/.config/nvim/neovim3/bin/python'
プラグイン
ここからは、僕が使っているプラグインを列挙していきます。
Shougo/dein.vim
Neovim/Vim用プラグインマネージャ
ayu-theme/ayu-vim
Neovim/Vimのカラーテーマ
僕は、darkのカラーテーマが好き
vim-airline/vim-airline
ステータス表示、バッファのタブ表示をかっこよくしてくれるしてくれるやつ
vim-airline/vim-airline-themes
vim-airlineのカラーテーマ
vim-airlineを使うなら、これを使って好きなテーマに設定すると良い
僕は、Neovim/Vimのカラーテーマと合わせて、ayuのカラーテーマを使っている
junegunn/fzf.vim
開きたいファイル名、バッファ名などをあいまい検索できるツール
ファイルの中身をプレビューしながら見ることもできるのでわかりやすい
tpope/vim-fugitive
Vim上からGitの操作ができるやつ
これを入れる前は、Vimで編集したらCtrl+Z
で抜けてgit commitしてfgしてVimに戻ってくる、という感じに使っていたけど
これだと、Vimから抜ける必要がないのでとても楽
airblade/vim-gitgutter
ファイルの差分を行番号の左側に表示してくれるやつ
stageする機能もあるようだが、僕は表示をするためにしか使っていない
cohama/lexima.vim
括弧を入力したときに、自動的に閉じ括弧を挿入してくれるやつ
閉じ括弧忘れのシンタックスエラーは頻繁に起こるので、入れておくとミスは少なくできる
括弧の中で改行した時のインデントも自動でつけてくれる
tpope/vim-surround
括弧などの囲みに対する操作ができるようになるやつ
gif画像では、
- "で囲まれた部分の"を消す
- 選択範囲を"で囲む
- "で囲まれた部分の中身を消す
- "で囲んでいた部分を'で囲むようにする
という操作をしている。
junegunn/rainbow_parentheses.vim
括弧に色を付けるやつ
括弧の対応が分かりやすくなるので、閉じ括弧忘れのミスが減る
simeji/winresizer
分割された画面のサイズを簡単に変更できるようにするやつ
neoclide/coc.nvim
Make your Vim/Neovim as smart as VSCode.
最強。
Neovim/Vimで各言語のLSPを使う設定って結構ややこしいことが多い。
けど、coc.nvimはそこらへんを全部やってくれる
coc向けextentions
大体の言語のextentionが用意されているので、それを使うだけ。
実は、VSCode向けのextentionを利用しているらしい。おかげで、非常に安定しているし、設定ファイルの記述方法もVSCodeとほぼ変わらないことが多い。
とりあえず、coc-explorerと、 coc-snippetsを入れておいて、後は好きな言語のextentionを入れていけばいいと思う。
- coc-clangd … C/C++/Objective-C
- coc-python …Python
- coc-rust-analyzer …Rust
- coc-texlab … LaTeX
coc-explorer
coc-snippets
liuchengxu/vista.vim
coc-nvimと連携して、定義されているマクロ、関数、変数といったシンボルを表示、シンボルへ移動ができる
tyru/caw.vim
VSCodeにあるCtrl+/
でコメントの切り替えができるようにするやつ
ファイルタイプからコメントの記述方法を推測しているが、ほとんどのファイルタイプに対応している。
僕は、Ctrl+\
に割り当てている。
puremourning/vimspector
Neovim/Vimでデバッガを起動するやつ
VSCode用のデバッグアダプタであるdebugpy、 vscode-cpptools、CodeLLDBなどを、利用したい言語に合わせてダウンロードして利用している。
なので、VSCodeでデバッグできるならVimspectorでもデバッグできる(はず)。
これはNeovimじゃなくて、Vimで使うようにした方が本領発揮できる。
なぜなら、Vimspectorでは以下の機能を利用するが、Neovimには実装されていないからである。
これらの機能を使って提供されている部分が使えないだけなので、Neovimでも使えることには使える。
- Winbar
- プロンプトバッファ
- バルーン
おまけ
ここからはNeovim/Vimの話から逸れて、ターミナルとかツールの話に触れさせてください。
直接関係はしないけど、知っておくとNeovim/Vimを触るのが楽しくなると思います。
軽量ターミナル
ちょっとファイル編集したいなって思った時に、ターミナルの起動がちょっとだけでも早ければ体感の快適さは向上すると思っています。
rxvt-unicode
urxvt こと rxvt-unicode を使うことのメモ
今までは、rxvt-unicodeというターミナルを使っていました。
これは、デーモンを作っておいて、そこからクライアントを起動するのでメモリ使用量を少なく、爆速で起動できる点が優れています。
すぽぽぽぽって出てくるととても爽快。
ただ、
- True Colorに対応していない
- 絵文字を上手く表示できなときがある
- Noto Color Emojiは一切表示できない
っていう、問題があります。例えば、こんな感じ。
これらは、有志によりパッチが当てられたものがあります。
- 「True Colorに対応していない」については、rxvt-unicode-truecolor 9.22-7だが、絵文字は上手く表示出来ないときがある。
- 「絵文字が上手く表示できない」についてはrxvt-unicode-wcwidthcallback 9.22-4だが、True Colorに対応してなかったり、日本語フォントが汚かったりする。
が、残念ながら、今の所、どちらにも対応したパッチは見つけられませんでした。
絵文字なんかいらないぜって人にはrxvt-unicode-truecolor 9.22-7が良いと思うし、数ヶ月僕はこれを使っていました。
Alacritty
今はこれを使っています。
AlacrittyはRust製の爆速ターミナルで、GPUでレンダリングするので早いのが特徴。
十分すぎるくらいに早いし、rxvt-unicodeで挙げた問題は無いし、細かい設定も一切いらない。
ただし、日本語のインライン入力ができないという問題点があります。
変換前や変換中には表示されなくて、Enterで確定した時点でようやく表示されるのですが、それさえ気にならなければいいと思います。
C/C++向けプロジェクトで合わせて使うと良さそうなやつ
compiledb
C/C++向けプロジェクトにおいて、
- Makefileを作ってる
- C/C++向けのLSPとしてclangdを使っている時(coc.nvimでclangdのextentionを入れているなど)
の時は、compiledbを合わせて使うと幸せになれると思う。
ライブラリのリンクなど、Makefileに書いてあるものを利用して、clangd用設定ファイル(compile_command.json)を生成してくれるので、リアルタイムにエラー出力をしてくれるようになります。
.clang-format
coc.nvimとclangdを使えば、ファイル保存時に自動でフォーマットしてくれるようにもできます。
その際にどのようにフォーマットするかを.clang-format
に記述します。
僕はとりあえずこれぐらいの設定を書いています。
BasedOnStyle: Google
ColumnLimit: 0
IndentWidth: 4
Language: Cpp
Standard: Cpp11
TabWidth: 4
UseTab: Never
透明化
記事のトップに載せているスクリーンショットのように、Neovim/Vimを透明化させるのが好きです。
今は、コンポジットマネージャのpicomを使ってターミナル自体を透明化させています。
なので、背景だけではなく、文字も若干半透明になっているが、特に気にならないのでこのまま運用しています。
おわりに
1年半前は、【Vim初心者】Vimを整えたいんだが、何からすればええんや?とか言ってたのですが、とうとうこの領域まで来たか、と感じています。
とても扱いやすく仕上がってきたのですが、これは、いろんな方が記事をまとめてくれているおかげです。感謝しかありません。
オリジナルの記述はほとんど無いので、今回は僕が使っているプラグインをまとめてみました。
次、Neovim/Vimネタを書くときは自分でスクリプト書いていい感じにしたときだと思います。
挑戦してみたいと思います。