【NeoVim】現在の NeoVim 設定。Ubuntu 17.04 環境。



現在の NeoVim 設定。Ubuntu 17.04 環境(x86_64)

  • init.vim 中心に記載。

$HOME/.config/nvim/init.vim

"---------------------------------
"[start]   Neko 基本的な設定
"---------------------------------
"
"{{{
""------------------------------------------------------------------------
" ウインドウの設定
"------------------------------------------------------------------------
set guicursor=a:blinkon0    " カーソルの点滅なし
set linespace=1             " 行間隔
set columns=180             " ウインドウ幅
set lines=57                " ウインドウ高
set cmdheight=2             " コマンドライン幅
if has("gui")
    winpos  200  10         " ウインドウ位置
endif
set guioptions-=T           " ツールバー消去
set guioptions-=m           " メニューバー非表示
set display=lastline        " 長い行を省略せずに表示する
set pumheight=10            " 補完リストの高さ
set number
set laststatus=2            " Powerline のため
"set notitle                 " タイトルなし
"set shortmess+=I            " タイトルなし

"------------------------------------------------------------------------
" カラースキーム
"------------------------------------------------------------------------
if has("gui")
    autocmd FocusGained * set transparency=100   " Ubuntu 17.04 で nvim-qt から起動させたが、透けなかった。
endif
colorscheme phd


"------------------------------------------------------------------------
" 編集に関する設定
"------------------------------------------------------------------------
set ambiwidth=double                    " 2バイト文字でカーソル位置がずれる問題の対策
set iminsert=0 imsearch=0               " 挿入モード・検索モードでのデフォルトのIME状態設定
set expandtab                           " タブ入力時に自動的にスペースに変える
set tabstop=4                           " 1タブの幅
set softtabstop=4                       " 1タブ当たりの半角スペースの個数 (通常入力時)
set shiftwidth=4                        " 1タブ当たりの半角スペースの個数 (コマンドや自動インデント)
"set clipboard=unnamed                   " xterm への S-Insert でのペーストOKだが、firefox にペーストできない (ginit.vim あり)
"set clipboard+=unnamed                  " 同上
"set clipboard=unnamedplus               " firefox などに S-Insert でペーストできるが, xterm へのペーストができない (ginit.vim あり)
set clipboard=unnamed,unnamedplus       " firefox, xterm への S-Insert でのペーストが出来た (ginit.vim あり)

set autoindent                          " 自動的にインデントする (noautoindent:インデントしない)
set backspace=indent,eol,start          " バックスペースでインデントや改行を削除できるようにする
set showmatch matchtime=1               " 入力時対応する括弧に飛ぶ。表示時間 = 0.1 * matchtime (秒)
set autoindent                          " 自動的にインデントする (noautoindent:インデントしない)
set backspace=indent,eol,start          " バックスペースでインデントや改行を削除できるようにする
set showmatch matchtime=1               " 入力時対応する括弧に飛ぶ。表示時間 = 0.1 * matchtime (秒)
set wildmenu                            " コマンドライン補完するときに強化されたものを使う(参照 :help wildmenu)
set nobackup                            " バックアップファイルを作成しない
"set noundofile                          " undoファイル (*.un~) を作成しない
set undodir=$HOME/.config/nvim/undo
nnoremap Y y$                           " Y を y$ と同じにする。(ノーマルモード・再割り当て無し) 
set scrolloff=5                         " スクロールする時に下が見えるようにする
set wildmenu                            " コマンドライン補完するときに強化されたものを使う
" , の後に自動的にスペースを入れる
" inoremap , ,<Space>
" 文字が無い部分でも矩形選択を可能にする
set virtualedit=block

augroup grlcd                           "ファイルを開くと、ファイルがあるディレクトリに移動する
    autocmd!
    autocmd BufEnter * lcd %:p:h
augroup END

if 1    " 4-6. yank した文字列とカーソル位置の単語を置換する
    nnoremap    <silent> cy   ce<C-r>0<ESC>:let@=/=@1<CR>:noh<CR>
    vnoremap    <silent> cy   ce<C-r>0<ESC>:let@=/=@1<CR>:noh<CR>
    nnoremap    <silent> ciy  ciw<C-r>0<ESC>:let@=/=@1<CR>:noh<CR>
endif
"------------------------------------------------------------------------
" 検索に関する設定
"------------------------------------------------------------------------
set incsearch                               " 一致したもの全てハイライトする
" 4-16. Esc 2回でハイライトを消す
nnoremap <ESC><ESC> :nohlsearch<CR>
set ignorecase                              " 検索時に大文字小文字を無視 (noignorecase:無視しない)
set smartcase                               " 大文字小文字の両方が含まれている場合は大文字小文字を区別
set wrapscan                                " 検索時にファイルの最後まで行ったら最初に戻る (nowrapscan:戻らない)
" 検索した後に移動しない
nnoremap * *N
nnoremap # #N

