インフラエンジニアbacchiのわかったことまとめ

bacchi.me

わしのvim

いろんなブログとかを見まくってvim を育てています。

私が今使っているvim の設定内容を晒すついでに、設定の手順も乗っけておきます。

ステキ vim 環境を手に入れる事前準備

ステキvim に欠かせない、colorscheme と NeoBundle の準備を行います。

## colorscheme 入れる
$ mkdir -p ~/.vim/colors
$ wget --trust-server-names http://www.vim.org/scripts/download_script.php?src_id=9750
### Mac(Yosemite)だと、DLしたファイル名がリクエストURIになってしまう。
### 必要に応じて下記を実行
$ mv download_script.php?src_id=9750 ~/.vim/colors/molokai.vim
$ cp ~/molokai.vim ~/.vim/colors/

## NeoBundle を入れる
$ mkdir -p ~/.vim/bundle
$ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
$ git clone https://github.com/Shougo/vimproc ~/.vim/bundle/vimproc

## バックアップ用ディレクトリ作成
$ mkdir ~/.vim-backup

これで事前準備は完了。

.vimrc を記述する

事前準備が終わったら、.vimrcを仕込みましょう。

下記の.vimrc のバックアップの設定ですが、
私の環境のパスが入っていますので、ご注意ください。

## .vimrcの設定
$ vim ~/.vimrc
---

" 挙動を vi 互換ではなく、vim のデフォルト設定にする
set nocompatible

" 一旦ファイルタイプ関連を無効化する
filetype off

