【neovim】Neovimのすゝめ

みなさんテキストエディタは何を使用していますか?
私は過去に atom => sublime text 3 => vscode と浮気をしまくってきたのですが、どうにかこうにかvimに落ち着きそうです。
そこで今回は皆様にvimの素晴らしさをお伝えしたいと思っております。

macでbrewが入っていることを前提にお話します。
CentOSとかDebianならbrewyumとかapt-getとかに脳内変換をお願いいたします。

neovimを入れる

まずはneovimを入れましょう。

$ brew install neovim

neovimはプラグイン によってはpythonやNodeと連携して素敵な処理を行ってくれます。
なので、NodeとPythonを入れておきましょう。
余談ですがbrew install pythonで3系が入るようになったんですね。

# nodeをインストール
$ brew install node
# python3をインストール
$ brew install python

あとはnodeおよびpythonのneovimパッケージをインストールしておきます。
pythonの方はpynvimなのでお気をつけを。

# nodeのneovimパッケージ
$ npm install -g neovim
# python3のneovimパッケージ
$ pip3 install pynvim

下ごしらえはこの程度ですね。

設定ファイルを作成する

neovimはXDG Base Directory Specificationを使用しています。
超ウルトラ大雑把に言えば設定ファイルを ~/.config/アプリ名/の中に入れましょうみたいな感じです。
この時の~/.configのことをXDG_BASE_HOMEと呼びます。
環境変数として保存するためにbash_profileやらzshenvやらに
export XDG_BASE_HOME='~/.config'を記載しておきましょう。

本命のneovimの設定ファイルは$XDG_BASE_HOME/nvim/init.vimになります。
まずはこいつを作成します。

syntax on
set t_Co=256

set autoindent
set smartindent
set expandtab
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,utf-8,ucs-2,cp932,sjis
set tabstop=2
set shiftwidth=2
set cursorline
set number
set showmode
set showmatch
set title
set backspace=indent,eol,start
set inccommand=split
set imdisable
set hidden
set nobackup
set nowritebackup
set conceallevel=0
" htmlのマッチするタグに%でジャンプ
source $VIMRUNTIME/macros/matchit.vim

hi Comment ctermfg=gray

if has('mouse')
  set mouse=a
endif

"dein Scripts-----------------------------
if &compatible
  set nocompatible               " Be iMproved
endif
set runtimepath+=~/.config/nvim/dein/repos/github.com/Shougo/dein.vim
if dein#load_state('~/.config/nvim/dein')
  call dein#begin('~/.config/nvim/dein')

  call dein#load_toml('~/.config/nvim/dein.toml', {'lazy': 0})

  call dein#end()
  call dein#save_state()
endif
filetype plugin indent on
syntax enable

" If you want to install not installed plugins on startup.
if dein#check_install()
  call dein#install()
endif
"End dein Scripts-------------------------

vimの面白さはこの設定ファイルは地道に育てていくことにあります。
自分好みのキーバインドとかを設定してあげてくださいね。
上の設定はスーパーミニマムです。私もこの状態からスタートしました。
今ではIDEに引けを取らないほどに成長しています。

プラグイン管理はdein.vim

Shougoさん(暗黒美夢王)というvimのエキスパートの日本人が作っているプラグインマネージャーです。
この人はvimをとことんまで理解している凄いお方なのです。
中二病を患っているのもお茶目で素敵です。

https://github.com/Shougo/dein.vim
こちらにインストール方法が書かれています。
プラグインは~/.cache/deinにインストールされる設定になっています。
私は色々とっ散らかるのが嫌いなので、全て~/.config/nvim/deinの中に入れたいと思うので

curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
# For example, we just use `~/.cache/dein` as installation directory
sh ./installer.sh ~/.cache/dein

~/.cache/dein~/.config/nvim/deinに変更します。

curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
sh ./installer.sh ~/.config/nvim/dein

先ほどのinit.vim~/.config/nvim/deinに合わせた設定になっています。
公式が~/.cache/deinって言ってるんだからそこにインストールしたいという方はinit.vimの方も修正してあげてください。

入れたいプラグインは~/.config/nvim/dein.tomlに記述します。