augroup grepopen                            " vimgrep 実行後に自動的に copen して QuickFix ウインドウを開く。
    autocmd!
    autocmd QuickfixCmdPost vimgrep cw
augroup END


"------------------------------------------------------------------------
" マウス設定
"------------------------------------------------------------------------
set mouse=a       " どのモードでもマウスを使えるようにする
set nomousefocus  " マウスの移動でフォーカスを自動的に切替えない (mousefocus:切替る)
set mousehide     " 入力時にマウスポインタを隠す (nomousehide:隠さない)
set guioptions+=a " ビジュアル選択(D&D他)を自動的にクリップボードへ (:help guioptions_a)


"------------------------------------------------------------------------
" diffopt 設定
"------------------------------------------------------------------------
" diffモードでの操作
"   [c → 次の違いがある場所にジャンプ
"   ]c → 前の違いがある場所にジャンプ
"   do → 今開いているバッファに別バッファの差分を取り込む (:diffget)
"   dp → 別バッファに今開いているバッファの差分を入れる   (:diffput)
"
"   http://qiita.com/purini-to/items/1209e467eb9ca73e529b
if has("gui")
    " カレント行ハイライトON
    " 横方向。ただし Ubuntu 17.04 の nvim-qt はハイライトになるが、nvim では下線になるので注意。
    set cursorline
