Vim - ファイルを二重で開かない設定を使ってvimrcを開く
===追記===
普通に標準機能で出来ました
@kanno_kanno :drop ...。
2013-05-31 21:09:36 via Janetter to @kanno_kanno
コメント欄より
捕捉ですが。
:tab drop $MYVIMRC
で、同様の機能を使用する事が出来ますね。
(id:osyo-manga)
うっ...。
===追記終わり===
はじめに
Vimmerたるもの.vimrc
は頻繁に編集するものです。
私もVimmerの端くれですのでよく編集しています。
毎回:e
や:tabe
で.vimrcを開くのは面倒ですので、
以下のようなショートカットをマッピングしていました。
" .vimrcへ記述 nnoremap <Space>. :<C-u>tabedit $MYVIMRC<CR>
なお、$MYVIMRCが存在しない場合は.vimrcへのフルパスへと置き換えてください。
重複してファイルが開かれてしまう
この設定ですと、毎回常に新規タブで開きます。
すでにどこかのバッファ(ウィンドウ)で.vimrcを開いていても、です。
ずっとそれでやってきましたが、今日ふと気が向いたので、
「すでに.vimrcを開いていたらそのバッファ(ウィンドウ)を選択する」という設定を書いてみました。
.vimrcに以下を記述
function! s:find_tabnr(bufnr) for tabnr in range(1, tabpagenr("$")) if index(tabpagebuflist(tabnr), a:bufnr) !=# -1 return tabnr endif endfor return -1 " ブブー endfunction function! s:find_winnr(bufnr) for winnr in range(1, winnr("$")) if a:bufnr ==# winbufnr(winnr) return winnr endif endfor return 1 " 見つからなかった場合は最初のウィンドウ endfunction function! s:recycle_open(default_open, path) let default_action = a:default_open . ' ' . a:path if bufexists(a:path) let bufnr = bufnr(a:path) let tabnr = s:find_tabnr(bufnr) if tabnr ==# -1 execute default_action return endif execute 'tabnext ' . tabnr let winnr = s:find_winnr(bufnr) execute winnr . 'wincmd w' else execute default_action endif endfunction nnoremap <Space>. :call <SID>recycle_open('tabedit', $MYVIMRC)<CR>
これで、以下のように動きます。
- まだ.vimrcを開いていなければ新規タブで開く
- すでに.vimrcを開いていればそのウィンドウに移動する
いい感じ。