[[plugins]]
repo = 'Shougo/dein.vim'

ミニマムだとこれだけです。
このファイルも育てていくファイルです。ありったけの愛を持って可愛がってあげましょう。

nvimを標準にする。

通常neovimはnvimコマンドで起動します。
でもvimって打ってもneovimが起動して欲しいもんですよね。
そこで~/.zshrcなり~/.bashrc

alias vim='nvim'

を入れておきましょう。
これでvimnvimが起動します。
あとinit.vimdein.tomlは最初のうちは頻繁に編集しますので、

alias vimcf='vim ~/.config/nvim'

としておくと、vimcfでnvimディレクトリ配下のファイルの編集が行えます。
またも余談ですが最近bashからzshに変更してみました。変更してからシェルスクリプトを作成していないのでまだ恩恵がわかりませんが、近々zshの機能にも触れていきたいと思います。

これは入れるべきプラグイン

これは入れるべきだというプラグイン をご紹介します。
私自身は

  • html,css
  • javascript(nodeも)
  • php
  • go
  • bash(zsh)

をよく使うので、それに合わせたプラグイン となります。それでは行ってみよう。

  • Shougo/deoplete.nvim
    • dein.vimのShougoさんの非同期の補完を行うフレームワークです。
  • Shougo/neosnippet.vim
  • Shougo/neosnippet-snippets
    • これまたShougoさんのプラグイン たちで、deopleteと連携してスニペットの入力をサポートしてくれます。
  • othree/html5.vim
  • hail2u/vim-css3-syntax
  • othree/yajs.vim
    • html5、css3、jsのシンタックスハイライトです。
  • mattn/emmet-vim
    • みんな大好きemmetです。キーバインドは,,で展開するようにすると便利ですよ。
  • tpope/vim-commentary
    • gccでカーソル行のコメントのトグルができます。
      visual-lineモードで複数行をgcで一気にコメントのトグルもできます。
  • tpope/vim-surround
    • cs"'でダブルクォーテーション囲いをシングルクォーテーション囲いに変更できたりと囲い系の操作が色々できます。
  • scrooloose/nerdtree
  • jistr/vim-nerdtree-tabs
    • スーパー便利なファイルツリーを表示してくれます。
      jistr/vim-nerdtree-tabsは全てのタブで共通のnerdtreeが使えるやつです。
  • mg979/vim-visual-multi
    • 今時のエディタには標準でついているマルチカーソル機能です。
      たくさん機能があるようでこれはおすすめです。
  • cohama/lexima.vim
    • 閉じかっこを自動で入力してくれるやつです。
  • w0rp/ale
    • 非同期でlinterをかけたりfixしたりするフレームワークです。
      別途eslintや各種eslintのプラグイン のインストールが必要です。
  • neoclide/coc.nvim
    • deopleteとはまた違った補完のやつです。
      めちゃ高機能でおすすめです
  • prettier/vim-prettier
    • prettier公式のvimプラグイン です。コード整形はこいつに任せてます。別途prettierやprettierのプラグイン のインストールが必要です。
      最近はphpも整形してくれて助かる。
  • fatih/vim-go
    • vimでgo書く時のオールインワンプラグイン 。
      vim内でgo runとかまでできちゃうよ。

とまぁとりあえずこんな感じです!
ほかにも色々入っているんですが全部紹介していたらキリがないので。。。

設定ファイルはgitで管理しよう

せっかく育てた設定ファイルたちをリモート環境とかでも使用したいですよね?
そのために~/.config/nvimgitで管理してあげましょう。
その際には.gitignore~/.config/nvim/deinを除外しておきましょう。
init.vimdein.tomlさえあればdein.vimが自動で持ってきてくれます。

私はneovimのインストールからnodepythonのneovimパッケージのインストール。環境変数の設定。~/.config/nvimgit cloneまでを自動で行ってくれるshellスクリプトを書いてgitリポジトリに上げています。
curlをshにパイプするだけで快適neovim環境がお手軽に手に入りますので、おすすめですよ。

とは言え私もまだまだ駆け出しvimmerです。
みなさんも楽しい楽しいvimの世界に足を踏み入れてみては?