Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Neovim の設定を綺麗に整理してみた

$
0
0

はじめに

Neovim の設定を一年以上サボっていたので、久しぶりに整理しました。
Neovim を導入した当初は、他の方の設定ファイルをコピペしたものだったので、今回はしっかりドキュメントなどを見て設定しました。

やったこと

  • init.vim の設定
  • dein.vim の導入
  • Vim プラグインの導入
  • Vim プラグインごとの設定

環境

  • macOS Sierra: v10.12.6
  • Neovim: v0.3.0
  • Python2: v2.7.10
  • Python3: v3.7.0
  • Ruby: v2.4.4p296
  • Node.js: v10.6.0

設定ファイルだけ見たい方はこちら

GitHub に設定ファイルを共有しているので、設定ファイルだけ見たい方はそちらをご覧ください。

repository: https://github.com/tamago3keran/neovim-config/tree/master/plugins

久しぶりの Neovim 設定

なぜ .config ディレクトリ?

Neovim のドキュメントにも明記されていますが、 ~/.config/nvim/init.vimに設定を書きました。

  • Use $XDG_CONFIG_HOME/nvim/init.vim instead of .vimrc for configuration.
  • Use $XDG_CONFIG_HOME/nvim instead of .vim to store configuration files.

.configディレクトリ直下に設定ファイルを置くのは、 Neovim が XDG Base Directory Specification に対応しているからのようです。

  • XDG_CONFIG_HOME
    • ユーザー個別の設定が書き込まれるディレクトリ ( /etcと類似)。
    • デフォルトは $HOME/.configです。

init.vim の参考例

~/.config/nvim/init.vim
setnumber             "行番号を表示
set autoindent         "改行時に自動でインデントする
set tabstop=2          "タブを何文字の空白に変換するか
set shiftwidth=2       "自動インデント時に入力する空白の数
set expandtab          "タブ入力を空白に変換
set splitright         "画面を縦分割する際に右に開く
set clipboard=unnamed  "yankした文字列をクリップボードにコピー
set hls                "検索した文字をハイライトする

dein.vim でプラグイン管理

dein.vimは Shougo さんによって作成された Vim / Neovim のプラグインマネージャです。
このツールを使って、Vim プラグインの管理を簡潔にしました。

denite.vim の導入方法

dein.vimの導入方法も非常に簡単で、ドキュメント通りに行いました。

まずは以下のコマンドを実行しました。

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

コマンドを実行した後に init.vimに以下のコードを追記しました。

~/.config/nvim/init.vim
if&compatible
  set nocompatible
endifset runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vimif dein#load_state('~/.cache/dein')call dein#begin('~/.cache/dein')call dein#end()call dein#save_state()endiffiletype plugin indent on
syntax enable

これでプラグインを入れる準備は完了です!

プラグインの導入方法

いよいよ自分が好きなプラグインを入れていきます。
私は init.vimを膨らませたくなかったので、 toml ファイルに入れたいプラグインを書きました。

まずは init.vimに toml ファイルを読み込むコードを書きました。

~/.config/nvim/init.vim
 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#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
 filetype plugin indent on
 syntax enable

dein.tomldein_lazy.tomlという2つの toml ファイルを作成していますが、以下のような違いがあります。

  • dein.toml
    • Neovim を起動した際にロードされる
  • dein_lazy.toml
    • プラグインを使用する際にロードされる

では dein.tomlというファイルを作って、以下の書式でプラグイン名を書いていきます。

