1

前の入力を受け取り、それを繰り返す(のようにrepeat)が、他の何かが行われたときに上書きされないため、繰り返し可能なままであるコピーキャット関数が必要です。誰かアイデアはありますか?

編集:私がこれを意図している方法は、最後のキー押下に割り当てられた最後のものを繰り返しながら、Dキー押下がまったく同じように動作するモードrepeat(他の入力が行われた場合はそれを繰り返す)を持つことです。dD

EDIT2:ヤンクしてから、Cx zを押すと(私のモードではDにバインドされています)、ヤンクが繰り返されます。ただし、カーソルを下に移動してDを押しようとすると、下カーソルが繰り返されます。この場合、小さいdが最後の繰り返し(つまり、ヤンク)の動作を実行し、Dが下カーソルコマンドを繰り返します。したがって、最後に繰り返されたコマンドd保存し、Dは最後に繰り返されたコマンドを繰り返します。

4

2 に答える 2

1

これはコメントするには長すぎました:

基本的に、キーボードマクロの短いバージョンが必要なように感じますか?簡単に説明して、近いかどうかを確認します。

  • C-x (-マクロの記録を開始します。
  • 好きなことをしてください(たっ​​た1つのコマンドかもしれません)。たとえば、何かをヤンクします。M-d
  • C-x )-マクロの記録を終了します。
  • これでC-x e、マクロを再生できます(マクロを記録した後、他のことを実行できます。C-x e以前に記録したことを実行します(つまりM-d、この場合)。

コマンドが1つしかないことが確実な場合は、start-macro end-macroレコーディングの短縮バージョンを作成できるかもしれませんが、これらは実際にはマイナーな改善です。マクロに慣れたら、無意識のうちに実行するので、1回のキーストロークの節約はそれほど重要ではありません。

また、私があなたが何を求めているのか推測していなかった場合、これはあなたにとって興味深いものになるかもしれません:http ://www.gnu.org/software/emacs/manual/html_node/elisp/Command-History.html

于 2012-12-28T18:00:14.623 に答える
1

私の最善の試み。すべてのエラー処理が組み込まれているわけではありませんが、機能しますrepeat

(defun Navi-repeat () 

  ;; Checks whether the last repeatable command is the same as repeat var.
  ;; If yes, set repeat-navi to that command, and call it.
  ;; If no, check whether the Navi-repeat variable has been set before: 
  ;;        If bound, call it.
  ;;        If not bound, 
  ;;          give it the value of the last-repeatable command, and call it.

  (interactive)          
  (if (eq last-repeatable-command 'repeat)
      (progn (setq repeat-navi repeat-previous-repeated-command)
         (call-interactively repeat-navi)) 
    (if (boundp 'repeat-navi)
    (call-interactively repeat-navi)
      (progn  (setq repeat-navi last-repeatable-command)
          (call-interactively repeat-navi))
      )  
    )
)
于 2012-12-29T10:39:33.190 に答える