29
33

More than 3 years have passed since last update.

僕のNeovim/Vim環境周りについて

Posted at

この記事はあくあたん工房 クリスマスアドベントカレンダー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

image.png (1.4 MB)

C言語でCUnitを使っていい感じにテストをする方法の記事を書くためにC言語でプログラムを書いていた様子ですが、こんな感じで使ってます。
普段使いにはNeovimを使っていますが、一部Vimの方が使いやすいプラグインがあるので、それを使いたいときだけVimを使い分けています。

dotfiles

僕が使っているNeovim/Vim用のdotfilesはGitHubに乗せてあるので気になったら見てみてください。

Vim

vimrc
.config/vim

Neovim

.config/nvim

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という名前で作成してそのパスを指定しておきます。

init.vim
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のカラーテーマが好き

image.png (415.2 kB)

vim-airline/vim-airline

ステータス表示、バッファのタブ表示をかっこよくしてくれるしてくれるやつ

68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f3330363530322f313037323632332f34346332393261302d313439352d313165332d396365362d6463616461336631633533362e676966.gif (148.6 kB)

vim-airline/vim-airline-themes

vim-airlineのカラーテーマ
vim-airlineを使うなら、これを使って好きなテーマに設定すると良い
僕は、Neovim/Vimのカラーテーマと合わせて、ayuのカラーテーマを使っている

junegunn/fzf.vim

開きたいファイル名、バッファ名などをあいまい検索できるツール
ファイルの中身をプレビューしながら見ることもできるのでわかりやすい

image.png (2.2 MB)

tpope/vim-fugitive

Vim上からGitの操作ができるやつ
これを入れる前は、Vimで編集したらCtrl+Zで抜けてgit commitしてfgしてVimに戻ってくる、という感じに使っていたけど
これだと、Vimから抜ける必要がないのでとても楽

image.png (2.3 MB)

airblade/vim-gitgutter

ファイルの差分を行番号の左側に表示してくれるやつ
stageする機能もあるようだが、僕は表示をするためにしか使っていない

image.png (577.7 kB)

cohama/lexima.vim

括弧を入力したときに、自動的に閉じ括弧を挿入してくれるやつ
閉じ括弧忘れのシンタックスエラーは頻繁に起こるので、入れておくとミスは少なくできる
括弧の中で改行した時のインデントも自動でつけてくれる

output2.gif (2.6 MB)

tpope/vim-surround

括弧などの囲みに対する操作ができるようになるやつ
gif画像では、

  • "で囲まれた部分の"を消す
  • 選択範囲を"で囲む
  • "で囲まれた部分の中身を消す
  • "で囲んでいた部分を'で囲むようにする

という操作をしている。

output3.gif (3.0 MB)

junegunn/rainbow_parentheses.vim

括弧に色を付けるやつ
括弧の対応が分かりやすくなるので、閉じ括弧忘れのミスが減る

image.png (667.2 kB)

simeji/winresizer

分割された画面のサイズを簡単に変更できるようにするやつ

68747470733a2f2f7261772e6769746875622e636f6d2f77696b692f73696d656a692f77696e726573697a65722f696d616765732f64656d6f2d666f722d7465726d696e616c2e676966.gif (2.0 MB)

neoclide/coc.nvim

Make your Vim/Neovim as smart as VSCode.
最強。
Neovim/Vimで各言語のLSPを使う設定って結構ややこしいことが多い。
けど、coc.nvimはそこらへんを全部やってくれる

coc向けextentions

Implemented coc extensions

大体の言語のextentionが用意されているので、それを使うだけ。

実は、VSCode向けのextentionを利用しているらしい。おかげで、非常に安定しているし、設定ファイルの記述方法もVSCodeとほぼ変わらないことが多い。
とりあえず、coc-explorerと、 coc-snippetsを入れておいて、後は好きな言語のextentionを入れていけばいいと思う。

coc-explorer

エクスプローラー
image.png (101.4 kB)

coc-snippets

スニペットを作成して使用できるようにするやつ
54837017-62891300-4d00-11e9-9e53-49742a1a33f2.gif (46.1 kB)

liuchengxu/vista.vim

coc-nvimと連携して、定義されているマクロ、関数、変数といったシンボルを表示、シンボルへ移動ができる
56469894-14d40780-6472-11e9-802f-729ac53bd4d5.gif (7.4 MB)

tyru/caw.vim

VSCodeにあるCtrl+/でコメントの切り替えができるようにするやつ
ファイルタイプからコメントの記述方法を推測しているが、ほとんどのファイルタイプに対応している。

僕は、Ctrl+\に割り当てている。

output4.gif (1.1 MB)

puremourning/vimspector

Neovim/Vimでデバッガを起動するやつ
VSCode用のデバッグアダプタであるdebugpy、 vscode-cpptools、CodeLLDBなどを、利用したい言語に合わせてダウンロードして利用している。
なので、VSCodeでデバッグできるならVimspectorでもデバッグできる(はず)。
image.png (787.0 kB)

これはNeovimじゃなくて、Vimで使うようにした方が本領発揮できる。
なぜなら、Vimspectorでは以下の機能を利用するが、Neovimには実装されていないからである。
これらの機能を使って提供されている部分が使えないだけなので、Neovimでも使えることには使える。

  • Winbar
  • プロンプトバッファ
  • バルーン

おまけ

ここからはNeovim/Vimの話から逸れて、ターミナルとかツールの話に触れさせてください。
直接関係はしないけど、知っておくとNeovim/Vimを触るのが楽しくなると思います。

軽量ターミナル

ちょっとファイル編集したいなって思った時に、ターミナルの起動がちょっとだけでも早ければ体感の快適さは向上すると思っています。

rxvt-unicode

urxvt こと rxvt-unicode を使うことのメモ
今までは、rxvt-unicodeというターミナルを使っていました。
これは、デーモンを作っておいて、そこからクライアントを起動するのでメモリ使用量を少なく、爆速で起動できる点が優れています。
すぽぽぽぽって出てくるととても爽快。

output.gif (7.1 MB)

ただ、
- True Colorに対応していない
- 絵文字を上手く表示できなときがある
- Noto Color Emojiは一切表示できない

っていう、問題があります。例えば、こんな感じ。

image.png (1.1 MB)

これらは、有志によりパッチが当てられたものがあります。

  • 「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に記述します。
僕はとりあえずこれぐらいの設定を書いています。

clang-format
BasedOnStyle:  Google

ColumnLimit: 0
IndentWidth: 4
Language: Cpp
Standard: Cpp11
TabWidth: 4
UseTab: Never

透明化

記事のトップに載せているスクリーンショットのように、Neovim/Vimを透明化させるのが好きです。
今は、コンポジットマネージャのpicomを使ってターミナル自体を透明化させています。
なので、背景だけではなく、文字も若干半透明になっているが、特に気にならないのでこのまま運用しています。

おわりに

1年半前は、【Vim初心者】Vimを整えたいんだが、何からすればええんや?とか言ってたのですが、とうとうこの領域まで来たか、と感じています。
とても扱いやすく仕上がってきたのですが、これは、いろんな方が記事をまとめてくれているおかげです。感謝しかありません。

オリジナルの記述はほとんど無いので、今回は僕が使っているプラグインをまとめてみました。
次、Neovim/Vimネタを書くときは自分でスクリプト書いていい感じにしたときだと思います。
挑戦してみたいと思います。

29
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
33