Linuxディストリビューションの多くが「Vim」をデフォルトエディタとしてインストールしているため、Vimを使っているユーザーは多いと思う。さらにVim好きのなかには、実装系としてVimではなく「Neovim」を使っている方もいるだろう。

Ubuntu 18.04 LTSで動作するNeovim

NoevimはVimよりもコードベースがスッキリしている。しかし、それでいてVimとの互換性は高く、Vim向けに開発されているプラグインはそのままNeovimでも使えることが多い。そのため、ユーザーとしてはたまに特定の機能の有無が気になることはあっても、普段エディタとしての違いはそれほど感じないはずだ。

Ubuntu 18.04 LTSでNeovimをインストールする方法

Neovimはパッケージ名が「neovim」になっていることが多く、コマンド名は「nvim」になっていることが多いように思う。前回、VimでPowerline風ステータスラインを実現する方法を紹介したが、今回はNeovimでPowerline風ステータスラインを実現する方法を取り上げておこうと思う。なお、Neovimはデフォルトではインストールされていないことが多い。以下のコマンドでパッケージ管理システム経由でインストールしていただきたい。

sudo apt install neovim

設定ファイル~/.config/nvim/init.vim

Neovimの設定ファイルは~/.config/nvim/init.vimだ。~/.config/というディレクトリは、ユーザーの設定ファイルを保持する目的のもので、「XDG Base Directory Specification」という仕様に従ったものである。従来、設定ファイルはホームディレクトリ直下に個別にデプロイされていたが、最近では「~/.config/ソフトウエア名/」のディレクトリ以下に配置するものが増えている。

Neovimの設定ファイルには、Vimの設定ファイルをほぼそのまま使用できる。ここでは前回取り上げたVimの設定ファイルとほぼ同じものを次に掲載しておく。

" users generic init.vim file for nvim(1)

" ----------------------------------------------------------------------
" Dein plug-ins management
" ----------------------------------------------------------------------
if &compatible
    set nocompatible
endif

set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim
if dein#load_state('~/.cache/dein/')
    call dein#begin('~/.cache/dein/')
    call dein#add('Shougo/dein.vim')
    call dein#add('Shougo/unite.vim')
    call dein#add('junegunn/seoul256.vim')
    call dein#add('vim-airline/vim-airline')
    call dein#add('vim-airline/vim-airline-themes')
    call dein#end()
    call dein#save_state()
endif

filetype plugin indent on

if dein#check_install()
    call dein#install()
endif

" unite
nnoremap <silent> <C-o> :<C-u>Unite file buffer<CR>
autocmd FileType unite nmap <silent><buffer> <ESC><ESC> q

" seoul256
let g:seoul256_background = 233
colo seoul256

" vim-airline
let g:airline_powerline_fonts = 1
let g:airline_theme = 'minimalist'
let g:airline_theme = 'tomorrow'
let g:airline_theme = 'molokai'

" ----------------------------------------------------------------------
" How to install Dein:
"   mkdir -p ~/.cache/dein
"   cd ~/.cache/dein/
"   curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
"   sh ./installer.sh .
"   rm ./installer.sh
" ----------------------------------------------------------------------

" disable mouse feature
set mouse=

set pastetoggle=<F2>

" allow some keys to move the cursor left/right to move to
" the previous/next line when the cursor is on the first/last
" character in the line.
"  b - [Backspace]  normal visual
"  s - [Space]      normal visual
"  < - [Left]       normal visual
"  > - [Right]      normal visual
"  [ - [Left]       insert replace
"  ] - [Right]      insert replace
"  ~ - ~            normal
set whichwrap=b,s,[,],<,>,~,h,l

set nohlsearch " non-highlight for search keyword<Paste>
set cursorline " use cursorline indicator

" line numbers on
set number

" incremental search and not case-sensitive on
set ignorecase

" use extended menu complementation feature
set wildmenu wildmode=list:full

" displayed line movement gj/gk as default instead of j/k
nnoremap k gk
nnoremap gk k
nnoremap j gj
nnoremap gj j

" tab jump
nmap <silent> <Tab> 15<Right>
vmap <silent> <Tab> <C-o>15<Right>
nmap <silent> <S-Tab> 15<Left>
vmap <silent> <S-Tab> <C-o>15<Left>

" for useful argdo mutli-files replaces
set hidden

" syntax highlight on
syntax enable

" laod some customized files: ~/.config/nvim/*.vim
let customvims = globpath(expand('~/.config/nvim'), "*.vim")
while strlen(customvims) > 0
    let i = stridx(customvims, "\n")
    if i < 0
        let f = customvims
        let customvims = ""
    else
        let f = strpart(customvims, 0, i)
        let customvims = strpart(customvims, i+1, 9999)
    endif
    if filereadable(f) &&
       \ f !~ '\s*/init.vim' &&
       \ f !~ '\s*/state_nvim.vim'
        exe 'source ' . f
    endif
    unlet f
    unlet i
endwhile
unlet customvims

" load user .nvimrc configuration file
if filereadable(expand('~/.nvimrc'))
    source ~/.nvimrc
endif

この設定ファイルにはプラグイン管理機能のセットアップ、Powerline風ステータスラインを実現するためのプラグインの設定と、そのほかいくつかのプラグイン設定が含まれている。

プラグイン管理「Dein」

Vimのときと同じように、Neovimでもプラグインの管理にはサードパーティ製のソフトウエアを使用する。もちろん手動でもできるし、自分の慣れたプラグイン機能を使ってもらってよいのだが、ここではVimのときと同じように「Dein」を使って管理する方法を説明しておこう。インストールコマンドは次の通りだ。

mkdir -p ~/.cache/dein
cd ~/.cache/dein/
curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
sh ./installer.sh .
rm ./installer.sh

この指定では、前回のVimと同じディレクトリにDeinをインストールしている。Dein経由でインストールされるほかのプラグインも同じディレクトリにインストールされることになる。プラグインは、VimとNeovimで共有しても問題ない。別のディレクトリで分けて管理したい場合には、Deinのインストール先と、「init.vim」で指定しているパスを別のディレクトリに変更すればよい。

最初の起動でプラグインを自動インストール

Neovimで使用するほかのプラグインは、設定ファイルを配置してから起動する最初の段階でまとめてインストールが実行される。次の画面は、設定ファイルをデプロイしてDeinをインストールした後、最初のNeovim起動した際の様子だ。

Neovimの初回起動時にプラグインをインストール中

しばらくすると、次のようにインストールの終了が告げられるので、「Enter」キーを押す。

プラグインのインストール完了

きちんと設定が機能していれば、次のようにPowerline風のステータスラインが表示される。同じプラグインを使っているので、表示はVimのときとほとんど同じになる。

Powerline風ステータスラインを表示するNeovim

Powerline風ステータスラインを表示するプラグインとして「vim-airline」を使っている。このプラグインは、モードに合わせてステータスラインの表示が変わる仕組みになっているので、次のように挿入モードに入るとステータスラインの表示が変化する。

モードごとにステータスラインの表示が変化する

ターミナルモードでも表示される

Vimのときと同様、NeovimでPowerline風ステータスライン表示を実現したからといって、編集効率や開発効率が上がるわけではないが、何となくカッコよくはなる。そもそもPowerlineの目的が”表示をクールにする”という点にあるので、これで少しでも作業のモチベーションが上がるのであればよいのではないだろうか。