.vimrcの設定でVimをもっと良くする

.vimrcとは

.vimrcの設定をせずにVim元来の機能のみでコードを書いていないでしょうか。言わずもがなVimはプラグインやVimスクリプト、自作コマンドなど拡張していくことで機能性を何処までも高めていけるエディタです。

.vimrcもその内の一つです。自身の好みに合わせてキーバインドを変えたり、ショートカットを作ったりと様々なカスタマイズをすることが可能です。言うなればVimは刀です。叩くことで強度を増すのです。以下の中にVimmerの皆さんのお役に立てるものが少しでもあれば幸いです。

初めて.vimrcを設定するという方も気軽に~/.vimrcにコピペされてみて下さい。

My .vimrc

" ①「shift + %」でブレース移動
source $VIMRUNTIME/macros/matchit.vim
" ②タブ幅を空白2文字
set tabstop=2
set shiftwidth=2
set expandtab
" ③行番号表示
set number
" ④Exコマンドのタブ補完
set wildmenu
set wildmode=full
" ⑤コマンド履歴数上限
set history=500
" ⑥vimgrep /pattern/ ** | cw の「 | cw」を省略
autocmd QuickFixCmdPost *grep* cwindow
" ⑦クリップボードへのコピーを有効にする
set clipboard+=unnamed
" ⑧pasteオプションのトグルをf5キーにする
set pastetoggle=<f5>
" ⑨ビープ音を消す
set belloff=all
" ⑩大文字・小文字を区別する設定と、自動判別設定
set ignorecase
set smartcase
" ⑪マッチをハイライト。マッチハイライト一時無効化のショートカット。
set hlsearch
nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>
" ⑫マッチ件数を表示
set shortmess-=S
" ⑬ノーマルモードのキーマップを変更
nnoremap / /\v
" ⑭マウス操作を有効にする。
set mouse=a
set ttymouse=xterm2
" ⑮ファーストマッチプレビュー
set incsearch
" ⑯現在の行をハイライト
set cursorline
" ⑰<Alt + k/j>で行を移動。
:nnoremap ˚ <Up>"add"ap<Up>
:nnoremap ∆ "add"ap
" ⑱escを<Ctrl + j>に変更
:noremap <C-j> <esc>
:noremap! <C-j> <esc>
" ⑲行が折り返される時に表示行単位での移動できるようにする
nnoremap j gj
nnoremap k gk
" ⑳ステータスラインを常に表示
set laststatus=2
" ㉑コマンドラインの上下方向キーを<Ctrl + p>と<Ctrl + n>にキーバインド
cnoremap <C-p> <Up>
cnoremap <C-n> <Down>
" ㉒スペースでベージ送り
nnoremap <Space> <C-f>
" ㉓ノーマルモードで<Ctrl + u>で:も削除
cnoremap <C-u> <C-u><BS>
" ㉔コマンドモードの補完候補をポップアップ表示
set wildoptions=pum

いきなり難しい文字列を羅列したので少し驚いたかもしれません。今後まとめる中で触れていくものもあるので、とりあえず今は.vimrcに記述だけしておいて難しい所は後で理解するでもいいと思います。

①について見ていきましょう。例えばカーソルが下のようなテキストの<html>の何処かにあるとして、<Shift + %>を入力するとカーソルが</html>の何処かに移動します。

<html>
  <h1>見出し1</h1>
  <h2>見出し2</h2>
</html>

最近のVimはプラグインを入れなくても上記の設定を入れれば、大抵の言語に対してブレース移動が可能になるようです。ただし言語によっては非対応の場合もあるので、その場合はプラグインをお入れください。

次は②です。通常タブ幅がどのくらいの文字幅を持つかはOSの設定によりけりです。標準だと空白6~8文字分程度だったと思います。各々の開発ルールに合わせて設定して下さい。

お次は③です。今後Vimを学んでいけば分かる事ですが、絶対に行番号が見えていた方が生産性が上がります。この設定を入れて常時行番号を表示するようにしましょう。

続いて④を見てみましょう。ExコマンドというのはVimで編集中に「:」を入力してから実行するコマンドの事です。その際にExコマンドを途中まで入力してからtabを押すと補完してくれるのですが、それを一覧表示して選ぶ形式に設定します。