~/.config/nvim/dein.vim
[[plugins]]repo='Shougo/dein.vim'[[plugins]]repo='tpope/vim-endwise'[[plugins]]repo='Townk/vim-autoclose'[[plugins]]repo='joshdick/onedark.vim'hook_add='''colorschemeonedark'''[[plugins]]repo='w0rp/ale'[[plugins]]repo='airblade/vim-gitgutter'hook_add='''setsigncolumn=yessetupdatetime=1000nnoremap[gitgutter]<Nop>nmap<C-h>[gitgutter]nmap[gitgutter]j<Plug>GitGutterNextHunknmap[gitgutter]k<Plug>GitGutterPrevHunknmap[gitgutter]u<Plug>GitGutterUndoHunk'''[[plugins]]repo='tpope/vim-fugitive'hook_add='''commandGst:GstatuscommandGdf:GdiffcommandGbl:Gblame'''[[plugins]]repo='Shougo/denite.nvim'hook_add='''nnoremap[denite]<Nop>nmap<C-d>[denite]nnoremap<silent>[denite]g:<C-u>Denitegrep-buffer-name=search-buffer-denite<CR>nnoremap<silent>[denite]r:<C-u>Denite-resume-buffer-name=search-buffer-denite<CR>nnoremap<silent>[denite]p:<C-u>Denitefile_rec<CR>calldenite#custom#option('default', 'prompt', '>')calldenite#custom#option('_', 'highlight_matched_range', 'None')calldenite#custom#option('_', 'highlight_matched_char', 'None')calldenite#custom#map('insert', "<Tab>", '<denite:move_to_next_line>')calldenite#custom#map('insert', "<S-Tab>", '<denite:move_to_previous_line>')calldenite#custom#map('insert', "<C-t>", '<denite:do_action:tabopen>')calldenite#custom#map('insert', "<C-v>", '<denite:do_action:vsplit>')calldenite#custom#map('normal', "v", '<denite:do_action:vsplit>')calldenite#custom#var('grep', 'command', ['pt', '--follow', '--nogroup', '--nocolor', '--hidden'])calldenite#custom#var('grep', 'default_opts', [])calldenite#custom#var('grep', 'recursive_opts', [])calldenite#custom#var('file_rec', 'command', ['pt', '--follow', '--nocolor', '--nogroup', '--hidden', '-g', ''])'''[[plugins]]repo='osyo-manga/vim-anzu'hook_add='''nmapn<Plug>(anzu-n-with-echo)nmapN<Plug>(anzu-N-with-echo)nmap*<Plug>(anzu-star)nmap# <Plug>(anzu-sharp)'''

dein_lazy.tomlファイルにもプラグイン名を書きます。

~/.config/nvim/dein_lazy.toml
[[plugins]]repo='Shougo/deoplete.nvim'on_event='InsertEnter'hook_add='''letg:deoplete#enable_at_startup=1inoremap<expr><Tab>pumvisible()?"\<DOWN>":"\<Tab>"inoremap<expr><S-Tab>pumvisible()?"\<UP>":"\<S-Tab>"'''

最後に Vim を起動して、ノーマルモードで以下のコマンドを実行しました。このコマンドでプラグインが読み込まれました。

:call dein#install()

プラグインのインストールを自動化

Vim プラグインを入れる度にインストールのコマンドを実行するのは面倒なので、 新しく入れたプラグインがあれば、Vim 起動時に自動でインストールするようにしました。

~/.config/nvim/init.vim
  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#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

プラグインごとに設定ファイルを分ける

プラグインごとにキーマップなどの設定を書いていくと、上記の dein.tomlのように見づらくなってしまいました。
そこで設定ファイルをプラグインごとに分けて書く方法をとりました。

まずは dein.tomldein_lazy.tomlを修正しました。

~/.config/nvim/dein.vim
  [[plugins]]
  repo = 'Shougo/dein.vim'

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

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

  [[plugins]]
  repo = 'joshdick/onedark.vim'
  hook_add = '''
    colorscheme onedark
  '''

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

  [[plugins]]
  repo = 'airblade/vim-gitgutter'
  hook_add = '''
-   set signcolumn=yes
-   set updatetime=1000
-   nnoremap [gitgutter] <Nop>
-   nmap <C-h> [gitgutter]
-   nmap [gitgutter]j <Plug>GitGutterNextHunk
-   nmap [gitgutter]k <Plug>GitGutterPrevHunk
-   nmap [gitgutter]u <Plug>GitGutterUndoHunk
+   source ~/.config/nvim/plugins/gitgutter.vim
  '''

  [[plugins]]
  repo = 'tpope/vim-fugitive'
  hook_add = '''
-   command Gst :Gstatus
-   command Gdf :Gdiff
-   command Gbl :Gblame
+   source ~/.config/nvim/plugins/fugitive.vim
  '''

  [[plugins]]
  repo = 'Shougo/denite.nvim'
  hook_add = '''
-   nnoremap [denite] <Nop>
-   nmap <C-d> [denite]
-   nnoremap <silent> [denite]g :<C-u>Denite grep -buffer-name=search-buffer-denite<CR>
-   nnoremap <silent> [denite]r :<C-u>Denite -resume -buffer-name=search-buffer-denite<CR>
-   nnoremap <silent> [denite]p :<C-u>Denite file_rec<CR>
-   call denite#custom#option('default', 'prompt', '>')
-   call denite#custom#option('_', 'highlight_matched_range', 'None')
-   call denite#custom#option('_', 'highlight_matched_char', 'None')
-   call denite#custom#map('insert', "<Tab>", '<denite:move_to_next_line>')
-   call denite#custom#map('insert', "<S-Tab>", '<denite:move_to_previous_line>')
-   call denite#custom#map('insert', "<C-t>", '<denite:do_action:tabopen>')
-   call denite#custom#map('insert', "<C-v>", '<denite:do_action:vsplit>')
-   call denite#custom#map('normal', "v", '<denite:do_action:vsplit>')
-   call denite#custom#var('grep', 'command', ['pt', '--follow', '--nogroup', '--nocolor', '--hidden'])
-   call denite#custom#var('grep', 'default_opts', [])
-   call denite#custom#var('grep', 'recursive_opts', [])
-   call denite#custom#var('file_rec', 'command', ['pt', '--follow', '--nocolor', '--nogroup', '--hidden', '-g', ''])
+   source ~/.config/nvim/plugins/denite.vim
  '''

  [[plugins]]
  repo = 'osyo-manga/vim-anzu'
  hook_add = '''
-   nmap n <Plug>(anzu-n-with-echo)
-   nmap N <Plug>(anzu-N-with-echo)
-   nmap * <Plug>(anzu-star)
-   nmap # <Plug>(anzu-sharp)
+   source ~/.config/nvim/plugins/anzu.vim
  '''
