Emacsに(repeat-last-command)はありますか?


143

しばしば、私は次のようなものを探して該当するドキュメントとドキュメントを掘り下げて、目前のタスクに戻ることをあきらめるだけにしました:

(繰り返し最後のコマンド)

実行した最後のC-またはM-コマンドを実行します(fnキーに再バインドされます)

または時々関連:

(最後に説明する関数)

どのキーストロークを誤って発行したか、その影響をトリックのバッグに追加したい。describe-keyは近いですが、何を入力したかを知る必要があります。

私は単に私の信頼できる相棒に多くを求めすぎているのですか?


1
Cx z (repeat)およびCx Mz (repeat-complex-command)。もご覧ください(repeat-matching-complex-command)
ハトシェプスト

回答:


62

describe-last-function」に関して:

last-command最後に行ったことを表す記号に設定された変数があります。したがって、このelispスニペット(describe-function last-command)は、すぐに起こったことのドキュメントを表示するはずです。

あなたは些細な作業作ることができるようにdescribe-last-functionそうように

(defun describe-last-function() 
  (interactive) 
  (describe-function last-command))

そのelisp .emacsまたは同等のものを入れると、Mx describe-last-functionが作成されます

興味のあることから、いくつかのキーを叩いたり、最後のコマンドを変更したことをしたりした場合は、そのcommand-history機能が興味深いかもしれません。Mx command-historyでそれを取得できます


168

繰り返し機能はrepeat.el、標準のEmacsディストリビューションに含まれているEmacs Lispパッケージによって提供されます。repeat.elのドキュメントから:

このパッケージは、前のコマンドを、その引数を含めて、何であれ、繰り返すコマンドを定義します。このコマンドはキーCx zに接続されています。前のコマンドを1回繰り返すには、Cx zと入力します。直後にもう一度繰り返すには、zと入力します。zを何度も入力すると、コマンドを何度も繰り返すことができます。

repeatコマンドに関する追加情報を表示するには、C-h F repeat RETEmacs内から入力します。



81

はい、繰り返しコマンドがあります。それはrepeat

  • コマンドをC-x zで繰り返し、zを押して繰り返し続けることができます。

repeat-complex-commandキーバインディングから入手可能な、誰も言及されていない少し衝撃的なものC-x ESC ESC


2
repeat-complex-commandが前の引数を繰り返すことを除いて、Mx Mpに似ています。
Yoo

5
また、C-x M-:(ニーモニック:のようですM-:が、elisp式が既に入力されています)。
phils 2013年

6
はい、確か衝撃的です。受け入れられた回答は、ここでの最良の回答ではありません、IMO(しかし、OPは明らかに彼女の質問に最もよく対応していると感じています)。私にとって、この答えは、書かれた質問が要求したものに最も近い(最後のコマンドを繰り返す)。そして、repeat.el(これを包含するC-x z z z...)によって提供される可能性は、2番目に近いものです。最後にヒットしたキーストロークについて2番目の質問が尋ねられた場合、最良の答えはC-h lview-lossage)です。describe-last-commandコマンドにはIMHOの使用はほとんどありません。
2014年

C-x M-:便利なキーボードマクロの一部として使用することもできます。デフォルトのrepeat-complex-commandバインディングは、何度も入力するのが少し面倒です。
2018

24

また、M-x view-lossage最後に入力した100(?)キーストロークを示します。そのため、コマンドの場所を確認できます。それは私がちょうど今まで使用するM-x command-historyつもりであると思うところを私が今見つけるまで使用したものC-h wです。


18

よくわかりませんが、これを探しているのではないでしょうか。

コマンドC-xzrepeat)は、Emacsコマンドを何度も繰り返す別の方法を提供します。このコマンドは、以前のEmacsコマンドを繰り返します。コマンドを繰り返すと、以前と同じ引数が使用されます。毎回新しい引数を読み取ることはありません。

Emacsマニュアル、8.11コマンドの繰り返し


2
ヨハネスシャウブが指摘したように、その後のz単独でのプレスは繰り返しを継続します。
phils

9

これも役に立つかもしれません... emacs Helpから逐語的に:

C-x M-ESC runs the command repeat-complex-command
  which is an interactive compiled Lisp function in `simple.el'.
It is bound to <again>, <redo>, C-x M-:, C-x M-ESC.
(repeat-complex-command ARG)

Edit and re-evaluate last complex command, or ARGth from last.
A complex command is one which used the minibuffer.
The command is placed in the minibuffer as a Lisp form for editing.
The result is executed, repeating the command as changed.
If the command has been changed or is not the most recent previous command
it is added to the front of the command history.
You can use the minibuffer history commands M-n and M-p
to get different commands to edit and resubmit.

4

個人的に私はセバスチャンのアイデアが役に立ったと思いました。これは実際のバージョンです

(global-set-key "\C-r" #'(lambda () (interactive)
                                 (eval (car command-history))))

2
isearchisearch-backwardは重要なナビゲーションコマンドであり、後者はデフォルトで<kbd> Cr </ kbd>にバインドされていることを考えると、おそらくrepeatコマンドのより適切なバインドを見つけることができます。Macでは、コマンド(super)-Yをお勧めします。これは、一部のアプリでは、これを「元に戻す」の反対として使用するための慣例があるためです。
ブリギッドマクドネル2012

0

これは古いですが、Emacsプロンプトで最後に入力したコマンドを取得しようとしていたときに、Googleが最初に投稿します。これらの答えはどれも私にとってうまくいかなかったので、私が後でこれにつまずくかもしれない人のために私の2セントを入れることにしました。私はPortacleを使用していますが、ここで探していたものが見つかりました。そのため、さまざまなセットアップで機能するのに十分な汎用性を期待しています。とにかく、私のために働いたのは、履歴を使用C-↑C-↓て循環することです。を使用M-pM-nて同様に機能しましたが、Bashをかなり使用しているため、矢印を使用することを好みます。

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