vim-users.jp

Hack #74: 簡単にvimrcを編集する

Posted at 2009/09/18
このエントリーをはてなブックマークに追加

Vimの戦闘力を効率的に上昇させるためには、素早く.vimrcや.gvimrcを編集できる環境が必要となります。ここではVimの設定を工夫することで、.vimrcの変更を即Vimに反映させる方法について解説します。

.vimrcや.gvimrcを編集するためのKey-mappingを定義する

まずはすぐに.vimrcや.gvimrcを編集できるように、.vimrcにKey-mappingを定義しましょう。

nnoremap <silent> <Space>ev  :<C-u>edit $MYVIMRC<CR>
nnoremap <silent> <Space>eg  :<C-u>edit $MYGVIMRC<CR>
$MYVIMRCというのは特殊な環境変数で、現在使用している.vimrcへのパスが含まれています。$MYGVIMRCも同様に、.gvimrcへのパスが含まれています。 環境によって.vimrcや.gvimrcへのパスは異なるため、これを利用することで確実に.vimrcや.gvimrcを編集することができます。

.vimrcや.gvimrcの変更を反映するためのKey-mappingを定義する

即座に.vimrcや.gvimrcを編集できるように設定しても、設定を反映させるためにはVimをいったん再起動しなければならず不便です。 sourceコマンドを用いれば.vimrcや.gvimrcを再度読み込むことができるので、.vimrcや.gvimrcに行った変更を現在のVimに反映できるように、 .vimrcにKey-mappingを定義しましょう。

" Load .gvimrc after .vimrc edited at GVim.
nnoremap <silent> <Space>rv :<C-u>source $MYVIMRC \| if has('gui_running') \| source $MYGVIMRC \| endif <CR>
nnoremap <silent> <Space>rg :<C-u>source $MYGVIMRC<CR>

.vimrcや.gvimrcを変更すると、自動的に変更が反映されるようにする

しかし変更を適用するたびに、いちいちキーを入力するのは面倒です。自動的に変更が反映されるように.vimrcに設定してしまいましょう。

" Set augroup.
augroup MyAutoCmd
    autocmd!
augroup END

if !has('gui_running') && !(has('win32') || has('win64'))
    " .vimrcの再読込時にも色が変化するようにする
    autocmd MyAutoCmd BufWritePost $MYVIMRC nested source $MYVIMRC
else
    " .vimrcの再読込時にも色が変化するようにする
    autocmd MyAutoCmd BufWritePost $MYVIMRC source $MYVIMRC |
                \if has('gui_running') | source $MYGVIMRC
    autocmd MyAutoCmd BufWritePost $MYGVIMRC if has('gui_running') | source $MYGVIMRC
endif

記述の注意

.vimrcや.gvimrcを何度も読み込む設定にしていると、記述の仕方によってはエラーが発生したり動作がおかしくなったりします。 ここでは、それらへの対策を解説します。

関数やコマンドの定義

普通関数やコマンドを定義するときには、commandfunctionを使うことがあるかも知れませんが、これらはすでにある関数やコマンドを上書きできないため、設定ファイルを何度も読み込ませるとエラーとなります。上書きできるように、command!function!を使用しましょう。

autocmdの定義

autocmdは常に追加されます。設定ファイルを何度も読み込むとautocmdが頻繁に追加され、Vimの動作がおかしくなる原因となります。 これを防ぐためには、.vimrcの先頭で一度autocmdをリセットします。

autocmd!

・・・・
autocmd FileType * set textwidth=0
autocmd FileType * set formatoptions-=ro
autocmdを全部削除するのに抵抗があるのならば、augroupを設定するとさらに便利になります。詳しくは:help augroupを参照してください。
augroup MyAutoCmd
    autocmd!
augroup END

・・・・
autocmd MyAutoCmd FileType * set textwidth=0
autocmd MyAutoCmd FileType * set formatoptions-=ro

オプションの設定

オプションの初期値に値を追加する場合、次のように設定することがあると思います。

set hoge_option+=piyo
しかし設定ファイルを何度も読み込ませる場合、前の値が追加されてしまい、動作がおかしくなります。.vimrcには次のように設定し、一度初期値をロードするようにしましょう。
set hoge_option&
set hoge_option+=piyo

ここに挙げたことは、「Vimの極め方」やWEB +DB PRESS Vol.52の特集「Vimの流儀」にも詳しく書いてあります。どちらもkana氏の書いた必読の資料なので、参考にすると良いでしょう。

Shougo

もどる
blog comments powered by Disqus