Hatena::Groupvim

一時バッファの管理

一時バッファの管理

WindowManagerオブジェクト

let WindowManager = { 'buf_nr' : -1 }

function WindowManager.activate()
  if !bufexists(self.buf_nr)
    new
    call WindowManager._set_misc_options()
    file `='[MyScratch]'`
    let self.buf_nr = bufnr('%')
  elseif bufwinnr(self.buf_nr) == -1
    execute self.buf_nr 'sbuffer'
    call WindowManager._set_misc_options()
  elseif bufwinnr(self.buf_nr) != bufwinnr('%')
    execute bufwinnr(self.buf_nr) 'wincmd w'
  endif
endfunction

function WindowManager.deactivate()
  execute self.buf_nr 'bdelete'
endfunction

function WindowManager._set_misc_options()
  setlocal bufhidden=delete
  setlocal buftype=nofile
  setlocal noswapfile
  setlocal nobuflisted
endfunction

使い方

一時バッファを開く
:call WindowManager.activate()
一時バッファを表示しているウィンドウをすべて閉じる
:call WindowManager.deactivate()

ノート

  • 使い回すたびにバッファ番号が際限なく増えてしまうのを防ぐため、バッファ名を固定し(ここでは[MyScratch]) bufhidden=delete としている。
  • スワップファイル作成時の警告を抑止するため、バッファ名に特殊な記号が含まれる場合、無名のバッファを作成し(new)、適宜オプションを設定(WindowManager._set_misc_options())し、それからバッファ名を変更する(file `='...'`)。
  • バッファ名が数字のみのバッファが存在する場合の挙動が不明瞭なので、バッファ番号を指定してバッファを切り替える場合はbuffer {番号}ではなく{番号} bufferを使う。