スパム対策として書込み時にID/PWを要求されますが、ローマ字で ほげ/ホゲ で書き込めるようになります。

条件を満たすウィンドウが開いているか判定する

  • ページ: ScriptSample
  • カテゴリー: バッファ・ウィンドウ
  • 投稿日: 2007-01-06 13:52:18 (土)

メッセージ

QuickFix? ウィンドウをトグルしたいときなど、あるウィンドウが現在開いているかどうかを判定したいことがある。
そのような場合、特に判定関数は用意されていないので、全ウィンドウをなめて判定するしかないようである。

" 条件を満たすウィンドウが開いているなら、そのウィンドウ番号を返す。
" 開いていないなら 0 を返す。
function! FindWindow()
  let winnr_save = winnr()
  let wincount = winnr("$")
  let i = 1
  while i <= wincount
    exe i . "wincmd w"
    「if 条件」
      exe winnr_save . "wincmd w"
      return i
    endif
    let i = i + 1
  endwhile
  exe winnr_save . "wincmd w"
  return 0
endfunction

ここで「if 条件」の部分には次のように書く。

プレビューウィンドウを探したいとき
if &previewwindow

QuickFix ウィンドウを探したいとき
if &filetype == "qf"

バッファ4番を開いているウィンドウを探したいとき
if bufnr("%") == 4

hoge.c を開いているウィンドウを探したいとき
if bufname("%") ==? "hoge.c" 

Vim7 以降では

Vim7 以降では eval() が使えるので、条件を文字列にして引数で渡すこともできる。

" 条件 pred を満たすウィンドウが開いているなら、そのウィンドウ番号を返す。
" 開いていないなら 0 を返す。
function! FindWindowIf(pred)
  let winnr_save = winnr()
  let wincount = winnr("$")
  let i = 1
  while i <= wincount
    exe i . "wincmd w"
    if eval(a:pred)
      exe winnr_save . "wincmd w"
      return i
    endif
    let i = i + 1
  endwhile
  exe winnr_save . "wincmd w"
  return 0
endfunction

使い方:

call FindWindowIf("&previewwindow")
call FindWindowIf("&filetype == 'qf'")




トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-10-14 (火) 01:13:17 (1350d)