[vim] コーディングが捗るvimプラグインまとめ [gif集]

概要

2017年はより本格的なvim利用を初めて色々なキーバインドや設定、プラグインを試してきた。そんな中で個人的に、コーディングがより捗るキッカケとなったvimプラグインがいくつかあるので、動作画面をgifで撮影してまとめてみた。

本記事ではプラグイン名とその挙動例のみ掲載するので、気になった場合はプラグイン名でググればわかりやすい解説が多数ヒットすると思う。

neocomplcache

バッファ内のコードを元にコード補完を行ってくれる。同様のことはvimの標準機能でも可能で、自分も長らくそれだけ使ってきたが、試しにneocomplcacheを入れてみたら戻れなくなった。

ただ補完してほしくないようなワードやタイミングで補完が始まってしまうのが少し辛い。その辺りは細かい設定をいじれるのかもしれないが。

neosnippe/neosnippet-snippets

スニペット(頻出の決まりきったコード)の自動入力を補助してくれるプラグイン。neosnippet-snippetsを入れるだけでも多くの言語の多くのスニペットをサポートしてくれる。痒い所に手が届かない場合は比較的簡単に自分でカスタマイズできるようになってるみたい。

syntastic

イチオシ

ファイル保存時にコードを静的解析し、構文エラーを教えてくれる。PHPのセミコロン漏れやJSの括弧の対応漏れ、Rubyの未使用変数の警告など、幅広い範囲で教えてくれる。凡ミスで無駄な出戻りを生まなくなるので最早必須のプラグイン。

commentary

ヴィジュアルモードで選択した範囲をまとめてコメントアウトするプラグイン。これもvimの標準機能で出来ないこともないが、これを使うことでより手軽にコメントアウトできるので導入。

nerdtree

いわゆるディレクトリツリーの決定版。ファイル一覧を表示して任意のファイルをバッファに展開できる。自分はvimのバッファ機能をまだまだ使いこなせていないので、このプラグインもまだ10%程度しか活用できてない。

autoclose

()や{},[]などの対応する閉じ括弧を自動挿入してくれるプラグイン。地味ながら非常に強力。

emmet-vim

イチオシ

フロントエンジニアなら必須とも言えるプラグイン。emmetの構文規則に沿った文字列を入力すると自在にHTMLに展開できる。その機能の多さ、汎用さは最高級。ちないにemmetはvimに限らずsublimeやatomでも提供されているので、vimmer以外でも調べてみると良い。

vim-surround

“”や”などの、テキストを囲む要素の自動入力、差し替え、削除などのプラグイン。個人的には、””で囲っていた文字列をやっぱり”で書き直そうと言う時に地味に役立つ。

おまけ(vimrc)

本記事作成時点での私のvimrcは以下の通り。本記事で紹介しなかったプラグインや、各種設定、キーバインドも含んでいる。特に”jj”でインサートモードを抜けるキーバインドはもう絶対に手放せない。

"---------------------------------------------------------
" NeoBundle ここから
"---------------------------------------------------------
if has('vim_starting')
  set nocompatible
  if !isdirectory(expand("~/.vim/bundle/neobundle.vim/"))
    echo "install neobundle..."
    :call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim")
  endif
  set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

call neobundle#begin(expand('~/.vim/bundle'))
let g:neobundle_default_git_protocol='https'
NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'nanotech/jellybeans.vim'
NeoBundleLazy 'tpope/vim-endwise', {
  \ 'autoload' : { 'insert' : 1,}}

"---------------------------------------------------------
" 自動補完
"---------------------------------------------------------
NeoBundle 'Shougo/neocomplcache.vim'
NeoBundle 'Shougo/neocomplcache-rsense.vim'
let g:acp_enableAtStartup = 0
let g:neocomplcache_enable_at_startup = 1
let g:neocomplcache_enable_smart_case = 1
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
let g:neocomplcache_enable_camel_case_completion = 1
let g:neocomplcache_enable_underbar_completion = 1
if !exists('g:neocomplcache_omni_patterns')
    let g:neocomplcache_omni_patterns = {}
