Bagaimana Anda menggunakan fitur quickfix vim?

125

Saya pengguna Vim yang cukup baru dan saya menemukan bahwa kurva pembelajarannya cukup curam (setidaknya bagi saya). Saya baru saja menginstal skrip vim ini untuk pemeriksaan kesalahan JavaScriptLint, yang menunjukkan kesalahan di jendela perbaikan cepat vim setelah saya menyimpan buffer.

Namun, saya tidak tahu apa yang harus saya lakukan selanjutnya .. Bagaimana cara 'menggulir' semua kesalahan? Bagaimana cara menutup 'jendela' quickfix? Bagaimana cara memeriksa kesalahan setelah saya membuat perubahan pada kode saya?

Saya telah melihat dokumen quickfix vim tetapi jumlah perintahnya sangat banyak dan saya tidak dapat menemukan apa yang saya inginkan. Bantuan apa pun akan dihargai.

Pertanyaan sampingan: apakah ada cara agar javascriptlint memeriksa kesalahan js untuk kode yang berada dalam file .html?

Terima kasih!

hora
sumber

Jawaban:

148

Ada banyak perintah untuk quickfix seperti yang Anda katakan, tetapi saya cenderung menemukan saya hanya menggunakan sebagian kecil dari mereka:

: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)

Saya cenderung menggunakan ini dengan :makedan :vimgrep, jadi saya tidak dapat mengomentari pemeriksa lint Javascript, tetapi ini akan memberi Anda sesuatu untuk memulai.

Mengenai penggunaan umum JavascriptLint, saya bukan pemrogram javascript, tetapi sepertinya skrip tersebut menampilkan fungsi yang disebut "JavascriptLint", jadi jika Anda ingin memanggilnya secara manual, Anda dapat menggunakan :call JavascriptLint(). Namun, ini berfungsi pada salinan disk file, jadi itu harus disimpan terlebih dahulu. Jika (dan hanya jika) baris perintah jslberfungsi pada file html, Anda seharusnya dapat menggunakan :call JavascriptLint()file html untuk memeriksa javascript internal. Anda juga bisa melakukan:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

untuk mengotomatiskannya. Jika jsltidak mendukung file html, maka (singkatnya menambal aplikasi atau meminta penulis untuk mengubahnya), itu mungkin penyebab yang hilang ...

DrAl
sumber
Terima kasih, perintah-perintah itu adalah permulaan yang baik, saya hanya perlu bermain-main sedikit dan terbiasa dengan cara kerjanya. Jika saya menggunakan: cn untuk membuka kesalahan di jendela qf, dapatkah saya melompat ke jendela dengan kode saya tanpa keluar dari jendela qf? Bisakah itu melompat ke baris yang memiliki kesalahan? Dan saran Anda untuk menggunakan: panggilan berfungsi, namun mengikuti tautan <script src> yang bukan yang saya inginkan.
hora
@hora: :cnseharusnya tidak menutup jendela qf, tetapi akan beralih ke jendela yang berisi kesalahan: apakah ini yang Anda maksud dengan "lompat"? Anda dapat dengan cepat beralih kembali dengan Ctrl-W patau :wincmd p, sehingga Anda dapat melakukan :command! CN :cn | wincmd p<CR>atau sesuatu seperti itu (belum teruji). Ini akan memberi Anda :CNperintah yang menuju ke kesalahan berikutnya tanpa beralih dari jendela perbaikan cepat. Atau Anda dapat melakukan sesuatu seperti :au BufWinEnter quickfix nmap <buffer> <Enter> :.cc | wincmd p<CR>(lagi-lagi belum teruji) dan menggunakan Enter untuk memilih kesalahan tanpa keluar dari jendela perbaikan cepat.
DrAl
1
Untuk pemula "Anda juga bisa melakukan: 'somecodehere' untuk mengotomatiskannya" tidak berarti banyak. Ini berarti baris kode yang ditampilkan harus ditempatkan di ~ / .vimrc (_VIMRC di windows AFAIK) dan dari awal VIM berikutnya setiap kali file disimpan, perintah ini akan dipanggil. Baik?
Беров
63

Cara termudah untuk menavigasi daftar quickfix (atau daftar lokasi, dalam hal ini) adalah yang unimpairedPlugin .

