賢くなりたいトイプードルの日記

データサイエンス系の話をメインにしていきます

vim初心者のためのNeoVim導入方法

そもそもvimをそんなに触ったことのない自分が、いろいろとエディタについて調べたらvimはオワコンなのでNeoVimを使ったほうが良いと開発者が言っているらしいことを知った。さらにNeoBundleよりdeinやdein_lazyを使ったほうがパフォーマンスが良いらしい。

そんな感じでNeoVimを導入しようとしたけどdeinを導入することになったのでここに残しておくことにした。

NeoVim環境構築

とりあえず以下のようにすればそこそこのNeoVimを使えるようになる。

dein.tomlにプラグインを書けば、nvimコマンドを使った時に自動でダウンロードしてくれるので簡単。

$ brew install neovim

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

$ sh ./installer.sh ~/.cache/dein

自分の環境ではなぜか.config/nvim/init.vimが作成されなかったので、作ってからvimで編集

$ mkdir ~/.config/nvim

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

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

~/.config/nvim/init.vimに以下を記述。

set number              "行番号を表示
set autoindent          "改行時に自動でインデントする
set tabstop=2           "タブを何文字の空白に変換するか
set shiftwidth=2        "自動インデント時に入力する空白の数
set expandtab           "タブ入力を空白に変換
set splitright          "画面を縦分割する際に右に開く
set clipboard+=unnamed  "ヤンクしたらクリップボードにコピー<Paste>
set hls                                 "検索した文字をハイライトする"
set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim

 " undoを編集前に戻せるように設定
if has('persistent_undo')
  set undodir=~/.config/nvim/undo
  set undofile
endif

 " Shift + h,j,k,lで移動距離10倍
nnoremap <S-k> 10<UP>
nnoremap <S-j> 10<DOWN>
nnoremap <S-h> 10<LEFT>
nnoremap <S-l> 10<RIGHT>

vnoremap <S-k> 10<UP>
vnoremap <S-j> 10<DOWN>
vnoremap <S-h> 10<LEFT>
vnoremap <S-l> 10<RIGHT>

if &compatible
  set nocompatible
endif
if dein#load_state('~/.cache/dein')
  call dein#begin('~/.cache/dein')
  call dein#load_toml('~/.config/nvim/dein.toml', {'lazy': 0})
  call dein#load_toml('~/.config/nvim/dein_lazy.toml', {'lazy': 1})
  call dein#end()
  call dein#save_state()
endif
if dein#check_install()
  call dein#install()
endif
filetype plugin indent on
syntax enable

:command UP UpdateRemotePlugins

dein.tomlを作ってvimで編集

$ touch ~/.config/nvim/dein.toml

$ vim ~/.config/nvim/dein.toml

~/.config/nvim/dein.tomlに以下を記述

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


[[plugins]]
repo = "vim-scripts/grep.vim"
hook_add = '''
source ~/.config/nvim/plugins/grep.vim
'''

[[plugins]]
repo = "ctrlpvim/ctrlp.vim"
hook_add = '''
source ~/.config/nvim/plugins/ctrlp.vim
'''

[[plugins]]
repo = 'scrooloose/nerdtree'
hook_add = '''
source ~/.config/nvim/plugins/nerdtree.vim
'''

[[plugins]]
repo = 'tpope/vim-endwise'

[[plugins]]
repo = 'Townk/vim-autoclose'

[[plugins]]
repo = 'cocopon/iceberg.vim'
hook_add = '''
source ~/.config/nvim/plugins/color_iceberg.vim
'''

[[plugins]]
repo = 'w0rp/ale'

[[plugins]]
repo = 'airblade/vim-gitgutter'
hook_add = '''
source ~/.config/nvim/plugins/gitgutter.vim
'''

[[plugins]]
repo = 'tpope/vim-fugitive'
hook_add = '''
source ~/.config/nvim/plugins/fugitive.vim
'''

[[plugins]]
repo = 'Shougo/denite.nvim'
hook_add = '''
source ~/.config/nvim/plugins/denite.vim
'''

[[plugins]]
repo = 'osyo-manga/vim-anzu'
hook_add = '''
source ~/.config/nvim/plugins/anzu.vim
'''

dein_lazyを作ってvimで編集

$ touch ~/.config/nvim/dein_lazy.toml

$ vim ~/.config/nvim/dein_lazy.toml

~/.config/nvim/dein_lazy.tomlに以下を記述

[[plugins]]
repo = 'Shougo/deoplete.nvim'
on_event = 'InsertEnter'
hook_add = '''
source ~/.config/nvim/plugins/deoplete.vim
'''

$ nvim .

でnvimを開いたら、インストールするか聞かれるのでreturnを押して完了。

そしてプラグイン用のファイルを作り、カスタマイズの内容を書く。たとえばnerdtreeの場合は以下のようにする

$ mkdir ~/.config/nvim/plugins 

$ touch ~/.config/nvim/plugins/nerdtree.vim 

$ vim ~/.config/nvim/plugins/nerdtree.vim
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
let g:NERDTreeShowHidden=1
nnoremap <silent><C-t> :NERDTreeToggle<CR>

全部のプラグインでやると以下のようになった。

$ cd ~/.config/nvim/plugins
$ touch anzu.vim color_iceberg.vim denite.vim ctrlp.vim denite.vim deoplete.vim fugitive.vim gitgutter.vim grep.vim
$ ls ~/.config/nvim/plugins/
anzu.vim           color_iceberg.vim  ctrlp.vim          denite.vim         deoplete.vim       fugitive.vim       gitgutter.vim      grep.vim           nerdtree.vim 

整理整頓がしやすい気がします。

vimの使いかたについてはhttps://hi-algorithm.com/vim-command/を参照