Lỗi điều hướng vị trí trong Vim Syntastic


11

Tôi đã cài đặt Syntastic trong Vim và nó đang tìm lỗi hoàn toàn (chủ yếu là mã Python tôi đang làm việc). Nếu tôi nhảy xung quanh bình thường trong tệp, tôi thấy các lỗi trong thanh trạng thái khi con trỏ ở trên một dòng có liên quan.

Những gì tôi không thể tìm ra là làm thế nào để điều hướng trực tiếp giữa các lỗi.

Tôi hiểu rằng cú pháp đang tải các lỗi vào danh sách vị trí Vim và tôi có thể làm cho nó xuất hiện cùng :lopen, chuyển sang cửa sổ đó, chọn một dòng và nhấn Entervà được đưa đến cửa sổ chính trên dòng bên phải.

Mặc dù vậy, điều tôi muốn làm là không mở danh sách, chỉ cần chỉnh sửa trong tệp có lỗi và nhấn phím tắt để bỏ qua bất cứ nơi nào có cảnh báo / lỗi tiếp theo.

Điều đó có thể không? Các tài liệu cho thấy điều đó :lNext:lpreviouscó liên quan, nhưng họ hiểu tôi E553: No more items.

Câu trả lời:


12

:lne[xt]:lp[revious]là các phím tắt chính xác.

Nhưng :lN[ext]không giống như :lne[xt]: nó là một thay thế cho :lp[revious].

Thông báo bạn nhận được là do thực tế là các lệnh này không bao quanh khi bạn gặp lỗi cuối cùng hoặc lỗi đầu tiên.

Các lệnh bạn liệt kê trong câu hỏi của bạn đều chuyển sang lỗi trước đó nhưng rất có thể bạn đã mắc lỗi đầu tiên và không có gì trước đó . sử dụng các lệnh đúng, hãy nhớ rằng chúng không bao bọc và bạn sẽ ổn.

Đọc :h location-listcho một danh sách đầy đủ các lệnh.


Có cách nào để có được chúng để bọc?
BallpointBen

Không, không có cách nào để khiến chúng được bọc. Tuy nhiên, có nhiều giải pháp dựa trên trình bao bọc khác nhau trong chủ đề này và nhiều giải pháp khác ở dạng plugin. Plugin vim-qf của riêng tôi có những cái đó . Việc triển khai là ở đây nếu bạn không muốn một plugin đầy đủ chỉ cho một vài ánh xạ.
romainl

6

Nếu chỉ có một vấn đề trong danh sách, :llsẽ điều hướng đến nó.

Đây là một sửa chữa cho .vimrc của bạn sẽ làm cho các khóa được ánh xạ :lnext:lprevhoạt động chính xác trong trường hợp chỉ có một vấn đề (bằng cách chuyển sang nó). Thay đổi các bước sóng ở cuối chuỗi trình tự khóa ưa thích của bạn.

(từ 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

Điều này là xấu nếu được thực hiện trước khi danh sách vị trí được điền lần đầu tiên hoặc sau khi dân số không có lỗi. Xem câu trả lời của tôi để sửa chữa.
Tom Hale



0

Cho phép bao quanh từ vị trí lỗi đầu tiên đến vị trí lỗi cuối cùng (và ngược lại):

" 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

Điều này bắt các lỗi sau:

E42: No Errors
E776: No location list

Và hiền lành nói: Location list empty

(Tín dụng cho LCD074 )


Trên thực tế, có một giải pháp ít lặp đi lặp lại nhưng nó có thể thực hiện với `echo" Danh sách vị trí trống "`.
Tom Hale

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.