Vim'in quickfix özelliğini nasıl kullanıyorsunuz?


125

Oldukça yeni bir Vim kullanıcısıyım ve öğrenme eğrisinin oldukça dik olduğunu buldum (en azından benim için). Bir arabelleği kaydettikten sonra vim'in quickfix penceresinde hataları gösteren JavaScriptLint hata denetimi için bu vim betiğini yeni yükledim .

Ancak, bundan sonra ne yapacağımı bilmiyorum .. Tüm hataları nasıl 'kaydırırım'? Quickfix 'penceresini' nasıl kapatırım? Kodumda değişiklik yaptıktan sonra hataları kontrol etmesini nasıl sağlayabilirim?

Vim quickfix belgelerine baktım ama komutların miktarı çok fazla ve istediğimi bulamıyorum. Herhangi bir yardım memnuniyetle karşılanacaktır.

Bir yan soru: .html dosyasında bulunan kod için javascriptlint'in js hatalarını kontrol etmesini sağlamanın herhangi bir yolu var mı?

Teşekkürler!

Yanıtlar:


148

Söylediğiniz gibi quickfix için birçok komut var, ancak ben bunların yalnızca küçük bir alt kümesini kullandığımı görüyorum:

:copen " Open the quickfix window
:ccl   " Close it
:cw    " Open it if there are "errors", close it otherwise (some people prefer this)
:cn    " Go to the next error in the window
:cp    " Go to the previous error in the window
:cnf   " Go to the first error in the next file
:.cc   " Go to error under cursor (if cursor is in quickfix window)

Bunu :makeve ile kullanma eğilimindeyim :vimgrep, bu yüzden Javascript tiftik denetleyicisi hakkında yorum yapamam, ancak bu size başlamak için bir şeyler vermelidir.

JavascriptLint'in genel kullanımı ile ilgili olarak, ben bir javascript programcısı değilim, ancak komut dosyası "JavascriptLint" adlı bir işlevi açığa çıkarıyor gibi görünüyor, bu yüzden onu manuel olarak çağırmak istiyorsanız kullanabilirsiniz :call JavascriptLint(). Ancak, dosyanın disk kopyasında çalışır, bu nedenle önce kaydedilmesi gerekir. Eğer (ve sadece) komut satırı jslhtml dosyalarında çalışıyorsa :call JavascriptLint(), dahili javascript'i kontrol etmek için bir html dosyası kullanabilmelisiniz. Şunları da yapabilirsiniz:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

otomatikleştirmek için. Eğer jslhtml dosyalarını desteklemiyorsa, o zaman (uygulamaya yama eklemekten veya yazardan değiştirmesini istemekten kısa), muhtemelen kayıp bir nedendir ...


Teşekkürler, bu komutlar iyi bir başlangıç, sadece biraz oynamalı ve nasıl çalıştığına alışmam gerekecek. Qf penceresinde bir hataya gitmek için: cn kullanırsam, qf penceresinden çıkmadan kodumla pencereye atlayabilir miyim? Hatalı satıra atlayabilir mi? Ve kullanma öneriniz: call işe yarıyor, ancak <script src> bağlantılarını takip ediyor ki bu benim istediğim değil.
hora

@hora: :cnqf penceresini kapatmamalı, ancak hatayı içeren pencereye geçecek: "atlama" ile kastettiğin bu mu? Hızlı bir şekilde geri geçiş yapabilirsiniz Ctrl-W pveya :wincmd pYapabileceğin yüzden, :command! CN :cn | wincmd p<CR>ya o (denenmemiş) gibi bir şey. Bu size :CNquickfix penceresinden çıkmadan bir sonraki hataya giden bir komut vermelidir. Alternatif olarak, :au BufWinEnter quickfix nmap <buffer> <Enter> :.cc | wincmd p<CR>(tekrar test edilmemiş) gibi bir şey yapabilir ve Quickfix penceresinden çıkmadan bir hata seçmek için Enter tuşunu kullanabilirsiniz.
DrAl

