1

検索時の出力メッセージを変更したいのですが。

非常に長い正規表現で検索を行っても何も見つからなかった場合、vimはメッセージを返しますE486: Pattern not found: .... very long regex code ...

出力をキャプチャして、このメッセージを変更したいと思います。これどうやってするの?

4

2 に答える 2

4

この:s[ubstitute]コマンドには/eエラーを抑制するためのフラグがありますが、AFAIKは:silent /fooそのエラーメッセージを抑制しません。まあ、とにかく、あなたはそれを抑制したくはありません、あなたはそれを「捕らえ」そして何か他のものを見せたいのです。

すべての言語と同様に、vimscriptには独自のがありtry/catchます。:h :tryあなたはそれについてページのさらに下で読むことができます。

try
  /foo
catch /^Vim\%((\a\+)\)\=:E486/
  let @n = v:exception
  echo "No luck!"
endtry

try/catchあなたはあなたがする関数であなたnoremapを包むことができます/

于 2013-03-27T08:36:09.563 に答える
2

あなたはvimscriptでエラーメッセージをキャッチすることについて話していると思います。

次に、チェックアウトすることをお勧めしますcatch:h catch

                    *:cat* *:catch* *E603* *E604* *E605*
:cat[ch] /{pattern}/    The following commands until the next |:catch|,
            |:finally|, or |:endtry| that belongs to the same
            |:try| as the ":catch" are executed when an exception
            matching {pattern} is being thrown and has not yet
            been caught by a previous ":catch".  Otherwise, these
            commands are skipped.
            When {pattern} is omitted all errors are caught.
            Examples: >
        :catch /^Vim:Interrupt$/    " catch interrupts (CTRL-C)
        :catch /^Vim\%((\a\+)\)\=:E/    " catch all Vim errors
        :catch /^Vim\%((\a\+)\)\=:/ " catch errors and interrupts
        :catch /^Vim(write):/       " catch all errors in :write
        :catch /^Vim\%((\a\+)\)\=:E123/ " catch error E123
        :catch /my-exception/       " catch user exception
        :catch /.*/         " catch everything
        :catch              " same as /.*/

ブロックでtry検索を実行すると、エラーメッセージをキャッチして、好きなことを実行できます。

于 2013-03-27T08:35:57.203 に答える