Помилка навігації з розташуванням у Vim Syntastic


11

У Vim у мене встановлений Syntastic, і він ідеально виявляє помилки (переважно в коді Python, над яким я працюю). Якщо я нормально стрибаю у файлі, я бачу помилки в рядку стану, коли курсор знаходиться над відповідним рядком.

Я не можу зрозуміти, як безпосередньо переходити між помилками.

Я розумію, що синтастичне завантаження помилок у список місцеположення Vim, і я можу зробити так, щоб вони з’явились :lopen, переключившись на це вікно, виберіть рядок і натисніть Enterі перейдіть до головного вікна праворуч.

Що я хотів би зробити, але це не відкривати список, просто редагувати у файлі помилки та натискати комбінацію клавіш, щоб перейти туди, де знаходиться наступне попередження / помилка.

Це можливо? Документи пропонують це :lNextі :lpreviousє актуальними, але вони мене отримують E553: No more items.

Відповіді:


12

:lne[xt]і :lp[revious]є правильними ярликами.

Але :lN[ext]це не те саме, що :lne[xt]: це альтернатива :lp[revious].

Повідомлення, яке ви отримуєте, пов’язане з тим, що ці команди не завертаються, коли ви досягаєте останньої чи першої помилки.

Команди , які ви перераховані в вашому питанні як перехід до попередньої помилку , але швидше за все , ви вже на перші помилки , і немає нічого до того . користуйтеся правильними командами, майте на увазі, що вони не загортаються, і ви будете добре.

Прочитайте :h location-listповний список команд.


Чи є спосіб їх змусити загорнути?
BallpointBen

Ні, немає ніякого способу змусити їх обернутись. У цій нитці є різні рішення на основі обгортки, але у формі плагінів. Мій власний плагін vim-qf має такі . Реалізація є тут, якщо ви не хочете повноцінного плагіна лише для декількох відображень.
romainl

6

Якщо в списку є лише одне питання, :llперейдіть до нього.

Ось виправлення для вашого .vimrc, який зробить ключі, відображені :lnextта :lprevсправно працювати у випадку лише однієї проблеми (перейшовши на неї). Змініть nmappings в кінці на бажану послідовність клавіш.

https://github.com/scrooloose/syntastic/isissue/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

Це некрасиво, якщо він виконаний перед тим, як вперше заповнити список місцеположень або після населення без помилок. Дивіться мою відповідь для виправлення.
Том Хейл,


1

Написано 30 жовтня 2017 року

Я рекомендую встановити плагін, який не має шкоди до vim

Це також є чудовим посиланням на списки vim загалом.

Синтастичний використовує locationsсписок. Команди нижче (відображення, позначені зірочкою, походять із unimpaired.vimзгаданого вище плагіна).

введіть тут опис зображення


0

Дозволити обертання від першого до останнього місця помилки (і навпаки):

" 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

Тут виявляються такі помилки:

E42: No Errors
E776: No location list

І лагідно каже: Location list empty

(Кредит lcd074 )


Насправді, є менш повторюване рішення, але це може бути пов'язано з `echo" Список розташування порожнім "`.
Том Хейл,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.