2013-08-29 9 views
7

Ben ftqf ise, konum listesi işlemek için, ben fonksiyonların get/setloclist() başka çifti olduğunu biliyorum get/setqflist()Geçerli arabellekleri ayırt etmenin en iyi yolu konum listesi veya quickfix listesi nedir?

tarafından QuickFix listesini değiştirmek için bazı işlevleri arayacak, bir autocmd var. Geçerli tampon qf-list veya location-list (Her ikisi de filetypeqf var) Biliyorum ki fonksiyonlar çağrılmalıdır ise

Benim sorunum, bilmek nedir?

Şimdiye kadar düşünebildiğim kadarıyla, hem loc hem de qf listelerinin boş olmadığını varsayalım, qf listesinde bir değişiklik yapıp mevcut arabellekle karşılaştır, eğer geçerli arabellek de değiştirilirse, qf-list aksi takdirde konum listesi olmalıdır. Sonunda değişiklikleri geri al. Ama bunun aptalca olduğunu düşünüyorum ... karar vermenin daha iyi bir yolu olmalı.

Bazı işlev/bayrak/değişken özledim mi?

+1

http://vim.1045645.n5.nabble.com/detect-QuickFix-window-list-or-LocationList-td4952180.html Bu konuya bir bakın. (İkincisi ideal olarak istediğin gibi olurdu ama bence işe yaramaz ...). Kişi, hızlı bir şekilde düzeltilmesi durumunda mevcut arabelleğin konum listesinin boş olup olmadığını görmek için sonunda boş (getloclist (0)) 'a yerleşti. – FDinoff

+0

@FDinoff evet benim durumumda iki liste de boş olabilir ve veri doldurulabilir. Değişken için – Kent

cevap

4

w:quickfix_title değişkeni, pencerede görüntülenen listeyi oluşturmak için hangi komutun kullanıldığını size söyler. Eğer kolondan sonraki ilk harf bir l ise, konum listesindesiniz.

+0

+1. Bunu daha önce bilmiyorum. ama bu yol güvenli mi? Yani loc/qf listesi setqflist() gibi bir betik tarafından ayarlanmışsa ne olur. Bu işlev ismini gösterecek ... sonra fonksiyon adına 'qf' veya' loc' anahtar sözcüğünü kontrol etmeliyim. Başka durumlar olup olmadığını bilmiyorum .. – Kent

+0

Ve başka bir sorun varsa, hızlı liste boşsa, örn. '' copen' tarafından açıldı, bu varışı okumak istisna atar. ama boş bir yer listesi açamıyoruz gibi görünüyor. Boş konum listesi penceresini elle açmayı kastediyorum. – Kent

0

Bulduğum tek güvenilir yol, geçerli pencere numarasını saklamak ve daha sonra :copen komutunu vermek. Etkin pencere numarası değişirse, lokasyon listesinde değil, quickfix listesindesiniz. Eğer değişmezse, zaten quickfix listesindeydiniz.

Ayrıca, açık pencerelerin sayısını kaydetmek ve bunu yeni açık pencerelerin sayısıyla karşılaştırmak istiyorsunuz. Daha sonra açık değilse, quickfix penceresini kapatabilirsiniz.

Son olarak, saklanan pencere numarasını ve wincmd w'u kullanarak konum listesine geri dönebilirsiniz (gerekirse).

2

Bunu yapmanın bir yolu var. İşte nasıl:

Geçerli etkin arabellekleri gösteren "ls" komutunun çıktısını alırsınız. Ardından, istediğiniz çıktıyı istediğiniz pencerenin varlığı/durumu için araştırırsınız. Quickfix veya Yer listesi penceresi ya odaklanmış ise

Aşağıdaki örnek söyleyecektir:

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 

Sana bu soruyu soran ve ben bile şimdiye kadar başka bir yerde yardım bulmaya olarak gitti kaydetti takdir : http://vim.1045645.n5.nabble.com/detect-QuickFix-window-list-or-LocationList-td4952180.html.

İnternete baktım ve hiçbir şey bulamadım. Bu sorunun problemi çözmesi gerektiğini düşünüyorum.

İlgili konular