web-dev-qa-db-ja.com

VimSyntasticでのエラーロケーションナビゲーション

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

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

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

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

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

11
Chris Jones

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

ただし、:lN[ext]:lne[xt]と同じではありません。:lp[revious]の代わりになります。

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

質問にリストしたコマンドは両方とも前のエラーにジャンプしますが、おそらく最初のエラーが発生していて、何もありませんbefore。適切なコマンドを使用してください。それらはラップアラウンドしないので、問題はありません。

コマンドの完全なリストについては、:h location-listをお読みください。

12
romainl

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

.vimrcの修正により、:lnextおよび:lprevにマップされたキーが1つの問題のみの場合に正しく機能するようになります(ジャンプすることにより)。最後のnmappingをお好みのキーシーケンスに変更します。

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
6
Greg Bell

:lnextなどは入力するのが面倒なので(通常はすばやく繰り返したいので、 nimpaired.vim-便利なブラケットマッピングのペア プラグインは(とりわけ)短い]lマッピングを提供します。

4
Ingo Karkat

2017年10月30日作成

インストールすることをお勧めします vim-unimpaired プラグイン

これも vimリストのすばらしいリファレンス より一般的です。

Syntasticはlocationsリストを使用します。以下のコマンド(アステリックスでマークされたマッピングはunimpaired.vim上記のプラグイン)。

enter image description here

1
arcseldon

ロケーションリストを使用する最良の方法は、Denite + unite-locationプラグインの組み合わせを使用することだと思います: https://github.com/chemzqm/unite-location

0
Arthur Sult

最初のエラー位置から最後のエラー位置へのラップアラウンドを許可します(またはその逆)。

" 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

0
Tom Hale