endif
" アンダーラインを引く(color terminal)
"highlight CursorLine cterm=underline ctermfg=NONE ctermbg=NONE
" アンダーラインを引く(gui)
"highlight CursorLine gui=underline guifg=NONE guibg=NONE
set diffopt+=filler     " 差分が無い箇所を '-' で埋めない
set diffopt+=icase      " 大小文字の違いは無視する
set diffopt+=iwhite     " 半角スペースの個数の違いは無視する
set diffopt+=vertical
nnoremap <C-c><C-c> ]c
nnoremap <C-c><C-k> [c
nnoremap <Leader>df :<C-u>diffsplit %
nnoremap <Leader>do :<C-u>diffsplit %.orig <CR>
"}}}
"---------------------------------
"[end]     Neko 基本的な設定
"---------------------------------

"dein Scripts-----------------------------
if &compatible
  set nocompatible               " Be iMproved
endif


" Required:
set runtimepath+=/home/neko/.config/nvim/repos/github.com/Shougo/dein.vim

" Required:
if dein#load_state('/home/neko/.config/nvim/')
  call dein#begin('/home/neko/.config/nvim/')

  " Let dein manage dein
  " Required:
  call dein#add('/home/neko/.config/nvim/repos/github.com/Shougo/dein.vim')

  " Add or remove your plugins here:
  call dein#add('Shougo/neosnippet.vim')
  call dein#add('Shougo/neosnippet-snippets')

  " You can specify revision/branch/tag.
  call dein#add('Shougo/vimshell', { 'rev': '3787e5' })

  "------------------------------
  "[start]  Neko dein によるプラグイン管理
  "------------------------------
  call dein#add('Shougo/vimproc')
  call dein#add('Shougo/neocomplcache.vim')  " NeoComlcache
  call dein#add('equalsraf/neovim-qt')
  call dein#add('Shougo/unite.vim')
  call dein#add('Shougo/vimfiler.vim')
  call dein#add('Shougo/neomru.vim')
  call dein#add('Shougo/vinarise.vim')     " バイナリファイル編集"
  call dein#add('AndrewRadev/linediff.vim') "行範囲のdiff
  call dein#add('LeafCage/yankround.vim')  " ヤンクバッファ
  call dein#add('junegunn/vim-easy-align')   " コードの自動整形
  call dein#add('Lokaltog/vim-easymotion')   " 高速移動
  call dein#add('nathanaelkane/vim-indent-guides')   " インデントガイド
  call dein#add('Yggdroot/indentLine')   " インデントライン
  call dein#add('itchyny/thumbnail.vim') " バッファセレクタ
  call dein#add('yonchu/accelerated-smooth-scroll') " 加速バッファセレクタ
  call dein#add('itchyny/lightline.vim')
  call dein#add('tyru/open-browser.vim')
  call dein#add('tyru/capture.vim') " コマンドの結果をキャプチャする (例) :Capture map
  call dein#add('fuenor/qfixgrep')
  call dein#add('thinca/vim-qfreplace')
  call dein#add('AndrewRadev/linediff.vim')
  call dein#add('houtsnip/vim-emacscommandline')  " コマンドラインで emacs 操作をする
  call dein#add('AndrewRadev/linediff.vim')
  call dein#add('tpope/vim-surround') "surround
  call dein#add('tpope/vim-repeat') "repeat surround

  "[ref] http://wakame.hatenablog.jp/entry/2016/10/09/174035
  "[ref] http://wakame.hatenablog.jp/entry/2017/05/04/144550
  " call dein#load_toml('~/.config/nvim/userautoload/dein/plugins.toml', {'lazy': 0})
  " call dein#load_toml('~/.config/nvim/userautoload/dein/plugins-lazy.toml', {'lazy': 1})

  "------------------------------
  "[end]    Neko dein によるプラグイン管理
  "------------------------------
  
  " Required:
  call dein#end()
  call dein#save_state()
endif

" Required:
filetype plugin indent on
syntax enable

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

"---------------------------------
"[start]   Neko プラグインインストール後の設定
"---------------------------------
let my_plugin_list = [
\ "$HOME/.config/nvim/userautoload/plugins/plugin_neocomplcache.vim"      ,
\ "$HOME/.config/nvim/userautoload/plugins/plugin_easyalign.vim"          ,
\ "$HOME/.config/nvim/userautoload/plugins/plugins-unite.vim"             ,
\ "$HOME/.config/nvim/userautoload/plugins/plugin_indentguides.vim"       ,
\ "$HOME/.config/nvim/userautoload/plugins/local_keymap.vim"              ,
\ "$HOME/.config/nvim/userautoload/plugins/plugin_yankround.vim"          ,
\ "$HOME/.config/nvim/userautoload/plugins/plugin_easymotion.vim"         ,
\ "$HOME/.config/nvim/userautoload/plugins/plugin_thumbnail.vim"          ,
\ "$HOME/.config/nvim/userautoload/plugins/plugin_textmanip.vim"          ,
\ "$HOME/.config/nvim/userautoload/plugins/plugin_lightline.vim"          ,
\ "$HOME/.config/nvim/userautoload/plugins/plugin_vim_open_browser.vim"   ,
\ "$HOME/.config/nvim/userautoload/plugins/plugin_qfixgrep.vim"
\ ]

let i = 0
while i < len(my_plugin_list)
    let f = my_plugin_list[i]
    if filereadable(expand(f))
        source `=f`
    endif
    let i = i + 1
endwhile

"{{{
" ---------------------------------------------------------------
" easyalign の使い方メモ
" ---------------------------------------------------------------
" コードの自動整形 (ビジュアルモードで範囲選択 → Enter → * → =)
" http://baqamore.hatenablog.com/entry/2015/06/27/074459
" vim-textmanip (矩形のコピーや移動)

"}}}
"---------------------------------
"[end]     Neko プラグインインストール後の設定
"---------------------------------
"End dein Scripts-------------------------
" vim: foldmethod=marker

 

plugins.toml, plaugins_lazy.toml の設定

  • こちらの Vimfiler の設定が大変役立った。
  • init.vim で本ファイルの読み込みを行わない場合、vimproc_linux64.so のビルドが行われないので注意すること。(手動ビルドは別項に記載した)

$HOME/.config/nvim/userautoload/dein/plugins.toml

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

[[plugins]]
repo = 'Shougo/vimproc.vim'
build = 'make'

[[plugins]]
repo = 'Shougo/unite.vim.git'
hook_add = 'source ~/.config/nvim/userautoload/plugins/plugins-unite.vim'

[[plugins]]
repo = "https://github.com/tyru/caw.vim.git"
hook_add = '''
vmap - <Plug>(caw:I:toggle)

[[plugins]]
repo = 'Shougo/vimfiler.vim'
depends = 'unite.vim'
hook_add = '''
source ~/.config/nvim/plugins/vimfiler.rc.vim
'''

$HOME/.config/nvim/userautoload/dein/plugins-lazy.toml

[[plugins]]
repo = "davidhalter/jedi-vim"
on_ft = ['python']

[[plugins]]
repo = 'fatih/vim-go'
on_ft = ['go']

[[plugins]]
repo = 'Shougo/unite.vim'
hook_add = 'source ~/.config/nvim/userautoload/plugins/plugins-unite.vim'

[[plugins]]
repo = 'Shougo/unite-outline'
depends = ['unite']
hook_add = 'source ~/.config/nvim/userautoload/plugins/plugins-unite-outline.vim'

[[plugins]]
repo = 'hewes/unite-gtags'
hook_add = 'source ~/.config/nvim/userautoload/plugins/plugins-unite-gtags.vim'
depends = ['unite']

 

Vimfiler の設定

Windows10 で使っていた Vim80 x86_64 の設定だと unite#custom_action で未知の定義エラーが発生し、「s」「v」による画面分割が出来なかった。
そこで, Neovimはじめました & 2016年vimrc大掃除を参考にさせてもらい設定をした。

  • \ e によるツリー表示
  • t でツリー展開にする
  • 画面構成の変更


上記は unite が旧いことが原因であり、最新の unite を入れることで vimfiler の不整合は解消した。
$HOME/.config/nvim/userautoload/plugins/vimfiler.rc.vim

" https://muunyblue.github.io/c95d62c68196b2d0c1c1de8c7eeb6d50.html#vimfiler より. 一部変更した
call vimfiler#custom#profile('default', 'context', {
    \ 'safe' : 0,
    \ 'auto_expand' : 1,
    \ 'parent' : 0,
    \ })
"default explore -> vimfiler
let g:vimfiler_as_default_explorer = 1

"buffer directory
"nnoremap <silent> fe :<C-u>VimFilerBufferDir -quit<CR>
" Nerdtree like
"nnoremap <C-e> :<C-u>VimFilerBufferDir -split -winwidth=120 -toggle -no-quit<CR>
autocmd VimEnter * VimFiler -split -simple -winwidth=40 -no-quit -no-focus
nnoremap <leader>e :VimFilerExplore -split -winwidth=40 -find -no-quit -no-focus<Cr>

"key mapping
autocmd MyAutoCmd FileType vimfiler call s:vimfiler_my_settings()
function! s:vimfiler_my_settings()
  nnoremap <silent><buffer><expr> v vimfiler#do_switch_action('vsplit')
  nnoremap <silent><buffer><expr> s vimfiler#do_switch_action('split')
endfunction

" Textmate icons
let g:vimfiler_tree_leaf_icon = ' '
let g:vimfiler_tree_opened_icon = '▾'
let g:vimfiler_tree_closed_icon = '▸'
let g:vimfiler_file_icon = '-'
let g:vimfiler_marked_file_icon = '*'

 

nvim-qt への S-Insert によるペースト対応

$HOME/.config/nvim/ginit.vim

map! <S-Insert> <C-R>+

 

$HOME/.Xdefaults

あまり nvim への関係ないと思うが、一応メモ。

*VT100.translations: #override  <Btn3Down>: insert-selection(CLIPBOARD)
XTerm*VT100.Translations: #override \
ShiftInsert: insert-selection(CLIPBOARD) \n\
Insert: insert-selection(PRIMARY) \n\
Shift: insert-selection(CLIPBOARD) \n\
Shift: select-start() \n\
Shift: select-extend() \n\
Shift: select-end(CLIPBOARD)

課題・残作業

  • nvim-qt でクリップボードが使えない
    • $HOME/.config/gvim/ginit.vim の作成と「set clipboard=unnamed,unnamedplus」の記述により、完璧では無いが最低限の課題は解決。
    • xterm などで C-k でカットしたら、それを S-Insert で gvim にペースト出来れば最高なのだが。
  • nvim-qt で画面サイズが効かない
    • とりあえず以下である程度は凌げそう。winpos 相当があれば良いのだが。
      • nvim-qt --fullscreen で最大サイズで起動
      • nvim-qt --geometry 1500x800 でサイズ指定
  • gtags との連携
  • denite への移行
  • init.vim 変更後の vimfiler のエラー対応 (TOMLでエラー発生。Lazy に変えてみる?)
    • Lazy 導入済みだが、解決せず
      • 原因は、使用していた unite.vim のバージョンが古く、vim8.0 から丸ごとコピーしたものであった。
      • 最新の unite.vim をインストールすることで解決した。
  • migemo の導入検討。(Windows のときは重たくて外していた)



新たに nvim を入れ直す場合

% cd $HOME/.config/nvim
(init.vim や userautoload/ を別ディレクトリに退避させておく)
% rm -rf  .* \.*
% vim init.vim
(旧、init.vim を使っても良い)
% mkdir -p repos/github.com/Shougo/dein.vim
% git clone https://github.com/Shougo/dein.vim repos/github.com/Shougo/dein.vim/
( userautoload/ を復旧する)
% nvim
(プラグインのインストールが行われる)
(:VimFiler を実行してみて、vimproc_linux64.so が無いと言われたら以下を行う)
% cd repos/github.com/Shougo/vimproc/
% make
% cp repos/github.com/Shougo/vimproc/lib/vimproc_linux64.so  .cache/init.vim/.dein/lib/

その他

  • tagbar, SrcExp, Ctrl-P は入れない
  • Terminal、shell も使わない