rcmdnk's blog

20180216_denite

NeoBundleDein.vim、 neocompletedeoplete.nvim に引き続き、Unite.vimのDark powered化が進んだdenite.nvimも Vim 8に対応しUnite.vimの方は今後バグフィックスのみ とする、となった様なのでdenite.nvimを導入してみました。

Dark power化

ShougoさんのVimプラグインがNeoVim への対応のタイミング?で明確なDark powered化されるべくDな プラグインへ移行が進んでいますが、 同時にVim 8へも対応する様になり、前に使っていた同様の プラグインがobsolete化する様になっています。

denite.nvimもVim 8への対応が出来る様になったので Unite.vimの方は今後バグフィックスのみになるようです。

denite.nvimの導入

deniteはPython3を使うので使う環境でPython3がインストールされている必要があります。

Vim 8では--enable-python3interp=yesでコンパイルするなりして Python3を有効にする必要があります。

Mac & Homebrewなら

$ brew install vim --with-python3

NeoVimを使っている場合にはpip3neovimをインストールしておく必要があります。

$ pip3 install neovim

また、Python3.5より前の環境では

$ pip3 install typing

としてtypingがインストールされている必要があります。

いずれの場合もVimの中で

:echo has('python3')

で1が出るようになっていればPython3はOKです。

.vimrcでプラグイン管理している場合などは、 deinなら、

.vimrc
1
2
3
4
5
if has('python3')
  call dein#add('Shougo/denite.nvim')
else
  call dein#add('Shougo/unite.vim')
endif

みたいな感じでpython3が有効かどうかでdeniteの代わりにuniteを使う様にする事もできます。

ただし、deniteではUniteのソースをそのまま使う事も出来る様になっていて、 deniteとUniteを両方インストールする必要がある場合もあります。

その場合は

.vimrc
1
2
3
4
if has('python3')
  call dein#add('Shougo/denite.nvim')
endif
call dein#add('Shougo/unite.vim')

こんな感じ。

neomru などはUnite/denite両方に対応していて 両方から直接呼ぶことが出来ますが、 deniteに対応してないUniteのソースは:Denite unite:fileの様に uniteの識別子を付けた形でソースを呼ぶことでdeniteから呼ぶことが可能になります。

ちなみに現在はソースとしてはneomruだけ追加しています。

.vimrc
1
2
3
4
5
6
7
8
if has('python3')
  call dein#add('Shougo/denite.nvim')
  call dein#add('Shougo/neomru.vim')
else
  call dein#add('Shougo/unite.vim')
  call dein#add('Shougo/neomru.vim')
  ...
endif

導入後、NeoVimの場合は最初に

:UpdateRemotePlugins

を行う様に促されるのでこれを実行します。

deniteの設定

実はUniteもイマイチちゃんと使いこなせて無かったので deniteにするタイミングで上手いこと使える様になれないかな、 と思ってる感じです。

なのでとりあえず使える様にしたのと、 どの様なソースがあるのか忘れてしまうので 一通りmenu機能を使って呼べる様にしました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
if dein#tap('denite.nvim')
  " Add custom menus
  let s:menus = {}
  let s:menus.file = {'description': 'File search (buffer, file, file_rec, file_mru'}
  let s:menus.line = {'description': 'Line search (change, grep, line, tag'}
  let s:menus.others = {'description': 'Others (command, command_history, help)'}
  let s:menus.file.command_candidates = [
        \ ['buffer', 'Denite buffer'],
        \ ['file: Files in the current directory', 'Denite file'],
        \ ['file_rec: Files, recursive list under the current directory', 'Denite file_rec'],
        \ ['file_mru: Most recently used files', 'Denite file_mru']
        \ ]
  let s:menus.line.command_candidates = [
        \ ['change', 'Denite change'],
        \ ['grep :grep', 'Denite grep'],
        \ ['line', 'Denite line'],
        \ ['tag', 'Denite tag']
        \ ]
  let s:menus.others.command_candidates = [
        \ ['command', 'Denite command'],
        \ ['command_history', 'Denite command_history'],
        \ ['help', 'Denite help']
        \ ]

  call denite#custom#var('menu', 'menus', s:menus)

  nnoremap [denite] <Nop>
  nmap <Leader>u [denite]
  nnoremap <silent> [denite]b :Denite buffer<CR>
  nnoremap <silent> [denite]c :Denite changes<CR>
  nnoremap <silent> [denite]f :Denite file<CR>
  nnoremap <silent> [denite]g :Denite grep<CR>
  nnoremap <silent> [denite]h :Denite help<CR>
  nnoremap <silent> [denite]h :Denite help<CR>
  nnoremap <silent> [denite]l :Denite line<CR>
  nnoremap <silent> [denite]t :Denite tag<CR>
  nnoremap <silent> [denite]m :Denite file_mru<CR>
  nnoremap <silent> [denite]u :Denite menu<CR>

  call denite#custom#map(
        \ 'insert',
        \ '<Down>',
        \ '<denite:move_to_next_line>',
        \ 'noremap'
        \)
  call denite#custom#map(
        \ 'insert',
        \ '<Up>',
        \ '<denite:move_to_previous_line>',
        \ 'noremap'
        \)
  call denite#custom#map(
        \ 'insert',
        \ '<C-N>',
        \ '<denite:move_to_next_line>',
        \ 'noremap'
        \)
  call denite#custom#map(
        \ 'insert',
        \ '<C-P>',
        \ '<denite:move_to_previous_line>',
        \ 'noremap'
        \)
  call denite#custom#map(
        \ 'insert',
        \ '<C-G>',
        \ '<denite:assign_next_txt>',
        \ 'noremap'
        \)
  call denite#custom#map(
        \ 'insert',
        \ '<C-T>',
        \ '<denite:assign_previous_line>',
        \ 'noremap'
        \)
  call denite#custom#map(
        \ 'normal',
        \ '/',
        \ '<denite:enter_mode:insert>',
        \ 'noremap'
        \)
  call denite#custom#map(
        \ 'insert',
        \ '<Esc>',
        \ '<denite:enter_mode:normal>',
        \ 'noremap'
        \)
endif

<Leader>uを押した後に適当なキーを押すと各ソースが呼び出せる様になっています。 uなのはUniteで使ってたため。

後はdenite立ち上げ後のキー設定として、<C-N>/<C-P>が 履歴の呼び出しになっているを候補を選ぶ操作に変更しました。

最初のメニューに関しては<Leader>uu通すと出てきて、 ソースを選択することが出来る様になっています。

denite

残るは

neosnippet.vim がまだ残っていて、これの後継にあたる deoppet.nvim がこれ自体がまだ開発段階みたいです。

Sponsored Links
Sponsored Links

« GNU screen内からsshした先にTERM=screen.xterm-256color等がない場合の対処法 Karabiner-Elementsに長押し操作やマウスキー機能が追加されていた »

}