1
Yeni başlayanlar için "Bunu otomatikleştirmek için 'bir kod burada' da yapabilirsiniz" pek bir şey ifade etmiyor. Bu, gösterilen kod satırının ~ / .vimrc (Windows AFAIK'te _VIMRC) içine yerleştirilmesi gerektiği ve dosyanın her kaydedildiğinde VIM'in bir sonraki başlangıcından itibaren bu komutun çalıştırılacağı anlamına gelir. Sağ?
Беров

63

(Bu konuda veya konum listesi,) QuickFix listesini gezinmek için kolay yoludur eklenti .unimpaired

Quickfix penceresi doldurulduğunda [qve ]qhızlı düzeltme listesinde (sırasıyla) ileri ve geri gidin. [Qve ]Qbaşa ve sonuna gidin (özellikle listede yalnızca bir öğe varsa kullanışlıdır; bu, vim'in [qve hakkında şikayet etmesine neden olur ]q). İş akışı şu şekildedir:

  1. Quickfix listesini dolduran komut ne olursa olsun çalıştır
  2. Tip [Qilk öğeye gitmek için
  3. İle müteakip öğeler arasında ilerleyin (varsa) [qve]q

Syntastic kullanıyorsanız, hızlı düzeltme listesi yerine konum listesini alırsınız. Sorun değil; Sadece kullanım [L, ]L, [l, ve ]laynı şekilde.

unimpaired- pek çok kullanışlı eşleştirmeleri bir sürü vardır [eve ]e"balon" satırları yukarı ve aşağı, [<Space>ve ]<Space>; Daha önce kimsenin burada bahsedilen şaşırdı vb yukarıda boş satır eklemek ve aşağıda bu muhtemelen Ocak 2010'a kadar mevcut olmadığı içindir, ancak soru 2009'da sorulmuştu.


27

.Vimrc dosyanıza aşağıdaki iki satırı koyun:

map <C-j> :cn<CR>
map <C-k> :cp<CR>

Artık standart aşağı ve yukarı hareket komutlarını j ve k taklit eden ctrl-j ve ctrl-k kullanarak hatalar arasında gezinebilirsiniz.


1
<c-j>bazen (terminale bağlı mı ?!) hatalı veya hiç çalışmıyor, çünkü <NL> // kullanımı en kolay ist ile aynı anlama geliyor <c-n>ve <c-p>bunun yerine // aksi halde: stackoverflow.com/questions/8304421/…
eli

F8 ve F9'u şu şekilde kullanmaya karar verdim: noremap <F7> :cprevious<CR>ve noremap <F8> :cnext<CR>içinde.vimrc
Flimm

Zaten kullanmak <C-j>ve <C-k>vim bölünme ve tmux bölmeleri ile arasında gezinmek için vim tmux gezgini . Kombinasyonlar <C-M-j>ve <C-M-k>bir alternatif olabilir.
Paul Rougieux

24

:cc 2Bu durumda, quickfix penceresindeki ikinci hataya atlamak için (veya başka bir sayıyı) da kullanabilirsiniz . İle gezinme :cn, :cc 4vb söz konusu hat üzerinde imleci koyacağız.


8

JavaScript sözdizimi denetimini entegre etmenin en iyi uygulama yolu, Vim'in konum listesi ( quickfix'e paralel ) penceresini kullanan Syntastic Vim eklentisini kullanmaktır .

Bu soruya cevaplar yazdım ve nasıl yapılacağını açıklayan bu soru , ayrıca topluluk odaklı jshint.com'u (JSLint IMO'dan çok daha iyi) kullanarak Vim için kaynak kod tarama / etiket listesinin nasıl alınacağını ve Mozilla's DoctorJS (eski adıyla jsctags ).


8

Belki bu soru yazılırken bu seçenek mevcut değildi (veya belki de bende .vimrcbunu yapan bir şey olduğu için kendimi utandırıyorum ) ama bir aldığımda Quickfix List, onunla geziniyorum jve ksonra <CR>(yani Enter tuşuna) basıyorum dosyadaki o yere atlamak için.

Sonra, geri almak için Quickfix Listben tip Ctrl+ W j"bir pencere aşağı hareket" için ve geri döndüm.

Son olarak, bitirdiğimde, :qnormal bir pencereyi kapatacakmışım gibi yazıyorum.


Yapmak istediğim şey bu, ancak "Değişiklik yapılamıyor, 'değiştirilebilir' kapalı" mesajı alıyorum.
rtf

1
Muhtemelen Enter tuşunuzu aşmışsınızdır. Örneğin nmap <CR> o<Esc>, normal modda yeni satırlar ekleyebilmek için vardı .
Taavi Ilves

6

quickfix penceresi çoğunlukla diğer herhangi bir vim penceresi gibi çalıştırılır: j bir satır aşağı, k satır yukarı,: cn sonraki hataya / uyarıya atlamak için vb.

Deney!


1
Deney için +1, hemen hemen her şeyi böyle öğrendim.
hora

4

@DrAl'ın hızlı pencereyi nasıl açıp kapatacağına ve girişler arasında nasıl gezineceğine ilişkin harika cevabına ek olarak, diğer hızlı düzeltme navigasyon komutlarından bazılarını gösteren bir resim yaptım.

Aşağıdaki 3 dosyadan oluşan her grup, örneğin bir vimgrep'ten alınan bir dizi hızlı düzeltme sonucunu temsil eder. cnewer ve daha soğuk, tarihi sonuç kümelerinden geçmek içindir. görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.