~/.config/nvim/dein_lazy.toml
  [[plugins]]
  repo = 'Shougo/deoplete.nvim'
  on_event = 'InsertEnter'
  hook_add = '''
-   let g:deoplete#enable_at_startup = 1
-   inoremap <expr><Tab> pumvisible() ? "\<DOWN>" : "\<Tab>"
-   inoremap <expr><S-Tab> pumvisible() ? "\<UP>" : "\<S-Tab>"
+   source ~/.config/nvim/plugins/deoplete.vim
  '''

次にプラグインごとの設定ファイルを作成しました。

~/.config/nvim/plugins/anzu.vim
nmap n<Plug>(anzu-n-with-echo)
nmap N <Plug>(anzu-N-with-echo)
nmap * <Plug>(anzu-star)
nmap # <Plug>(anzu-sharp)
~/.config/nvim/plugins/denite.vim
nnoremap [denite]<Nop>
nmap <C-d>[denite]
nnoremap <silent>[denite]g:<C-u>Denite grep-buffer-name=search-buffer-denite<CR>
nnoremap <silent>[denite]r:<C-u>Denite -resume -buffer-name=search-buffer-denite<CR>
nnoremap <silent>[denite]p:<C-u>Denite file_rec<CR>call denite#custom#option('default','prompt','>')call denite#custom#option('_','highlight_matched_range','None')call denite#custom#option('_','highlight_matched_char','None')call denite#custom#map('insert',"<Tab>",'<denite:move_to_next_line>')call denite#custom#map('insert',"<S-Tab>",'<denite:move_to_previous_line>')call denite#custom#map('insert',"<C-t>",'<denite:do_action:tabopen>')call denite#custom#map('insert',"<C-v>",'<denite:do_action:vsplit>')call denite#custom#map('normal',"v",'<denite:do_action:vsplit>')call denite#custom#var('grep','command',['pt','--follow','--nogroup','--nocolor','--hidden'])call denite#custom#var('grep','default_opts',[])call denite#custom#var('grep','recursive_opts',[])call denite#custom#var('file_rec','command',['pt','--follow','--nocolor','--nogroup','--hidden','-g',''])
~/.config/nvim/plugins/deoplete.vim
letg:deoplete#enable_at_startup =1
inoremap <expr><Tab> pumvisible() ? "\<DOWN>":"\<Tab>"
inoremap <expr><S-Tab> pumvisible() ? "\<UP>":"\<S-Tab>"
~/.config/nvim/plugins/fugitive.vim
command Gst :Gstatus
command Gdf :Gdiff
command Gbl :Gblame
~/.config/nvim/plugins/gitgutter.vim
set signcolumn=yes
set updatetime=1000

nnoremap [gitgutter]<Nop>
nmap <C-h>[gitgutter]
nmap [gitgutter]j<Plug>GitGutterNextHunk
nmap [gitgutter]k<Plug>GitGutterPrevHunk
nmap [gitgutter]u<Plug>GitGutterUndoHunk

これでだいぶ見やすくなりました!
Neovim を使ってみたいという方は、ぜひ参考にしてください!

次回は私が現在使用しているプラグインの紹介と使い方についてまとめてみます!

注意: 私は denite.vim の file_recgrepthe_platinum_searcherというツールを使用しているので、そちらのインストールもよろしくお願いします


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>