前回の記事では、Vimのおすすめのプラグインを紹介しました。 今回は、引き続きVimについて、おすすめの基本設定やキーマップなどを紹介します。

動作環境

この記事の内容は、以下の環境において動作を確認しています。

  • OS X 10.11.5
  • iTerm 3.0.4
  • Vim 7.4

おすすめの基本設定

以下に、Vimのおすすめの基本設定を、簡単な説明つきで示します。

各設定は、コマンドラインモードで:set autoindentのように実行することで動作を確認できます。 導入の際の参考にしてみてください。

" 改行時に自動でインデントを行なう
set autoindent

" ファイルが外部で変更された際に自動で読み込む
set autoread

" バックスペースの影響範囲を設定する
set backspace=indent,eol,start

" OSとクリップボードを共有する
set clipboard=unnamed,autoselect

" 強調表示する列を設定する
set colorcolumn=80

" 未保存ファイルの終了時に保存確認を行なう
set confirm

" カーソル行を強調表示する
set cursorline

" 文字コードを設定する
set encoding=utf8
set fileencodings=utf-8,iso-2022-jp,euc-jp,sjis

" タブの代わりにスペースを挿入する
set expandtab

" ファイル変更中に他のファイルを表示可能にする
set hidden

" コマンドラインモードで保存する履歴数を設定する
set history=1000

" 検索結果をハイライト表示する
set hlsearch

" 大文字と小文字を区別せず検索する
set ignorecase

" インクリメンタルサーチを有効にする
set incsearch

" ステータスバーを常に表示する
set laststatus=2

" 不可視文字を表示する
set list

" 不可視文字の表示方法を設定する
set listchars=eol:¬

" マウスを有効にする
set mouse=a

" ファイル上書き時にバックアップをとらない
set nobackup
set nowritebackup

" スワップファイルを作成しない
set noswapfile

" 行番号を表示する
set number

" ルーラーを表示する
set ruler

" カーソル行の上下へのオフセットを設定する
set scrolloff=4

" インデントでずれる幅を設定する
set shiftwidth=2

" 入力中のコマンドを表示する
set showcmd

" 対応するカッコを強調表示する
set showmatch

" タブバーを常に表示する
set showtabline=2

" 検索文字列に大文字が含まれている場合は区別して検索する
set smartcase

" 改行入力行の末尾にあわせてインデントを増減する
set smartindent

" コンテキストに応じたタブの処理を行なう
set smarttab

" タブやバックスペースで処理するスペースの数を設定する
set softtabstop=2

" 新しいウィンドウを下/右に開く
set splitbelow
set splitright

" タブ幅を設定する
set tabstop=2

" 編集中のファイル名を表示する
set title

" ビープを無効にする
set visualbell t_vb=

" 行頭・行末の左右移動で行を移動する
set whichwrap=b,s,h,l,<,>,[,]

" コマンドラインモードでの補完を有効にする
set wildmenu

" コマンドラインモードでの補完方法を設定する
set wildmode=list:longest,full

" 行を折り返す
set wrap

" 検索時に最後まで移動したら最初に戻る
set wrapscan

おすすめのキーマップ

続いて、Vimでのおすすめのキーマップを以下に示します。

" 表示行で移動する
noremap j gj
noremap k gk

" 行頭・行末に移動する
noremap <Leader>h ^
noremap <Leader>l $

" 保存・終了する
nnoremap <Leader>w :w<CR>
nnoremap <Leader>q :q<CR>

" タブを移動する
nnoremap <Leader>t gt
nnoremap <Leader>T gT

" ウィンドウ間を移動する
nnoremap <Leader><Tab> <C-w>w

" 検索によるハイライト表示を解除する
nnoremap <Esc><Esc> :<C-u>nohlsearch<CR>

" インサートモードから抜ける
inoremap jj <ESC>

を設定する

Vimでは、<Leader>と呼ばれるプレフィックスを設定できます。 筆者はこれに<Space>を割り当てています。

let mapleader = "\<Space>"

キーマップ設定時の注意

たとえばvim-gitgutterをインストールしていると、<Leader>hsにキーマップが設定されます。 このため、行頭に移動しようと<Leader>hを入力しても、入力待ちが発生してしまいます。

設定したキーマップの挙動がおかしい場合は、プラグインによるキーマップを疑い、必要に応じて無効化しましょう。 キーマップの一覧は:mapコマンドで確認できます。

" vim-gitgutterのキーマップを無効にする
let g:gitgutter_map_keys = 0

付録:おすすめのカーソル

以下はOS X+iTermにおける設定となりますが、インサートモード時にカーソルの形状を変更することができます。

let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"
let &t_SR = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=2\x7\<Esc>\\"
let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\"

あわせて読みたい

おわりに

前回のプラグインの紹介記事と含めて、開発しやすいVim環境が整ったのではないでしょうか。

次回以降で、Zshやtmuxのカスタマイズに関する記事を書いていきたいと思います。