3

私はまだ EMACS に非常に慣れていませんが、emacs と elisp のマニュアルを読んでいるうちに慣れてきました。しかし、今私はこれにこだわっています:

入力シーケンスを正規表現スタイルでバインドする簡単な方法はありますか?

例: 関数 extends-window-horizo​​ntally のデフォルトのバインドは "Cx {" です。"Cx ({)+" のようなものにバインドし直して、"{" を繰り返すことで拡大ウィンドウの水平方向を繰り返し呼び出すことができるようにすることは可能ですか? Ctrlキーを複数回離すのではなく、文字?

4

4 に答える 4

4

必要なものをアーカイブする別の方法があります。

最後のコマンドを初めて繰り返したい場合は、 を押しC-x zます。その後は、 を押すだけで、必要な回数だけコマンドを繰り返すことができますz

このアプローチの利点は、特定のコマンドだけでなく、使用するすべてのコマンドで機能することです。

追加の参照として、ここの出力は次のとおりですC-h f

8.11 コマンドの繰り返し

単一のキーまたは で呼び出されるコマンドなど、多くの単純なコマンドは M-x COMMAND-NAME 、繰り返し回数として機能する数値引数を使用して呼び出すことで繰り返すことができます (*引数に注意::)。ただし、繰り返したいコマンドが入力を求めたり、別の方法で数値引数を使用したりする場合、その方法は機能しません。

コマンドC-x z(`repeat') は、Emacs コマンドを何度も繰り返す別の方法を提供します。このコマンドは、以前の Emacs コマンドが何であれ、それを繰り返します。コマンドを繰り返すと、以前に使用されたものと同じ引数が使用されます。毎回新しい引数を読み取るわけではありません。

コマンドを複数回繰り返すには、追加zの 's を入力します。各 コマンドは、もう一度コマンドを繰り返しzます。以外の文字を入力するzか、マウスボタンを押すと、繰り返しが終了します。

たとえば、C-u 2 0 C-d20 文字を削除するために入力したとします。と入力すると、このコマンド (引数を含む) をさらに 3 回繰り返して、合計 80 文字を削除できますC-x z z z。最初C-x zのコマンドはコマンドを 1 回繰り返し、その後の各コマンドはもう一度コマンドを z繰り返します。

于 2013-06-29T20:06:10.320 に答える
1

「Emacs 流」はC-u、プレフィックス キーとして使用することです。例C-u20C-x{

そうは言っても、あなたが求めることをすることは可能です。C-x {ただし、個別にバインドする必要があります{。前者は今日のように定義されますが、後者は次のように定義する必要があります。

(defun my-open-brace ()
  (interactive)
  (if (eq last-command 'shrink-window-horizontally)
      (progn
        (setq this-command 'shrink-window-horizontally)
        (call-interactively 'shrink-window-horizontally))
    (call-interactively 'self-insert-command)))

残念ながら、 で終わるシーケンスが多数ある場合、{それらすべてを処理するために 1 つの関数を作成する必要があります。

于 2013-06-29T19:19:40.380 に答える
1

独自の反復可能なコマンドを定義して、それを にバインドすることもできますC-x {。その後、要求どおりに正確に使用できます: C-x { { { {... を使用する代わりにC-x { C-x z z z z...

これがあなたがすることです:

 (defun your-repeat-command (command)
   "Repeat COMMAND."
   (let ((repeat-message-function  'ignore))
     (setq last-repeatable-command  command)
     (repeat nil)))


 (defun your-shrink-window-horizontally ()
   "Shrink window horizontally.
 You can repeat this by hitting the last key again..."
   (interactive)
   (require 'repeat nil t)
   (my-repeat-command 'shrink-window-horizontally))


 (define-key ctl-x-map "{" 'your-shrink-window-horizontally)

好きなコマンドでこれを行うことができます ---my-repeat-command繰り返し可能なバージョンを作成するために使用します。私はこれを、いくつかのライブラリで常に行っています。

于 2013-08-11T21:46:42.023 に答える