-6

バックグラウンド シナリオ: 1 つの VimScript をデバッグしているときに、一部のコードが実行されません。その理由は、unmap で 1 つのエラーが発生し、VimScript がこのエラーで終了するためです。コードの周りに空の try-catch が 1 つ配置されているため、何が問題なのかがはっきりしません。最終的に問題を特定した後、このデフォルトの動作はあまり直感的ではないのではないかと考え始めました。

これは、vim が実験的に、存在しないマッピングを削除する際にエラーを報告することを示す簡単なコードです。最後の行で「E31: No such mapping」のように言って失敗します。

map <F10> :echo 'hello'
unmap <F10>
unmap <F10>

残念ながら、この動作に関するドキュメントは見つかりませんでした。誰かが、存在しないマッピングを削除することについて説明できる場所を教えてもらえますか? このデザインの背後にある合理性は何ですか? 個人的には、存在しないマッピングを削除することを 1 つの通常のステートメントと見なし、通常どおり続行します。

編集:この質問には誤解があるかもしれません。エラーを抑制する方法を尋ねているわけではありません。存在しないマッピングを1つ削除することが1つのエラーであるとvimが考える理由を知りたいです。そんなに深刻ですか?

回答とコメントで指摘されているように、要求された操作を実行できるときに1つのエラーを発生させるのはUNIXの哲学です。私はそれに完全に同意しますが、シェルでは、スクリプトはデフォルトでエラーが発生しても続行されるため、同じ理由は適用されません。

PS:推奨されているように、この質問はvim-devに移動されました。

4

3 に答える 3

5

do_map不明なマッピングに対して 2 を返し、このコードはこの場合にエラーをスローするため、失敗します。あまり役に立たないと思います。Annotate によると、このコードは、mercurial リポジトリで見つかった最初のバージョンの vim (7.0001) から変更されていません。

異なる答えがあるかもしれません: 私は3つを推測できます:

  1. vi 互換性:viスローしたので、vim もスローする必要があります
  2. それは正しいことです。コマンドが要求されたとおりに実行されなかった場合、失敗を報告する必要があります
  3. より多くのオプションが提供されます。既存の:tryマッピングのマッピング解除が不可欠な場合は、 ..を使用してエラーをキャッチできます:catch(または、ユーザーにエラーを示すままにしておきます) silent!ただし、 EAFP原則の熟達者とユーザーが小さな vim を使用している場合の引数: VimL では、存在を確認するために使用するmaparg()方が一般的ですが、必要+evalです (私が間違って:tryいなければ、これも同様に行います:ex_eval.cこのコマンドが定義されている意味のあるファイルの内容全体が保護されています)。#if defined(FEAT_EVAL) || defined(PROTO))。

しかし、Stackoverflow はそのような質問をするのに適した場所ではありません。そのような古いコードの場合、Bram だけが答えを知っている可能性があるため、 vim-devで質問する必要があります。私が彼だったら、なぜあなたが答えを必要とするのか説明を求めるでしょう.

于 2013-07-12T19:06:23.490 に答える
3

:silent!を先頭に追加することで、エラーを抑制することができます。

:silent! unmap <F10>

他の方法もありますが (たとえば、maparg('<F10>', 'n')が空かどうかを条件付きでチェックする)、これがコマンドを実行してエラーを無視する標準的な方法です。

于 2013-07-12T15:48:58.500 に答える
0

マッピングが保存されているファイルを編集し、必要に応じて手動で削除できるようです。詳細情報へのリンクは次のとおりです。

キーマップの削除

于 2013-07-12T15:45:23.657 に答える