Vim Syntasticでのエラー位置ナビゲーション


11

VimにSyntasticをインストールしましたが、エラーが完全に検出されています(主に作業中のPythonコードで)。ファイル内を普通にジャンプすると、カーソルが関連する行の上にあるときにステータスバーにエラーが表示されます。

私が理解できないことは、エラー間を直接ナビゲートする方法です。

SyntasticがエラーをVimロケーションリストにロードしていることを理解し:lopenています。それをで表示し、そのウィンドウに切り替え、行を選択してヒットするEnterと、右側のメインウィンドウに移動します。

私がやりたいことは、リストを開いていないことです。エラーのあるファイルを編集して、キーボードショートカットを押して、次の警告/エラーがある場所にスキップします。

それは可能ですか?ドキュメントはそれ:lNextを示唆し、:lprevious関連していE553: No more itemsますが、彼らは私を理解します。

回答:


12

:lne[xt]:lp[revious]は正しいショートカットです。

しかし:lN[ext]、同じではありません:lne[xt]:の代替:lp[revious]です。

表示されるメッセージは、最後または最初のエラーに達したときにこれらのコマンドがラップアラウンドしないという事実によるものです。

質問にリストしたコマンドはどちらも前のエラーにジャンプしますが、おそらく最初のエラーが発生していて、以前に何も起きていない可能性があります。適切なコマンドを使用してください。それらはラップアラウンドしないので、あなたは良いでしょう。

:h location-listコマンドの完全なリストを読んでください。


それらをラップさせる方法はありますか?
BallpointBen 2018

いいえ、それらをラップさせる方法はありません。ただし、このスレッドにはさまざまなラッパーベースのソリューションがあり、プラグインの形式もあります。私自身のプラグインvim-qfにそれらがあります。いくつかのマッピングだけのための本格的なプラグインが必要ない場合は、ここに実装があります。
romainl 2018

6

リストに問題が1つしかない場合は、その問題に:ll移動します。

ここにマッピングされたキーになりますあなたの.vimrcの修正だ:lnext:lprev(それにジャンプすることで)唯一の問題の場合には、正しく作業が。末尾のnmappingsを好みのキーシーケンスに変更します。

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

これは、ロケーションリストが最初に入力される前、またはポピュレーションの後にエラーなしで実行された場合、醜いです。修正については私の答えを参照しください。
トム・ヘイル



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" Location list empty "`で解決できます。
トム・ヘイル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.