⑤の設定はExコマンドの参照履歴の表示上限数を設定します。標準だと20個です。参照する方法は「:」の後に↑や↓で呼び出せます。ちなみに再起動しても履歴は残っています。

⑥の設定は:vimgrepでファイル内・外に対するgrep検索の結果を別窓に一覧表示して選択する形式にします。

⑦はヤンクやバッファに格納した内容がクリップボードにも格納されるようにする設定です。

⑧例えば外部記事からインデントを含むソースコード等をペーストしようとした場合に、autoindentが働いて改行の度に勝手にインデントが追加されて意図しない貼り付け方になった経験が無いでしょうか?
:set pasteとすると挿入モードでのキーマッピングや省略記法等の設定を無効化する事が出来ます。常時有効だとそれはそれで困るので挿入モードの時に、pasteオプションをf5キーでトグル出来るようにしています。

⑨ビープ音を消す事が出来ます。自分はこの設定を入れていません。あったほうがむしろ分かりやすいので。人によります。

⑩小文字のみ検索時は大文字・小文字を区別しない。大文字を含む検索時は大文字・小文字を区別する。小文字のみ検索時で大文字・小文字を区別する場合は「\C」を付与する。

⑪検索結果のマッチ部分をハイライトする。2行目でCtrl + lでハイライトを一時的に消すショートカットキーを登録します。

⑫検索結果のマッチ数を表示する。

⑬標準でvery magic正規表現を使用する。very magic正規表現の方がキーストロークが減ります。エスケープ対応が減るので。よく分からなくても設定しておいて損は無いです。

⑭マウス操作を有効にします。スクロールやドラッグでのヴィジュアル選択が可能になります。コーディング中には基本使いませんが、コードリーディング等で使用している気がします。2行目の設定でtmux等の多重ttyを使用中でもマウス操作を有効にします。

⑮検索モードの時にキー入力時点でマッチするものをプレビューさせる。

⑯カーソル位置の行に下線を表示する。

⑰カーソル行を上下に移動する。Mac版のvimでは<A-k><A-j>でキーマッピング出来ないので、普通に文字を入力します。

<Ctrl + j>でノーマルモードに戻れる様にする。標準の<Esc><Ctrl + [でも戻れる。

⑲Vimには論理行と表示行という概念があり、一行が長く折り返される場合にjを押すと、次の論理行へ移動します。次の表示行へ移動するにはgjを押す必要があります。
多くの場合は折り返される場合も、表示行へ移動したほうが便利なので、常に表示行の移動のみと設定してしまいます。

⑳ステータスラインを常に表示させておくとどのウィンドウにどのファイルを配置しているのかすぐに分かります。:fコマンドでも確認は出来ますが最初から表示されている方が楽です。0だと表示されず、1だとウィンドウが2つ以上の時に表示されるようになります。

㉑コマンドラインでを押すとコマンド履歴を参照出来るのはご存知かと思いますが、これにフィルタを付けられることは意外と知られていないかもしれません。例えば:viと途中まで入力した状態でを押すと前方一致にマッチするコマンド履歴のみを遡る事が出来ます。これを<Ctrl + p><Ctrl + n>でも使えるようにします。

㉒スペースキーをページ送りにします。<Shift + Space>もキーマッピングを設定したかったのですが現在のMac Vimでは設定出来ませんでした。

㉓コマンドラインで<Ctrl + u>と入力した時に「:」も残さず削除します。

㉔コマンドラインの補完候補がポップアップ表示されるようになりました。これまでは横長に表示されていたので見やすくはなりました。
※ちなみにVersion 8.2.4325のパッチからVimに適応されました。

終わりに

本当はこれだけじゃなくプラグインの設定も記述されていたのですが、話が長くなってしまうので今回は割愛します。もしプラグインの管理にも興味がお有りの方はこちらを御覧ください。やってみると意外と簡単です。

ニッチなプラグインの情報を仕入れたら随時投稿していくと思います。またこの記事に関しましても面白い.vimrcを学ぶ度に更新していきます。

コメントを残す

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

CAPTCHA