`echomsg`の場合は` echon`


8

コマンドは同じライン内の複数のハイライトグループでテキストの行を出力するために非常に便利です。これは、たとえばプラグインの素敵なステータスメッセージを作成するために使用できます。echonechohl

私が取り組んでいるプラグインでは、色付きのステータスメッセージを出力するこの正確な方法を使用しています。ただし、これらのメッセージをmessage-historyと同じようにに追加したい場合がありechomsgます。これはどういうわけか可能ですか?これには固有の機能はないと思いますが、vimスクリプトで機能を追加できますか?


1
違いがわかりません。ヘルプページを読んでから、echonechomsg同じように機能する、ことを除いてechomsg歴史にメッセージを追加しますか?あなたは言及し「私は今、いくつかの時間のためにしようとしている」あなたが起こることを期待したもの、あなたが試した正確に何を教えなければならない、と何でした起こります。そうすれば、私たちがあなたが抱えている問題(もしあれば)を試したり修正したりできます。
Martin Tournoij 2015年

不明瞭で申し訳ありません。質問をより明確にするために質問を更新しました。特にechon、履歴へのメッセージの追加と機能を組み合わせたいのです。
Karl YngveLervåg2015年

回答:


9

これは現在Vimでは不可能です。

内部的に:echomsgはとして実装されます:execute。ただし:echomsg、実行の結果として呼び出された場合、最後の属性で表示さ:echohlれ、メッセージリストに保存されます(参照src/eval.c関数ex_echohlおよびex_execute)。これは、保存されたメッセージの色を取得する方法です。

実際のメッセージ履歴は、属性を持つ文字列のコレクション(リンクリスト)であり、に格納および取得されsrc/message.cます。各文字列はメッセージ(1つ以上の行で構成される)であり、属性は、特に、表示に使用する強調表示グループを決定します。このため、各メッセージは全体として強調表示する必要があり(単一の強調表示グループ)、同じ行に複数のメッセージを含めることはできません。(参照src/message.c構造msg_histと機能ex_messages

私はこれを回避する方法を見つけることができません(メッセージを使用:echohl:echonて表示することを考えましたが、プレーンメッセージを履歴に保存しています。残念ながら、メッセージを表示せずに履歴に追加する機能は、exに公開されていないようです。 -commands)Vimのソースコードを変更する必要はありません。


1
質問が更新されたので、意図がより明確になりました。同様に、私の更新後に少し答えを更新することもできます(ただし、それはあなた次第です)。vimスクリプトを使用して機能を「ハッキング」するための良いアイデアを期待していますが、あなたの答えは「受理」とマークされるのに十分だと思います。
Karl YngveLervåg、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.