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

Vim を使い DarkPowerを得る

$
0
0

力がほしい

Vimを愛用し初めて1年半、そろそろが欲しいと思っていたところ。

Dein.vim

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

簡単な設定

白紙の.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'

ステータスラインのテーマを変更する。

GitHub

tomasr/molokai

:dein.toml
[[plugins]]
repo ='tomasr/molokai'

コードの色をいい感じにしてくれる。
GitHub

スクリーンショット 2017-12-07 17.23.09.png

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 ='¦'

インデントを可視化する

3__vim.png

https://github.com/Yggdroot/indentLine

bronson/vim-trailing-whitespace

:dein.toml
[[plugins]]
repo ='bronson/vim-trailing-whitespace'

末尾の全角と半角の空白文字を赤くハイライト
:FixWhitespace で全て削除できる。
vimwhite3.gif

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
誰のコミットかわかる。
vimgit.gif

vimgit2.gif

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)

細かい整形が出来るようなる
vimeasyalign2.gif

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
vimctrlp2.gif

vimctrlp3.gif

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

vimneo.gif

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>'


vimhtml.gif

html補完

ctrl + t , で展開されるように設定

majutsushi/tagbar

[[plugins]]
repo ='majutsushi/tagbar'

vimtagbar.gif

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を得れたのではないでしょうか?


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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