0

テキストドキュメントで計算を含む行をキャプチャして
実行しようとしています。

私は自分の機能でこれを使用します:

for i in range(startline,endline) 
let calculation = getline(i)  
...  
let out = eval(calculation)  
...  
endfor  

ときどき何かがうまくいかず、次のメッセージが表示されます。

Error detected while processing function....  
Line ...  
E488: Trailing Characters   

Line .. は、関数の line-nr です。
それが関係する計算も知りたいです(テキストドキュメントのどの行):

エラーが検出された場合 = エコー計算

エラー メッセージがあるかどうかを確認し、変数「calculation」をエコーする方法を教えてください。

4

1 に答える 1

2

関数内でスクリプト エラーを処理するには、次の 2 つの方法があります。

1つ目は、を介してエラーを抑制すること:silent!です。2 つの欠点: 手動で成功を確認する必要があり、評価されたスクリプトからの通常の出力も抑制されます (でゆがめない限り:unsilent)。

let v:errmsg = ''
silent! let out = eval(calculation)
if v:errmsg != ''
    " error
endif

try...catch による 2 番目の方法をお勧めします。これにより、出力に関する問題が回避され、明示的にエラーをチェックする必要がなくなります。

try
    let out = eval(calculation)
catch /^Vim\%((\a\+)\)\=:E/
    " v:exception contains what is normally in v:errmsg, but with extra
    " exception source info prepended, which we cut away.
    let v:errmsg = printf("Line: %d\nCalculation: %s\nError: %s", i, calculation, substitute(v:exception, '^Vim\%((\a\+)\)\=:', '', ''))
    echohl ErrorMsg
    echomsg v:errmsg
    echohl None
endtry
于 2012-05-07T08:26:13.947 に答える