2013-08-29 18 views
7

我有一個自動命令,如果ftqf,它會調用一些功能通過get/setqflist()區分當前緩衝區的最佳方式是位置列表還是quickfix列表?

我知道有另一對功能get/setloclist()修改quickfix列表,來處理位置列表。

我的問題是,如何知道當前緩衝區qf-listlocation-list(他們都有filetypeqf),這樣我知道哪些功能應該叫什麼名字?

到目前爲止,我能想到的是,假設loc和qf列表都不爲空,在qf-list上做一些更改,並與當前緩衝區進行比較,如果當前緩衝區也發生了變化,那麼它是qf-list ,否則應該是位置列表。最後回滾更改。但我覺得這是愚蠢的......應該有更好的方式來作出決定。

我錯過了一些函數/標誌/變量?

+1

http://vim.1045645.n5.nabble.com/detect-QuickFix-window-list-or-LocationList-td4952180.html看看這個線程。 (第二個理想情況下是你想要的,但我認爲它不工作...)。這個人最終以'empty(getloclist(0))'結算,看看當前緩衝區的位置列表是否爲空,假設它是假設的快速修復。 – FDinoff

+0

@FDinoff是在我的情況下,兩個列表可能是空的,可填充數據。 – Kent

回答

4

w:quickfix_title變量告訴您​​使用了什麼命令來生成窗口中顯示的列表。如果冒號後面的第一個字母是l,那麼您位於位置列表中。

+0

+1爲變量。我以前不知道這一點。但是這樣安全嗎?我的意思是,如果loc/qf列表是由某個腳本設置的,例如setqflist()。它會顯示這個函數的名字...然後我需要檢查函數名的關鍵字'qf'或'loc'。我不知道是否有其他情況.. – Kent

+0

還有另一個問題,如果快速清單是空的,例如用':copen'打開,讀這個var會拋出異常。但似乎我們不能打開空的位置列表..我的意思是手動打開空的位置列表窗口。 – Kent

0

我發現的唯一可靠的方法是存儲當前窗口號,然後發出:copen命令。如果活動窗口號碼發生更改,則您位於位置列表中,而不是quickfix列表。如果它沒有改變,你已經在quickfix列表中。

您還想存儲打開窗口的數量,並將其與新打開的窗口數進行比較。然後,如果它尚未打開,您可以關閉quickfix窗口。

最後,您可以使用存儲的窗口號和wincmd w跳回位置列表(如果需要)。

2

有一種方法可以做到這一點。方法如下:您

得到的「ls」命令的輸出,這表明你當前活動的緩衝區。然後,您只需搜索輸出,查看您想要的任何窗口的存在/狀態。

下面的例子會告訴你,如果集中無論是和quickfix或位置列表窗口:

function! example() 
    exec 'redir @a | ls | redir END' 
    if match(@a,'%a- "\[Location List\]"') >= 0 
      exec 'echo "Location list focused!"' 
    elseif match(@a,'%a- "\[Quickfix List\]"') >= 0 
      exec 'echo "Quickfix list focused!"' 
    else 
      exec 'echo "Neither Location or Quicklist focused!"' 
    endif 
endfunction 

我很感謝你提出這個問題,我注意到,你連這麼遠,試圖找到其他地方幫忙去:http://vim.1045645.n5.nabble.com/detect-QuickFix-window-list-or-LocationList-td4952180.html

我也環顧了互聯網,什麼都沒發現。我認爲這個答案應該可以解決問題。

相關問題