showcmdでコマンド履歴を表示する


11

set showcmdVimを使用すると、画面の最後の行に部分的なコマンドが表示されます。たとえば、ノーマルモードでコマンドを入力するとdt.、最後の行が表示されdt、その後、.コマンドを押すと、コマンドが完了しているため、何も表示されません。

完全なコマンドを表示する方法はありますか?たとえば、と入力するとdt.gU(、最初dt.に表示されます。そして、2番目のコマンドの入力を開始すると、最初のコマンドはクリアされ、最終的にgU(は表示されるだけになります。

これは、例えばGIFを説明するのに役立ちます。予期しない結果が発生した場合は、入力した内容を確認します。


1
完全なコマンドとは何ですか?dtそれは保留中の現在のオペレータのために示されています。いったん動きが与えられると、それはもはや保留中のオペレーターではありません。さらに進んだとしましょうdt.gU(gu)daw。それはすべて「1つの完全なコマンド」ですか、それとも4つの完全なコマンドですか、それとも他の何かですか?
davidlowryduda 2015

@mixedmathは4つのコマンドとして数えます。回答の2番目の段落では、私が何を意味するかを明確にしています。
ゴンサロリベイロ

2
Vimの観点から見ると、dt.gU(2つのコマンドがあります:dt.gU(....したがって、実際に必要なのは、ある種のコマンド履歴を表示することです(Vimはすでに「完全なコマンド」を表示しています)。
Martin Tournoij、2015

@Carpetsmoker、ええ、それは私が欲しいものかもしれません。質問のタイトルを編集していただきありがとうございます。
ゴンサロリベイロ

3
私は通常の歴史に取り組んでいるVimのソースコードを突っ込んでいます。ではsrc/normal.c、コードの呼び出しclear_showcmd()いくつかの場所で(normal_cmd()do_pending_operator()end_visual_mode())。私はshowcmd_bufそれらの時点でファイルへのダンプをいじっていますが、見た目はかなり良かったのですが、同様にVimソースコードを変更して再構築しないと、期待どおりの結果が得られないことを確信できます。もちろん、そうすることはあなたのgifを作る面倒の価値があるかもしれません。
ジョンO'M。

回答:


9

通常のVimではこれを行う方法を見つけることができませんでした。ただし、Vimにパッチを適用する場合は、次の方法が役立つことがあります。

非常に単純なパッチ(Vim-7.4.052に対して適用)は、通常のコマンドの最後に履歴をクリアする画面への実際の更新を無効にします。これはshowcmd_is_clear、表示を更新する前にが設定されているかどうかを返すことによって行われます。(または、ifステートメントをコメントアウトして、元の1 return行だけを残すことができます。:以下のパッチはうまく貼り付けられませんでした。短い1行ですが、手動で適用する必要がある場合があります。:私はなかったではない、実際にコメントアウトしdisplay_showcmd()、選択した行または他の可能性が他のものの数の表示を更新するには、ビジュアルモードで使用しているように見えるので、私は広範囲にこれをテストしていません。

--- src/normal.c    2015-02-14 00:21:23.286352257 -0500
+++ src/normal.c    2015-02-14 00:21:25.238352173 -0500
@@ -4029,6 +4029,7 @@
    /* Don't actually display something if there is nothing to clear. */
    if (showcmd_is_clear)
        return;
+   return;
     }

     display_showcmd()

結果は次のようになります。

パッチを示すスクリーンキャスト

注意すべきいくつかの興味深い事柄:

  • この番組であっても、単純な動き、のようなjkb、など
  • xこのコマンドは、実際になりdlshowcmd_bufに。
  • 一番下の行を変更するコマンドは、showcmd領域を消去します(たとえば、:コマンドを使用するか、挿入モードに入る(少なくとも私のセットアップで))。
  • キャプチャプログラムは、aを入力した後、多くのストロークの記録を停止し"ましたが、長いレジスタ指定のヤンクのキーシーケンスがvimウィンドウに表示されます。
  • キャストには表示されませんがesc、通常モード^[でのヒットはshowcmd領域に表示されます

4

Johnによる解決策とは別に-w、ファイルに入力したすべての文字を記録するパラメーターを使用して押されたすべてのvimキーストロークを表示する別の方法があります。問題は、vimを終了したときにのみvimがキーストロークを書き込むことです。これがVimGolfの仕組みです。

これを回避するために、夏野カナはこのオプションのバッファリングを無効にするこの単一行のパッチを思いついた-wので、キーストロークのリアルタイムストリームにアクセスできます。次に、それらの読み取り(例tail -f:)、解析、またはステータスバー(:set statusline)での表示を試みることができます。

キーストロークのリアルタイムストリームを取得するには、MacVimのDrewのライブストリームキーストロークブランチを使用して、Vimのカスタムビルドを確認してください。

出典:Vimprint- Drew NeilブログのVimキーストロークパーサー

これは、ビデオチュートリアルやGIFでVimの押されたキーストロークを明らかにしたい場合に便利です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.