endif
let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'
autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete
let g:rsenseHome = expand("~/.vim/bundle/rsense")
let g:rsenseUseOmniFunc = 1
NeoBundle 'Shougo/neosnippet'
NeoBundle 'Shougo/neosnippet-snippets'
imap <C-k>     <Plug>(neosnippet_expand_or_jump)
smap <C-k>     <Plug>(neosnippet_expand_or_jump)
xmap <C-k>     <Plug>(neosnippet_expand_target)

"---------------------------------------------------------
" シンタックスチェック
"---------------------------------------------------------
NeoBundle 'scrooloose/syntastic.git'
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

"---------------------------------------------------------
" 括弧の自動入力
"---------------------------------------------------------
NeoBundle 'Townk/vim-autoclose'
autocmd FileType ruby setlocal commentstring=#\ %s

"---------------------------------------------------------
" 一括コメントアウト gc
"---------------------------------------------------------
NeoBundle 'tpope/vim-commentary'

"---------------------------------------------------------
" HTMLの自動入力 <C-t>,
"---------------------------------------------------------
NeoBundle 'mattn/emmet-vim'
let g:user_emmet_leader_key='<c-t>'

"---------------------------------------------------------
" ディレクトリツリー <C-n>
"---------------------------------------------------------
NeoBundle 'scrooloose/nerdtree'
nmap <silent><C-n> :NERDTreeToggle<CR>

"---------------------------------------------------------
" シンタックスハイライト
"---------------------------------------------------------
NeoBundle 'slim-template/vim-slim'
NeoBundle 'othree/yajs.vim'
NeoBundle 'maxmellon/vim-jsx-pretty'
NeoBundle 'posva/vim-vue'
highlight Search term=bold,reverse ctermfg=15 ctermbg=233 gui=bold,reverse

"---------------------------------------------------------
" ステータスラインの装飾
"---------------------------------------------------------
NeoBundle 'itchyny/lightline.vim'

"---------------------------------------------------------
" 括弧の差し替え、追加、削除
" cs"' / ys"
"---------------------------------------------------------
NeoBundle 'tpope/vim-surround'

"---------------------------------------------------------
" Helpの日本語化
"---------------------------------------------------------
NeoBundle 'vim-jp/vimdoc-ja'

"---------------------------------------------------------
" NeoBundle ここまで
"---------------------------------------------------------
NeoBundleCheck
call neobundle#end()

"----------------------------------------------------------
" 配色設定
"----------------------------------------------------------
set t_Co=256
highlight StatusLine   cterm=NONE ctermfg=white ctermbg=233
highlight StatusLineNC cterm=NONE ctermfg=white ctermbg=233
highlight VertSplit    cterm=NONE ctermfg=233   ctermbg=233
highlight Pmenu     ctermbg=4
highlight PmenuSel  ctermbg=1
highlight PmenuSbar ctermbg=4
syntax on

"---------------------------------------------------------
" 文字コード関係
"---------------------------------------------------------
set encoding=utf-8
set fenc=utf-8
set fileformats=unix,dos,mac

"---------------------------------------------------------
" エディタの見た目関係
"---------------------------------------------------------
set number
set laststatus=2
set list
set showmatch
set display=lastline
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P]']'}

"---------------------------------------------------------
" インデント関係
"---------------------------------------------------------
set tabstop=2
set shiftwidth=2
set autoindent
set smartindent
set expandtab
set listchars=tab:>-,trail:.
set softtabstop=2
set backspace=indent,eol,start

"---------------------------------------------------------
" 検索関係
"---------------------------------------------------------
set incsearch
set hlsearch

"---------------------------------------------------------
" その他
"---------------------------------------------------------
set whichwrap=b,s,h,l,<,>,[,]
set filetype=html
autocmd BufWritePre * :%s/\s\+$//ge " 保存時に行末スペースを削除
autocmd InsertEnter * set nohlsearch " 挿入モードではハイライトを無効
autocmd InsertLeave * set hlsearch " 挿入モード以外ではハイライトを有効

"---------------------------------------------------------
" その他 キーバインド
"---------------------------------------------------------
inoremap <silent> jj <ESC>:w<CR>:noh<CR>
inoremap <silent> <C-j> <ESC><ESC>
inoremap <silent> <C-l> <CR>
inoremap <silent> <C-;> <CR>
nnoremap <silent> <Esc><Esc> :noh<CR>
nnoremap <Down> gj
nnoremap <Up>   gk

vimrcはGithubで管理しているので、更新があった場合は基本的にこちらが最新になる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です