力がほしい
Vimを愛用し初めて1年半、そろそろ力が欲しいと思っていたところ。
Dein.vim is a dark powered Vim/Neovim plugin manager.
良いものを発見。 まさにdark powerを得るチャンス。
haya14busa さんのスライドより
https://docs.google.com/presentation/d/14pViuMI_X_PiNwQD8nuGRG72GUqSeKDqoJqjAZWS39U/edit#slide=id.g28fa7f227c_0_221
NeoBundleからDeinに乗り換える。
ついでに、Plugin整理やら追加やらをし、細かく解説していきます。
Deinを使う上での構成やら基本的なことはここを参照。
構成(~/以下)
- .vimrc
- .vim
- rc
- dein.toml
- dein_lazy.toml
- rc
簡単な設定
白紙の.vimrcにこれを書いていきます。
setencoding=utf-8scriptencoding utf-8" 保存時の文字コードsetfileencoding=utf-8" 読み込み時の文字コードの自動判別. 左側が優先されるsetfileencodings=ucs-boms,utf-8,euc-jp,cp932" 改行コードの自動判別. 左側が優先されるsetfileformats=unix,dos,mac" □や○文字が崩れる問題を解決"setambiwidth=double"行数を表示するsetnumbersetbackspace=indent,eol,start"ヤンクした時にクリップボードにコピーするsetclipboard=unnamed,autoselect" タブ入力を複数の空白入力に置き換えるsetexpandtab" 画面上でタブ文字が占める幅settabstop=4" 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅setsofttabstop=4" 改行時に前の行のインデントを継続するsetautoindent" 改行時に前の行の構文をチェックし次の行のインデントを増減するsetsmartindent" smartindentで増減する幅"setshiftwidth=4" インクリメンタルサーチ. 1文字入力毎に検索を行うsetincsearch" 検索パターンに大文字小文字を区別しないsetignorecase" 検索パターンに大文字を含んでいたら大文字小文字を区別するsetsmartcase" 検索結果をハイライト"sethlsearch" 不可視文字を可視化(タブが「▸-」と表示される)setlistlistchars=tab:\▸\-" カーソルの左右移動で行末から次の行の行頭への移動が可能になるsetwhichwrap=b,s,h,l,<,>,[,],~" カーソルラインをハイライト"setcursorline
Plugins
初期設定
:.vimrc" dein.vim がなければ github から落としてくるif&runtimepath!~# '/dein.vim'if!isdirectory(s:dein_repo_dir)
execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_direndif
execute 'set runtimepath^=' . fnamemodify(s:dein_repo_dir,':p')endif" 設定開始if dein#load_state(s:dein_dir)call dein#begin(s:dein_dir) " プラグインリストを収めた TOML ファイル " 予め TOML ファイル(後述)を用意しておくletg:rc_dir = expand('~/.vim/rc')let s:toml =g:rc_dir . '/dein.toml'let s:lazy_toml =g:rc_dir . '/dein_lazy.toml' " TOML を読み込み、キャッシュしておくcall dein#load_toml(s:toml, {'lazy': 0})call dein#load_toml(s:lazy_toml, {'lazy': 1}) " 設定終了call dein#end()call dein#save_state()endif" もし、未インストールものものがあったらインストールif dein#check_install()call dein#install()endif
:.dein.toml
# 基本は github.comのレポジトリーを指定するだけ
[[plugins]]
repo ='Shougo/dein.vim'
# git clone 後、実行すべきコマンドがある場合はこんな感じ
[[plugins]]
repo ='Shougo/vimproc.vim'
hook_post_update ='''if dein#util#_is_windows()let cmd ='tools\\update-dll-mingw'elseif dein#util#_is_cygwin()let cmd ='make -f make_cygwin.mak'elseif executable('gmake')let cmd ='gmake'elselet cmd ='make'endifletg:dein#plugin.build = cmd'''
これで準備完了!
vim-airline/vim-airline
:dein.toml
[[plugins]]
repo ='vim-airline/vim-airline'
depends = ['vim-airline-themes']
[[plugins]]
repo ='vim-airline/vim-airline-themes'
:.vimrcletg:airline_theme ='molokai'
tomasr/molokai
:dein.toml
[[plugins]]
repo ='tomasr/molokai'
コードの色をいい感じにしてくれる。
GitHub
Shougo/vimfiler
:dein.toml
#vimfilerを使うために必要
[[plugins]]
repo ='Shougo/unite.vim'
#ディレクトリ表示
[[plugins]]
repo ='Shougo/vimfiler'
ディレクトリを表示し、移動が出来る。
https://github.com/Shougo/vimfiler.vim
:.vimrc:letg:vimfiler_as_default_explorer =1
をしておけばVim起動時に毎回起動する。
Townk/vim-autoclose
:dein.toml
[[plugins]]
repo ='Townk/vim-autoclose'
括弧補完"
を打つと ""
に自動補完してくれる。
https://github.com/Townk/vim-autoclose
scrooloose/syntastic
:dein.toml
[[plugins]]
repo ='scrooloose/syntastic'
syntax のチェックをしてくれる。
エラーの箇所に >>
が入るためわかりやすい。
https://github.com/vim-syntastic/syntastic
Yggdroot/indentLine
:dein.toml
[[plugins]]
repo ='Yggdroot/indentLine'
:.vimrcletg:indentLine_char ='¦'
インデントを可視化する
https://github.com/Yggdroot/indentLine
bronson/vim-trailing-whitespace
:dein.toml
[[plugins]]
repo ='bronson/vim-trailing-whitespace'
末尾の全角と半角の空白文字を赤くハイライト:FixWhitespace
で全て削除できる。
https://github.com/bronson/vim-trailing-whitespace
tpope/vim-fugitive airblade/vim-gitgutter
:dein.toml
[[plugins]]
repo ='tpope/vim-fugitive'
[[plugins]]
repo ='airblade/vim-gitgutter'
git関連のプラグイン
gitの便利操作がvimで出来る
また、変更箇所に ~
追加箇所に +
削除箇所に -
と表示される。
お勧めは Gblame
誰のコミットかわかる。
https://github.com/tpope/vim-fugitive
https://github.com/airblade/vim-gitgutter
junegunn/vim-easy-align
:dein.toml
[[plugins]]
repo ='junegunn/vim-easy-align'
:.vimrc"enterで整形設定に行くようにする
vmap <Enter><Plug>(EasyAlign)
https://github.com/junegunn/vim-easy-align
整形箇所を選択→enter→ = → enter で整形される。
※ = 以外でも可能
ctrlpvim/ctrlp.vim
:dein.toml
[[plugins]]
repo ='ctrlpvim/ctrlp.vim'
ctrl+p でファイルあいまい検索ができる
https://github.com/ctrlpvim/ctrlp.vim
ctrl + tで新しいタブにてファイルを開ける。
Shougo/neocomplcache,neosnippet,neosnippet-snippets
:dein.toml
#入力補完
[[plugins]]
repo ='Shougo/neocomplcache'
# スニペットの補完機能
[[plugins]]
repo ='Shougo/neosnippet'
# スニペット集
[[plugins]]
repo ='Shougo/neosnippet-snippets'
.vimrc"====================neocomplcache====================" ~Disable AutoComplPop. neocomplcashe~letg:acp_enableAtStartup =0" Use neocomplcache.letg:neocomplcache_enable_at_startup =1" Use smartcase.letg:neocomplcache_enable_smart_case =1" Set minimum syntax keyword length.letg:neocomplcache_min_syntax_length =3letg:neocomplcache_lock_buffer_name_pattern ='\*ku\*'" Define dictionary.letg:neocomplcache_dictionary_filetype_lists = {
\ 'default' : ''
\ }" Plugin key-mappings.inoremap<expr><C-g> neocomplcache#undo_completion()inoremap<expr><C-l> neocomplcache#complete_common_string()" Recommended key-mappings." <CR>: close popup and save indent.inoremap<silent><CR><C-r>=<SID>my_cr_function()<CR>function! s:my_cr_function()return neocomplcache#smart_close_popup() . "\<CR>"endfunction" <TAB>: completion.inoremap<expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"" <C-h>, <BS>: close popup and delete backword char.inoremap<expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"inoremap<expr><BS> neocomplcache#smart_close_popup()."\<C-h>"inoremap<expr><C-y> neocomplcache#close_popup()inoremap<expr><C-e> neocomplcache#cancel_popup()"~neocomplecas~"====================neosnippet====================" Plugin key-mappings." Note: It must be "imap" and "smap". It uses <Plug> mappings.
imap <C-k><Plug>(neosnippet_expand_or_jump)smap<C-k><Plug>(neosnippet_expand_or_jump)
xmap <C-k><Plug>(neosnippet_expand_target)" SuperTab like snippets behavior." Note: It must be "imap" and "smap". It uses <Plug> mappings.
imap <C-k><Plug>(neosnippet_expand_or_jump)"imap <expr><TAB>" \ pumvisible() ? "\<C-n>" :" \ neosnippet#expandable_or_jumpable() ?" \ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"smap<expr><TAB> neosnippet#expandable_or_jumpable() ?
\ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"" For conceal markers.if has('conceal')setconceallevel=2concealcursor=nivendif" ~ファイルタイプ毎 & gitリポジトリ毎にtagsの読み込みpathを変える~function! ReadTags(type)try
execute "set tags=".$HOME."/dotfiles/tags_files/".
\ system("cd " . expand('%:p:h') . "; basename `git rev-parse --show-toplevel` | tr -d '\n'").
\ "/" . a:type . "_tags"catch
execute "set tags=./tags/" . a:type . "_tags;"endtryendfunction
augroup TagsAutoCmd
autocmd!
autocmd BufEnter * :call ReadTags(&filetype)
augroup END
ctrl + k
で次の入力するところに飛べる(便利だ・・・)
https://github.com/Shougo/neocomplcache.vim
https://github.com/Shougo/neosnippet.vim
https://github.com/Shougo/neosnippet-snippets
cohama/lexima.vim
dein.toml
[[plugins]]
repo ='cohama/lexima.vim'
閉じ括弧補完
https://github.com/cohama/lexima.vim
osyo-manga/vim-anzu
:dein.toml
[[plugins]]
repo ='osyo-manga/vim-anzu'
:.vimrc
nmap n<Plug>(anzu-n-with-echo)
nmap N <Plug>(anzu-N-with-echo)
nmap * <Plug>(anzu-star-with-echo)
nmap # <Plug>(anzu-sharp-with-echo)" clear status
nmap <Esc><Esc><Plug>(anzu-clear-search-status)" statuslinesetstatusline=%{anzu#search_status()}
https://github.com/osyo-manga/vim-anzu
rhysd/clever-f.vim
:dein.toml
[[plugins]]
repo ='rhysd/clever-f.vim'
fで検索後移動できるようにする
ハイライトされるのがホント便利
https://github.com/rhysd/clever-f.vim
vim-operator-flashy
:dein.toml
[[plugins]]
repo ='kana/vim-operator-user'
[[plugins]]
repo ='haya14busa/vim-operator-flashy'
:.vimrc
map y<Plug>(operator-flashy)
nmap Y <Plug>(operator-flashy)$
コピーしたところが一瞬ハイライトされる
https://github.com/haya14busa/vim-operator-flashy
mattn/emmet-vim
[[plugins]]
repo = 'mattn/emmet-vim'
:.vimrcletg:user_emmet_leader_key='<C-t>'
html補完
ctrl + t ,
で展開されるように設定
majutsushi/tagbar
[[plugins]]
repo ='majutsushi/tagbar'
tagbarがでて関数やclass一覧などがみえる。
まとめ
dein.toml
# 基本は github.comのレポジトリーを指定するだけ
[[plugins]]
repo ='Shougo/dein.vim'
# git clone 後、実行すべきコマンドがある場合はこんな感じ
[[plugins]]
repo ='Shougo/vimproc.vim'
hook_post_update ='''if dein#util#_is_windows()let cmd ='tools\\update-dll-mingw'elseif dein#util#_is_cygwin()let cmd ='make -f make_cygwin.mak'elseif executable('gmake')let cmd ='gmake'elselet cmd ='make'endifletg:dein#plugin.build = cmd'''
#ステータスラインのテーマ
[[plugins]]
repo ='vim-airline/vim-airline'
depends = ['vim-airline-themes']
#ステータスラインのテーマ
[[plugins]]
repo ='vim-airline/vim-airline-themes'
#コードの色
[[plugins]]
repo ='tomasr/molokai'
#vimfilerを使うために必要
[[plugins]]
repo ='Shougo/unite.vim'
#ディレクトリ表示
[[plugins]]
repo ='Shougo/vimfiler'
#ディレクトリ表示
[[plugins]]
repo ='scrooloose/nerdtree'
#括弧補完
[[plugins]]
repo ='Townk/vim-autoclose'
#syntaxcheck
[[plugins]]
repo ='scrooloose/syntastic'
# インデントの可視化 上手く機能してない?
[[plugins]]
repo ='Yggdroot/indentLine'
# インデントの可視化
[[plugins]]
repo ='nathanaelkane/vim-indent-guides'
# 末尾の全角と半角の空白文字を赤くハイライト
[[plugins]]
repo ='bronson/vim-trailing-whitespace'
[[plugins]]
repo ='szw/vim-tags'
#gitの便利操作がvimで出来る Gblameなど
[[plugins]]
repo ='tpope/vim-fugitive'
#gitの変更箇所を左側に表示してくれる
[[plugins]]
repo ='airblade/vim-gitgutter'
#tagbarがでる関数一覧などが出る
[[plugins]]
repo ='majutsushi/tagbar'
#細かい整形が出来るようなる
[[plugins]]
repo ='junegunn/vim-easy-align'
#ctrl+pでファイルあいまい検索ができる
[[plugins]]
repo ='ctrlpvim/ctrlp.vim'
#入力補完
[[plugins]]
repo ='Shougo/neocomplcache'
# スニペットの補完機能
[[plugins]]
repo ='Shougo/neosnippet'
# スニペット集
[[plugins]]
repo ='Shougo/neosnippet-snippets'
#閉じ括弧補完
[[plugins]]
repo ='cohama/lexima.vim'
#検索結果の件数を表示
[[plugins]]
repo ='osyo-manga/vim-anzu'
#fで検索後移動できるようにする
[[plugins]]
repo ='rhysd/clever-f.vim'
[[plugins]]
repo ='kana/vim-operator-user'
#コピーしたところが一瞬ハイライトされる 入らなかった
[[plugins]]
repo ='haya14busa/vim-operator-flashy'
#html補完
[[plugins]]
repo ='mattn/emmet-vim'
.vimrc
setencoding=utf-8scriptencoding utf-8" 保存時の文字コードsetfileencoding=utf-8" 読み込み時の文字コードの自動判別. 左側が優先されるsetfileencodings=ucs-boms,utf-8,euc-jp,cp932" 改行コードの自動判別. 左側が優先されるsetfileformats=unix,dos,mac" □や○文字が崩れる問題を解決"setambiwidth=doublesetnumbersetbackspace=indent,eol,start"クリップボードにコピーするsetclipboard=unnamed,autoselect" タブ入力を複数の空白入力に置き換えるsetexpandtab" 画面上でタブ文字が占める幅settabstop=4" 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅setsofttabstop=4" 改行時に前の行のインデントを継続するsetautoindent" 改行時に前の行の構文をチェックし次の行のインデントを増減するsetsmartindent" smartindentで増減する幅"setshiftwidth=4" インクリメンタルサーチ. 1文字入力毎に検索を行うsetincsearch" 検索パターンに大文字小文字を区別しないsetignorecase" 検索パターンに大文字を含んでいたら大文字小文字を区別するsetsmartcase" 検索結果をハイライト"sethlsearch" 不可視文字を可視化(タブが「▸-」と表示される)setlistlistchars=tab:\▸\-" カーソルの左右移動で行末から次の行の行頭への移動が可能になるsetwhichwrap=b,s,h,l,<,>,[,],~" カーソルラインをハイライト"setcursorline" 行が折り返し表示されていた場合、行単位ではなく表示行単位でカーソルを移動するnnoremapj gjnnoremapk gknnoremap<down> gjnnoremap<up> gk" tagsジャンプの時に複数ある時は一覧表示"nnoremap <C-]> g<C-]>nnoremap<C-h> :vsp<CR> :exe("tjump ".expand('<cword>'))<CR>nnoremap<C-k> :split<CR> :exe("tjump ".expand('<cword>'))<CR>" 括弧の対応関係を一瞬表示するsetshowmatch
source $VIMRUNTIME/macros/matchit.vim" Vimの「%」を拡張する "" コマンドモードの補完setwildmenu" 保存するコマンド履歴の数 "sethistory=5000"=================dein================" プラグインが実際にインストールされるディレクトリlet s:dein_dir = expand('~/.cache/dein')" dein.vim 本体let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'" dein.vim がなければ github から落としてくるif&runtimepath!~# '/dein.vim'if!isdirectory(s:dein_repo_dir)
execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_direndif
execute 'set runtimepath^=' . fnamemodify(s:dein_repo_dir,':p')endif" 設定開始if dein#load_state(s:dein_dir)call dein#begin(s:dein_dir) " プラグインリストを収めた TOML ファイル " 予め TOML ファイル(後述)を用意しておくletg:rc_dir = expand('~/.vim/rc')let s:toml =g:rc_dir . '/dein.toml'let s:lazy_toml =g:rc_dir . '/dein_lazy.toml' " TOML を読み込み、キャッシュしておくcall dein#load_toml(s:toml, {'lazy': 0})call dein#load_toml(s:lazy_toml, {'lazy': 1}) " 設定終了call dein#end()call dein#save_state()endif" もし、未インストールものものがあったらインストールif dein#check_install()call dein#install()endif"色を付けるsyntaxoncolorscheme molokai"==============プラグイン関係の設定==============letg:airline_theme ='molokai'"====================gitgutter===================="変更箇所のハイライトletg:gitgutter_highlight_lines =0"====================junegunn/vim-easy-align===================="enterで整形設定に行くようにする
vmap <Enter><Plug>(EasyAlign)"====================neocomplcache====================" ~Disable AutoComplPop. neocomplcashe~letg:acp_enableAtStartup =0" Use neocomplcache.letg:neocomplcache_enable_at_startup =1" Use smartcase.letg:neocomplcache_enable_smart_case =1" Set minimum syntax keyword length.letg:neocomplcache_min_syntax_length =3letg:neocomplcache_lock_buffer_name_pattern ='\*ku\*'" Define dictionary.letg:neocomplcache_dictionary_filetype_lists = {
\ 'default' : ''
\ }" Plugin key-mappings.inoremap<expr><C-g> neocomplcache#undo_completion()inoremap<expr><C-l> neocomplcache#complete_common_string()" Recommended key-mappings." <CR>: close popup and save indent.inoremap<silent><CR><C-r>=<SID>my_cr_function()<CR>function! s:my_cr_function()return neocomplcache#smart_close_popup() . "\<CR>"endfunction" <TAB>: completion.inoremap<expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"" <C-h>, <BS>: close popup and delete backword char.inoremap<expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"inoremap<expr><BS> neocomplcache#smart_close_popup()."\<C-h>"inoremap<expr><C-y> neocomplcache#close_popup()inoremap<expr><C-e> neocomplcache#cancel_popup()"~neocomplecas~"====================neosnippet====================" Plugin key-mappings." Note: It must be "imap" and "smap". It uses <Plug> mappings.
imap <C-k><Plug>(neosnippet_expand_or_jump)smap<C-k><Plug>(neosnippet_expand_or_jump)
xmap <C-k><Plug>(neosnippet_expand_target)" SuperTab like snippets behavior." Note: It must be "imap" and "smap". It uses <Plug> mappings.
imap <C-k><Plug>(neosnippet_expand_or_jump)"imap <expr><TAB>" \ pumvisible() ? "\<C-n>" :" \ neosnippet#expandable_or_jumpable() ?" \ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"smap<expr><TAB> neosnippet#expandable_or_jumpable() ?
\ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"" For conceal markers.if has('conceal')setconceallevel=2concealcursor=nivendif" ~ファイルタイプ毎 & gitリポジトリ毎にtagsの読み込みpathを変える~function! ReadTags(type)try
execute "set tags=".$HOME."/dotfiles/tags_files/".
\ system("cd " . expand('%:p:h') . "; basename `git rev-parse --show-toplevel` | tr -d '\n'").
\ "/" . a:type . "_tags"catch
execute "set tags=./tags/" . a:type . "_tags;"endtryendfunction
augroup TagsAutoCmd
autocmd!
autocmd BufEnter * :call ReadTags(&filetype)
augroup END"====================osyo-manga/vim-anzu====================" mapping
nmap n<Plug>(anzu-n-with-echo)
nmap N <Plug>(anzu-N-with-echo)
nmap * <Plug>(anzu-star-with-echo)
nmap # <Plug>(anzu-sharp-with-echo)" clear status
nmap <Esc><Esc><Plug>(anzu-clear-search-status)" statuslinesetstatusline=%{anzu#search_status()}" ====================indentLine====================letg:indentLine_char ='¦'"use ¦, ┆ or │"====================haya14busa/vim-operator-flashy====================
map y<Plug>(operator-flashy)
nmap Y <Plug>(operator-flashy)$"====================EmmetHmtl"====================letg:user_emmet_leader_key='<C-t>'
これで皆さんも Dark Powerを得れたのではないでしょうか?