Setelah jendela quickfix terisi, [qdan ]qmaju dan mundur (masing-masing) di daftar quickfix. [Qdan ]Qpergi ke awal dan akhir (yang sangat berguna jika Anda hanya memiliki satu item dalam daftar; ini membuat vim mengeluh tentang [qdan ]q). Jadi alur kerjanya adalah:

  1. Jalankan perintah apa pun yang mengisi daftar quickfix
  2. Ketik [Quntuk pergi ke item pertama
  3. Gulir ke item berikutnya (jika ada) dengan [qdan]q

Jika Anda menggunakan Syntastic, Anda akan mendapatkan daftar lokasi, bukan daftar perbaikan cepat. Tidak masalah; hanya menggunakan [L, ]L, [l, dan ]ldengan cara yang sama.

unimpairedmemiliki banyak pemetaan berguna lainnya juga - [edan ]egaris "gelembung" ke atas dan ke bawah, [<Space>dan ]<Space>sisipkan baris kosong di atas dan di bawah, dll. Saya terkejut tidak ada yang menyebutkannya di sini sebelumnya; itu mungkin karena tidak ada hingga Januari 2010, meskipun pertanyaan itu diajukan pada 2009.

Chip Hogg
sumber
27

Letakkan dua baris berikut di file .vimrc Anda:

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

Sekarang Anda dapat menelusuri kesalahan menggunakan ctrl-j dan ctrl-k, yang meniru perintah standar gerakan ke bawah dan atas j dan k.

Amit Moscovich
sumber
1
<c-j>kadang-kadang (tergantung pada terminal ?!) salah atau sama sekali tidak berfungsi, karena artinya sama dengan <NL> // cara termudah, untuk digunakan <c-n>dan <c-p>sebaliknya // sebaliknya: stackoverflow.com/questions/8304421/…
eli
Saya memutuskan untuk menggunakan F8 dan F9, seperti ini: noremap <F7> :cprevious<CR>dan noremap <F8> :cnext<CR>di.vimrc
Flimm
Saya sudah menggunakan <C-j>dan <C-k>untuk menavigasi antara vim splits dan tmux panes dengan vim tmux navigator . Kombinasi <C-M-j>dan <C-M-k>mungkin bisa menjadi alternatif.
Paul Rougieux
24

Anda juga dapat menggunakan :cc 2(atau nomor lain) untuk melompat ke, dalam hal ini, kesalahan kedua di jendela perbaikan cepat. Menavigasi dengan :cn,, :cc 4dll akan menempatkan kursor pada baris yang dimaksud.

Andy Stewart
sumber
8

Cara praktik terbaik untuk mengintegrasikan pemeriksaan sintaks JavaScript adalah menggunakan plugin Syntastic Vim , yang menggunakan jendela daftar lokasi Vim (yang sejajar dengan perbaikan cepat ).

Saya telah menulis jawaban untuk pertanyaan ini dan pertanyaan ini menjelaskan bagaimana melakukannya, ditambah juga bagaimana mendapatkan penjelajahan kode sumber / daftar-tag untuk Vim menggunakan jshint.com berbasis komunitas (yang jauh lebih baik daripada JSLint IMO) dan Mozilla's DoctorJS (sebelumnya jsctags ).

Ory Band
sumber
8

Mungkin opsi ini tidak ada ketika pertanyaan ini ditulis (atau mungkin saya mempermalukan diri saya sendiri karena ada sesuatu dalam diri saya .vimrcyang membuat ini terjadi) tetapi ketika saya mendapatkan Quickfix List, saya hanya menavigasi dengan jdan kkemudian menekan <CR>(yaitu tombol Enter) untuk melompat ke tempat itu di file.

Kemudian, untuk kembali ke Quickfix ListI ketik Ctrl+ W juntuk "pindah ke jendela" dan saya kembali.

Akhirnya, setelah selesai, saya cukup mengetik :q, seperti saya akan menutup jendela normal mana pun.

LondonRob
sumber
Itulah yang ingin saya lakukan, tetapi saya mendapatkan pesan "Tidak dapat membuat perubahan, 'dapat dimodifikasi' tidak aktif".
rtf
1
Anda mungkin telah melewati kunci Enter Anda. Saya punya misalnya nmap <CR> o<Esc>, jadi saya bisa menambahkan baris baru dalam mode normal.
Taavi Ilves
6

jendela quickfix dioperasikan sebagian besar seperti jendela vim lainnya: j ke bawah satu baris, k ke atas satu baris,: cn untuk melompat ke kesalahan / peringatan berikutnya, dll.

percobaan!

hanya seseorang
sumber
1
1 untuk eksperimen, begitulah cara saya mempelajari segalanya.
hora
4

Selain @DrAl jawaban yang bagus tentang cara membuka dan menutup jendela cepat dan menavigasi antar entri, saya membuat gambar untuk menunjukkan beberapa perintah navigasi perbaikan cepat lainnya.

Setiap grup dari 3 file di bawah mewakili sekumpulan hasil perbaikan cepat, misalnya dari vimgrep. lebih dingin dan lebih dingin untuk menjalani serangkaian hasil bersejarah. masukkan deskripsi gambar di sini

run_the_race
sumber