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を何度も読み込む設定にしていると、記述の仕方によってはエラーが発生したり動作がおかしくなったりします。 ここでは、それらへの対策を解説します。
関数やコマンドの定義
普通関数やコマンドを定義するときには、command
やfunction
を使うことがあるかも知れませんが、これらはすでにある関数やコマンドを上書きできないため、設定ファイルを何度も読み込ませるとエラーとなります。上書きできるように、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