Navigasi lokasi kesalahan dalam Vim Syntastic

11

Saya sudah menginstal Syntastic di Vim dan menemukan kesalahan dengan sempurna (kebanyakan dalam kode Python yang saya kerjakan). Jika saya melompat-lompat secara normal dalam file saya melihat kesalahan di bilah status ketika kursor berada di atas garis yang relevan.

Apa yang saya tidak tahu adalah bagaimana menavigasi langsung antara kesalahan.

Saya mengerti bahwa sintaksis memuat kesalahan ke dalam daftar lokasi Vim dan saya dapat membuatnya muncul dengan :lopen, beralih ke jendela itu, pilih satu baris dan tekan Enterdan dibawa ke jendela utama pada baris yang tepat.

Apa yang ingin saya lakukan, adalah tidak memiliki daftar terbuka, cukup mengedit dalam file dengan kesalahan dan tekan pintasan keyboard untuk melompat ke mana pun peringatan / kesalahan berikutnya.

Apakah itu mungkin? Dokumen menyarankan itu :lNextdan :lpreviousrelevan, tetapi mereka menangkap saya E553: No more items.

Chris Jones
sumber

Jawaban:

12

:lne[xt]dan :lp[revious]merupakan jalan pintas yang benar.

Tetapi :lN[ext]tidak sama dengan :lne[xt]: itu adalah alternatif :lp[revious].

Pesan yang Anda dapatkan adalah karena fakta bahwa perintah ini tidak membungkus ketika Anda mencapai kesalahan terakhir atau yang pertama.

Perintah yang Anda daftarkan dalam pertanyaan Anda sama-sama melompat ke kesalahan sebelumnya tetapi kemungkinan Anda sudah berada di kesalahan pertama dan tidak ada yang sebelumnya . gunakan perintah yang tepat, perlu diingat bahwa mereka tidak membungkus dan Anda akan baik-baik saja.

Baca :h location-listuntuk daftar perintah lengkap.

romainl
sumber
Apakah ada cara untuk membuat mereka membungkus?
BallpointBen
Tidak, tidak ada cara untuk membuat mereka membungkusnya. Ada berbagai solusi berbasis pembungkus di utas ini dan lebih banyak lagi dalam bentuk plugin. Plugin saya sendiri vim-qf memiliki itu . Implementasinya ada di sini jika Anda tidak ingin plugin lengkap hanya untuk pemetaan pasangan.
romainl
6

Jika hanya ada satu masalah dalam daftar, :llakan menavigasi ke sana.

Berikut ini adalah perbaikan untuk .vimrc Anda yang akan membuat kunci dipetakan :lnextdan :lprevberfungsi dengan benar jika hanya ada satu masalah (dengan melompat ke sana). Ubah nmappings di akhir ke urutan kunci pilihan Anda.

(dari https://github.com/scrooloose/syntastic/issues/32 )

" Fix syntastic error jumping
function! <SID>LocationPrevious()
  try
    lprev
  catch /^Vim\%((\a\+)\)\=:E553/
    llast
  endtry
endfunction

function! <SID>LocationNext()
  try
    lnext
  catch /^Vim\%((\a\+)\)\=:E553/
    lfirst
  endtry
endfunction

nnoremap <silent> <Plug>LocationPrevious    :<C-u>exe 'call <SID>LocationPrevious()'<CR>
nnoremap <silent> <Plug>LocationNext        :<C-u>exe 'call <SID>LocationNext()'<CR>
nmap <silent> e[  <Plug>LocationPrevious
nmap <silent> e]  <Plug>LocationNext
Greg Bell
sumber
Ini jelek jika dieksekusi sebelum daftar lokasi pertama kali diisi, atau setelah populasi tanpa kesalahan. Lihat jawaban saya untuk perbaikan.
Tom Hale
1

Ditulis 30 Oktober 2017

Saya akan merekomendasikan menginstal plugin yang tidak rusak

Ini juga merupakan referensi hebat pada daftar vim secara lebih umum.

Syntastic menggunakan locationsdaftar. Perintah di bawah ini (pemetaan yang ditandai dengan asterix berasal dari unimpaired.vimplugin yang disebutkan di atas).

masukkan deskripsi gambar di sini

arcseldon
sumber
0

Izinkan wrap-around dari lokasi kesalahan pertama hingga terakhir (dan sebaliknya):

" Allow :lprev to work with empty location list, or at first location
function! <SID>LocationPrevious()
  try
    lprev
  catch /:E553:/
    lfirst
  catch /:E\%(42\|776\):/
    echo "Location list empty"
  catch /.*/
    echo v:exception
  endtry
endfunction

" Allow :lnext to work with empty location list, or at last location
function! <SID>LocationNext()
  try
    lnext
  catch /:E553:/
    lfirst
  catch /:E\%(42\|776\):/
    echo "Location list empty"
  catch /.*/
    echo v:exception
  endtry
endfunction

Ini menangkap kesalahan berikut:

E42: No Errors
E776: No location list

Dan dengan lemah lembut mengatakan: Location list empty

(Kredit ke lcd074 )

Tom Hale
sumber
Sebenarnya, ada solusi yang kurang berulang tetapi bisa dilakukan dengan `echo" Daftar lokasi kosong "`.
Tom Hale
0

Saya pikir cara terbaik untuk menggunakan daftar lokasi adalah dengan menggunakan kombinasi Denite + unite-location plugin: https://github.com/chemzqm/unite-location

Arthur Sult
sumber