darudaru

だるだるしてるエンジニア

vimで開発をするために

自分の開発のやり方の見直しをしていく中で、ほぼ素だったvimの設定も見直しました。プラグインもいろいろ入れてみて、開発がとてもやりやすくなりました。

プラグイン

denite

定番。プラグインを管理するプラグインマネージャーです。

blog.darudaru-life.com

ファイルを操作する

NERDTree

GitHub - scrooloose/nerdtree: A tree explorer plugin for vim.

ディレクトリをツリー表示することができるプラグインです。GUIっぽい表示になります。
<Space>nnでNERDTreeを起動、<Space>nfで今開いているファイルがあるディレクトリを開いた状態でNERDTreeを起動する設定にしています。

だいたいvimを起動した後、NERDTreeを起動、目的のファイルをtでタブで開いて開発をしていることが多いです。 ディレクトリ/ファイルの操作も、maで新規作成、mmで名前変更がvimから出ずに簡単にできます。

nnoremap [nerdtree]    <Nop>                                                                                                                  
nmap     <Space>n [nerdtree]
nnoremap <silent>[nerdtree]n :NERDTreeToggle<CR>
nnoremap <silent>[nerdtree]f :NERDTreeFind<CR>

denite

GitHub - Shougo/denite.nvim: Dark powered asynchronous unite all interfaces for Neovim/Vim8

正直、使いこなせてない(´・ω・`)
設定がうまくいってないのか、Deniteを起動した後ノーマルモードにできないんです。Escでウィンドウ閉じちゃうの。なぜー。

とりあえず今はgrepする時ぐらいにしか使っていません。ノーマルモードにできないので、インサートモードで検索結果からファイルを絞り込んで選択して使っています。 deniteはいろんなことができるようなので、勉強して使いこなしたい。

let g:python3_host_prog = expand('/usr/local/bin/python')
let g:unite_enable_start_insert=1
nmap <Space>d [denite]
nnoremap <silent> [denite]h :<C-u>Denite file_mru<CR>
nnoremap <silent> [denite]g  :<C-u>Denite grep -buffer-name=search-buffer-denite<CR>
nnoremap <silent> [denite]r :<C-u>Denite -resume -buffer-name=search-buffer-denite<CR>

Gitを操作する

fugitive

GitHub - tpope/vim-fugitive: fugitive.vim: a Git wrapper so awesome, it should be illegal

vim上でGitの操作が一通りできます。例えば:Gdiffと打つと、vimdiffで表示してくれます。 色々できますが、わたしは:Gdiffを一番使ってます。commitとかもできるけど使ってない。

f:id:skanoemon:20170402175442p:plain

gitgutter

GitHub - airblade/vim-gitgutter: A Vim plugin which shows a git diff in the gutter (sign column) and stages/undoes hunks.

Gitで管理しているファイルを開いているときに、変更した内容を視覚的にわかりやすく表示してくれます。+で追加、-で削除、~で変更。

f:id:skanoemon:20170402175945p:plain

プログラムを書く

neosnippet / neosnippet-snippets

GitHub - Shougo/neosnippet.vim: neo-snippet plugin contains neocomplcache snippets source

補完機能。もうこれなしでは開発できない。 スニペットファイルはこちらのファイルを使わせていただいています。
VimでPHPの補完にスニペットを使ったら捗った件 - Qiita

スニペットを置くディレクトリを設定して、落としてきたスニペットファイルをディレクトリに置いて。

let g:neosnippet#enable_snipmate_compatibility = 1
let g:neosnippet#snippets_directory='~/.vim/dein/vim-snippets/snippets'

するとこうなる。 f:id:skanoemon:20170402180640p:plain

QuickRun

GitHub - thinca/vim-quickrun: Run commands quickly.

保存していなくてもvim上でプログラムが実行できます。
<Space>rでQuickRunを起動、Ctrl+cでプログラムを強制終了の設定にしています。qでバッファを閉じます。
設定が少し難しかったです。成功した場合はbufferに、失敗した場合はquickfixに出力させて該当箇所に飛べるようにしています。

nnoremap <silent><Space>r :QuickRun<CR>                                                                                              
nnoremap <expr><silent> <C-c> quickrun#is_running() ? quickrun#sweep_sessions() : "\<C-c>"
au FileType qf nnoremap <silent><buffer>q :quit<CR>
let g:quickrun_config = {
      \'_' : {
      \   'outputter/buffer/split' : ':botright 8sp',
      \   'outputter/error/success' : 'buffer',
      \   'outputter/error/error'   : 'quickfix',
      \   "outputter/buffer/into" : '1',
      \   'outputter/quickfix/errorformat' : '%f:%l,%m in %f on line %l',
      \   'outputter/buffer/close_on_empty' : 1,
      \   'outputter' : 'error',
      \},
      \}

lightline

GitHub - itchyny/lightline.vim: A light and configurable statusline/tabline for Vim

vimのステータスがかっこよくできます。モチベーションが上がる。かっこいい見た目だけでなく、実用的にもなります。
vim-powerlineのフォントのパッチをあてると、もっとリッチな感じに見た目を変更できますが、面倒でやってません。

set laststatus=2
set t_Co=256
let g:lightline = { 
    ¦ \ 'colorscheme': 'solarized',
    ¦ \ 'active': {
    ¦ \   'left': [ [ 'mode', 'paste' ],
    ¦ \             [ 'fugitive', 'readonly', 'filename', 'modified' ] ] 
    ¦ \ },
    ¦ \ 'component': {
    ¦ \   'readonly': '%{&filetype=="help"?"":&readonly?"✖︎":""}',
    ¦ \   'modified': '%{&filetype=="help"?"":&modified?"+":&modifiable?"":"-"}',
    ¦ \   'fugitive': '%{exists("*fugitive#head")?fugitive#head():""}'
    ¦ \ },
    ¦ \ 'component_visible_condition': {
    ¦ \   'readonly': '(&filetype!="help"&& &readonly)',
    ¦ \   'modified': '(&filetype!="help"&&(&modified||!&modifiable))',
    ¦ \   'fugitive': '(exists("*fugitive#head") && ""!=fugitive#head())'
    ¦ \ }
    ¦ \ }

ステータスラインの左側に、vimのモード/ブランチ名/ファイル名/ファイルの変更内容を。右側はデフォルトの設定で、ファイルタイプやカーソルの位置を表示しています。 ちなみに、ブランチ名を表示させるためには、fugitiveのプラグインが必要です。

f:id:skanoemon:20170402223532p:plain

indentLine

GitHub - Yggdroot/indentLine: A vim plugin to display the indention levels with thin vertical lines

インデントを可視化してくれます。

まとめ

プラグイン入れていくのが楽しくてどんどん入れたものの、プラグインを使う意識をしないと使い方を忘れてしまうなあ、と。プラグイン入れただけで満足してはいけない。