サポート用ページ

このページはサポート用の一時的な書込に使用するページです。
書き込まれたコメントは、適当な時期に削除することがあります。

QFixHowmテスト版

連絡先

個人的に使っていたスクリプトです。
指定したウィンドウ名のウィンドウをクローズ/移動します。

""""""""""""""""""""""""""""""
" 各種ウィンドウをクローズ/移動
""""""""""""""""""""""""""""""
" gs に割り当てる場合
nnoremap <silent> gs :call feedkeys("g,qq")<CR>
nnoremap <silent> gs :<C-u>call MyWindowControl('close')<CR>
" 'move'なら移動
" nnoremap <silent> gs :<C-u>call MyWindowControl('move')<CR>

" クローズ/移動したいウィンドウ名前を優先順に指定
" 一つも存在しない場合は QuickFixウィンドウをトグル
let g:MyWindowControlList = [
      \ "__MRU_Files__",
      \ "__QFix_List__",
      \ "__Howm_Files__",
      \ "__Calendar__",
      \ "__submenu__",
      \ "__Tag_List__"
      \]

function! MyWindowControl(mode)
  if !exists('g:MyWindowControlList')
    return
  endif
  let movemode = a:mode =~ '\cmove' ? 1 : 0
  let bname = bufname(bufnr('%'))
  for n in g:MyWindowControlList
    if bname =~ n
      close
      return
    endif
    let winnr = bufwinnr(n)
    if winnr == -1
      continue
    endif
    exe winnr.'wincmd w'
    if movemode
      return
    endif
    close
    wincmd p
    return
  endfor
  if exists('*ToggleQFixWin')
    ToggleQFixWin
  endif
endfunction

単純なON/OFFだけなら以下でも可能です。

nnoremap <silent> gs :<C-u> call ToggleWindow('__Calendar__')<CR>
function! ToggleWindow(name)
  if bufwinnr(a:name) == -1
    call feedkeys("g,q")
  else
    exe bufwinnr(a:name) . 'wincmd w'
    close
    wincmd p
  endif
endfunction