""""""""""""""""""""""""""""""
" プラグインのセットアップ
""""""""""""""""""""""""""""""
if has(\'vim_starting\')
  set nocompatible               " Be iMproved

  " Required:
  set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

" Required:
call neobundle#begin(expand(\'~/.vim/bundle/\'))

" Let NeoBundle manage NeoBundle
" Required:
NeoBundleFetch \'Shougo/neobundle.vim\'

" ファイルオープンを便利に
NeoBundle \'Shougo/unite.vim\'
" Unite.vimで最近使ったファイルを表示できるようにする
NeoBundle \'Shougo/neomru.vim\'
" ファイルをtree表示してくれる
NeoBundle \'scrooloose/nerdtree\'
" Gitを便利に使う
" http://qiita.com/tashua314/items/35521f9bada5fe00cca7
NeoBundle \'tpope/vim-fugitive\'

" Rails向けのコマンドを提供する
" http://qiita.com/alpaca_taichou/items/ab2ad83ddbaf2f6ce7fb#vim-rails
NeoBundle \'tpope/vim-rails\'
" Ruby向けにendを自動挿入してくれる
NeoBundle \'tpope/vim-endwise\'

" コメントON/OFFを手軽に実行
NeoBundle \'tomtom/tcomment_vim\'
" シングルクオートとダブルクオートの入れ替え等
NeoBundle \'tpope/vim-surround\'

" インデントに色を付けて見やすくする
NeoBundle \'nathanaelkane/vim-indent-guides\'
" ログファイルを色づけしてくれる
NeoBundle \'vim-scripts/AnsiEsc.vim\'
" 行末の半角スペースを可視化
NeoBundle \'bronson/vim-trailing-whitespace\'
" less用のsyntaxハイライト
NeoBundle \'KohPoll/vim-less\'

call neobundle#end()

" Required:
filetype plugin indent on

" If there are uninstalled bundles found on startup,
" this will conveniently prompt you to install them.
NeoBundleCheck
""""""""""""""""""""""""""""""

""""""""""""""""""""""""""""""
" 各種オプションの設定
""""""""""""""""""""""""""""""
" スワップファイル無効化
set noswapfile
" カーソルが何行目の何列目に置かれているかを表示する
set ruler
" コマンドラインに使われる画面上の行数
set cmdheight=2
" エディタウィンドウの末尾から2行目にステータスラインを常時表示させる
set laststatus=2

""""""""""""""""""""""""""""""
" ステータス行以下の情報を表示させる
" http://sourceforge.jp/magazine/07/11/06/0151231
""""""""""""""""""""""""""""""
" 編集中のファイル名
" 編集中のファイルフォーマット(DOS、Unix)
" Vimが認識している現在のファイルタイプ
" カーソル位置にあるキャラクタのASCIIおよび16進値
" ドキュメント中の位置を示す行および列番号
" ファイルの長さ(行数)
""""""""""""""""""""""""""""""
set statusline=%F%m%r%h%w [FORMAT=%{&ff}] [TYPE=%Y] [ASCII=%03.3b] [HEX=%02.2B] [POS=%04l,%04v][%p%%] [LEN=%L]
" ステータス行に現在のgitブランチを表示する
set statusline+=%{fugitive#statusline()}
" ウインドウのタイトルバーにファイルのパス情報等を表示する
set title
" コマンドラインモードでキーによるファイル名補完を有効にする
set wildmenu
" 入力中のコマンドを表示する
set showcmd
" バックアップの設定
set backup
set backupdir=/home/bacchi/.vim-backup
let &directory = &backupdir
" 小文字のみで検索したときに大文字小文字を無視する
set smartcase
" 検索結果をハイライト表示する
set hlsearch
" 暗い背景色に合わせた配色にする
set background=dark
" タブ入力を複数の空白入力に置き換える
set expandtab
" 検索ワードの最初の文字を入力した時点で検索を開始する
set incsearch
" 保存されていないファイルがあるときでも別のファイルを開けるようにする
set hidden
" 不可視文字を表示する
set list
" タブと行の続きを可視化する
set listchars=tab:> ,extends:<
" 行番号を表示する
set number
" 対応する括弧やブレースを表示する
set showmatch
" 改行時に前の行のインデントを継続する
set autoindent
" 改行時に入力された行の末尾に合わせて次の行のインデントを増減する
set smartindent
" タブ文字の表示幅
set tabstop=2
" vimが挿入するインデントの幅
set shiftwidth=2
" 行頭の余白内で Tab を打ち込むと、\'shiftwidth\' の数だけインデントする
set smarttab
" カーソルを行頭、行末で止まらないようにする
set whichwrap=b,s,h,l,,[,]
" 構文毎に文字色を変化させる
syntax on
" colorscheme の指定
colorscheme molokai
" 行番号の色
highlight LineNr ctermfg=darkyellow
""""""""""""""""""""""""""""""

" vimを立ち上げたときに、自動的にvim-indent-guidesをオンにする
let g:indent_guides_enable_on_vim_startup = 1

" grep検索の実行後にQuickFix Listを表示する
autocmd QuickFixCmdPost *grep* cwindow

""""""""""""""""""""""""""""""
" Unit.vimの設定
" http://blog.remora.cx/2010/12/vim-ref-with-unite.html
""""""""""""""""""""""""""""""
" 入力モードで開始する
let g:unite_enable_start_insert=1
" バッファ一覧
noremap  :Unite buffer
" ファイル一覧
noremap  :Unite -buffer-name=file file
" 最近使ったファイルの一覧
noremap  :Unite file_mru
" sourcesを「今開いているファイルのディレクトリ」とする
noremap :uff :UniteWithBufferDir file -buffer-name=file
" ウィンドウを分割して開く
au FileType unite nnoremap     unite#do_action(\'split\')
au FileType unite inoremap     unite#do_action(\'split\')
" ウィンドウを縦に分割して開く
au FileType unite nnoremap     unite#do_action(\'vsplit\')
au FileType unite inoremap     unite#do_action(\'vsplit\')
" ESCキーを2回押すと終了する
au FileType unite nnoremap    :q
au FileType unite inoremap    :q
""""""""""""""""""""""""""""""

""""""""""""""""""""""""""""""
" 全角スペースを表示する
" http://inari.hatenablog.com/entry/2014/05/05/231307
""""""""""""""""""""""""""""""
function! ZenkakuSpace()
    highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=darkgray
endfunction

if has(\'syntax\')
    augroup ZenkakuSpace
        autocmd!
        autocmd ColorScheme * call ZenkakuSpace()
        autocmd VimEnter,WinEnter,BufRead * let w:m1=matchadd(\'ZenkakuSpace\', \' \')
    augroup END
    call ZenkakuSpace()
endif
""""""""""""""""""""""""""""""

""""""""""""""""""""""""""""""
" 挿入モード時、ステータスラインの色を変更する
" https://sites.google.com/site/fudist/Home/vim-nihongo-ban/-vimrc-sample
""""""""""""""""""""""""""""""
let g:hi_insert = \'highlight StatusLine guifg=darkblue guibg=darkyellow gui=none ctermfg=blue ctermbg=yellow cterm=none\'

if has(\'syntax\')
  augroup InsertHook
    autocmd!
    autocmd InsertEnter * call s:StatusLine(\'Enter\')
    autocmd InsertLeave * call s:StatusLine(\'Leave\')
  augroup END
endif

let s:slhlcmd = \'\'
function! s:StatusLine(mode)
  if a:mode == \'Enter\'
    silent! let s:slhlcmd = \'highlight \' . s:GetHighlight(\'StatusLine\')
    silent exec g:hi_insert
  else
    highlight clear StatusLine
    silent exec s:slhlcmd
  endif
endfunction

function! s:GetHighlight(hi)
  redir => hl
  exec \'highlight \'.a:hi
  redir END
  let hl = substitute(hl, \'[rn]\', \'\', \'g\')
  let hl = substitute(hl, \'xxx\', \'\', \'\')
  return hl
endfunction
""""""""""""""""""""""""""""""

""""""""""""""""""""""""""""""
" 最後のカーソル位置を復元する
""""""""""""""""""""""""""""""
if has("autocmd")
    autocmd BufReadPost *
     if line("\'"") > 0 &&&& line ("\'"") <= line("$") |
       exe "normal! g\'"" |
     endif
endif
""""""""""""""""""""""""""""""

""""""""""""""""""""""""""""""
" 自動的に閉じ括弧を入力
""""""""""""""""""""""""""""""
imap { {}
imap [ []
imap ( ()
""""""""""""""""""""""""""""""

" filetypeの自動検出
filetype on

これで一旦準備完了。

次に vim を立ち上げます。  
すると、neobundle の未インストールのバンドルのインストールが始まります。

こんなかんじ。

$ vim
Not installed bundles:  [\'vim-rails\', \'vim-endwise\', \'vim-less\', \'vim-trailing-whitespace\', \'nerdtree\', \'vim-surround\', \'neomru.vim\', \'AnsiEsc.vim\', \'tcomment_vim\', \'unite.vim\', \'vim-fugitive\', \'vim-indent-guides\']
Install bundles now?
(y)es, [N]o: y

[neobundle/install] Update started: (2015/01/22 14:25:04)
Press ENTER or type command to continue
( 1/12) [=                   ] vim-less
( 2/12) [===                 ] neomru.vim
( 3/12) [=====               ] vim-rails
( 4/12) [======              ] AnsiEsc.vim
[neobundle/install] ( 1/12): |vim-less| Updated
[neobundle/install] |vim-less|  -> 9426a5168acbc12a5dd8f3b01acff59db6ba36e1
[neobundle/install] ( 2/12): |neomru.vim| Updated
[neobundle/install] |neomru.vim|  -> 7df9999b841228661ff73909c5b9e34952331e22
[neobundle/install] ( 3/12): |vim-rails| Updated
[neobundle/install] |vim-rails|  -> b5ccdb47f0b0001bf263a80315d3b6bca7bc3b2e
[neobundle/install] ( 4/12): |AnsiEsc.vim| Updated
[neobundle/install] |AnsiEsc.vim|  -> d2bb7878622e4c16203acf1c92a0f4bc7ac58003
( 5/12) [========            ] vim-endwise
( 6/12) [==========          ] tcomment_vim
( 7/12) [===========         ] vim-surround
( 8/12) [=============       ] vim-indent-guides
[neobundle/install] ( 5/12): |vim-endwise| Updated
[neobundle/install] |vim-endwise|  -> bba43b831ae0485cf9b86d16340a6a314b927391
[neobundle/install] ( 6/12): |tcomment_vim| Updated
[neobundle/install] |tcomment_vim|  -> aaf75b948f95e79bd2ff78f17269a9c933603dfe
[neobundle/install] ( 7/12): |vim-surround| Updated
[neobundle/install] |vim-surround|  -> fa433e0b7330753688f715f3be5d10dc480f20e5
[neobundle/install] ( 8/12): |vim-indent-guides| Updated
[neobundle/install] |vim-indent-guides|  -> eec1b629dc4cfa3986d20f21d4b4489732cd3f5a
( 9/12) [===============     ] nerdtree
(10/12) [================    ] vim-fugitive
(11/12) [==================  ] vim-trailing-whitespace
(12/12) [====================] unite.vim
[neobundle/install] ( 9/12): |nerdtree| Updated
[neobundle/install] |nerdtree|  -> 3b98a7fcae8f9fff356907171f0406ff8cd28921
[neobundle/install] (10/12): |vim-fugitive| Updated
[neobundle/install] |vim-fugitive|  -> 34719016ec934609387e90804ad49b3d221f0b19
[neobundle/install] (11/12): |vim-trailing-whitespace| Updated
[neobundle/install] |vim-trailing-whitespace|  -> d4ad27de051848e544e360482bdf076b154de0c1
[neobundle/install] (12/12): |unite.vim| Updated
[neobundle/install] |unite.vim|  -> f7797945465c8fcb49d8519d1e122e680ae673a8
[neobundle/install] Installed/Updated bundles:
vim-less
neomru.vim
vim-rails
AnsiEsc.vim 
vim-endwise
tcomment_vim
vim-surround
vim-indent-guides
nerdtree
vim-fugitive
vim-trailing-whitespace
unite.vim
[neobundle/install] Update done: (2015/01/12 14:27:14)
Press ENTER or type command to continue

なんか聞かれますが、はいはい言っとけばOK


2015/02/22 追記
vim を立ちあげて、

Install bundles now? y

としてもエラーが出てインストール出来ない事象が有りました。
ちなみにMacOS 10.9 でした。

そのような場合はvimを立ち上げて下記コマンドを実行してみてください

:NeoBundleInstall

追記終わり


これで設定完了!

ステキvimで作業が捗るねウフフ

  • B!