25

Alt+ [ Up/ Down]で行を上下に入れ替える、Eclipseにはない機能を追加しようとしていますが、これらのキーを適切に割り当てる方法を一生理解することはできません。私はそれを-nwモードで(つまりシェルウィンドウで)使用しており、通常はスクリーンセッションで実行します。

グローバルキーバインディングを使用すると、のような文字の組み合わせで機能させることができますが(kbd "M-m")、矢印キーに対して試したすべての組み合わせは、意味をなさないメッセージを表示するだけです。常に次のようになります。

"ESC <up> is undefined"

私が試したこと:

(global-set-key (kbd "M-<up>") 'transpose-line-up)    
(global-set-key (kbd "<escape>-<up>") 'transpose-line-up)
(global-set-key [M-up] 'transpose-line-up)
(global-set-key [\e \M-O A] 'transpose-line-up)

そして、C-h cただ戻ります:

ESC <up> (translated from ESC M-O A) is undefined

ESCまたはを使用しても、これらは機能しませんAlt

どうすればこれを機能させることができますか?Alt+ [ Up/ ]として使用したいのDownは、それが私が慣れているからです。

編集

コメントから:

  • C-q Up印刷し^[OAます。

  • C-q M-Upカーソルを印刷^[して1行上に移動します。

  • C-h kAlt+ Up)は。を出力しESC <up> (translated from ESC M-O A) is undefinedます。

提案をありがとう、しかしそれらはすべて同じであることがわかりました。

4

7 に答える 7

24

Emacsには、さまざまな端末タイプでのファンクションキーと修飾子のエンコーディングの変化を処理するための複雑なメカニズムがあります。すべての場合に箱から出して動作するわけではありません。次の設定が端末で機能するはずです。

(define-key input-decode-map "\e\eOA" [(meta up)])
(define-key input-decode-map "\e\eOB" [(meta down)])
(global-set-key [(meta up)] 'transpose-line-up)
(global-set-key [(meta down)] 'transpose-line-down)

端末がこれらのキーの組み合わせをエンコードするために使用するエスケープシーケンスについてEmacsに(を介して)通知する手順を実行している限り、(kbd "<M-up>")and(kbd "<M-down>")の代わりに[(meta up)]andを使用できるはずです。[(meta down)]input-decode-map

于 2010-12-05T19:19:20.990 に答える
9

私はいつもC-h k (key)(ie describe-key)を使ってEmacsが(key)をどのように参照しているかを調べ、それ(kbd)を利用するために同じ文字列で使用します。

この場合、はをdescribe-key返す<M-up>ので、(global-set-key (kbd "<M-up>") 'transpose-line-up)(JFセバスティアンが行ったように)使用します。

編集:

emacs -nw(画面を介さずに)実行し、describe-keyレポートESC <up> (translated from ESC M-[ A)を実行(kbd "ESC <up>")し、バインドに成功します。

実行screen emacs -nw中のdescribe-keyレポートはESC <up> (translated from ESC M-O A)、表示されているものと一致しているように見えますが、のバインディングは(kbd "ESC <up>")引き続き機能します。

(nbはCygwinで画面4.00.03およびEmacs 23.2.1でテストされています。)

于 2010-12-04T02:19:23.280 に答える
5
(global-set-key [M-up] 'beginning-of-buffer)
(global-set-key [M-down] 'end-of-buffer)

私のOSXには、この定義があり、Alt-up / downを実行して、バッファの上部/下部にジャンプします。

于 2010-12-04T02:22:07.510 に答える
4

醜い回避策:

内部の端末C-q <M-up>で作成したものを入力しました。^[[1;3Ascreenemacs

(global-set-key (kbd "<M-up>") 'transpose-line-up)
(global-set-key (kbd "^[[1;3A") 'transpose-line-up)

Lisp error: (void-function transpose-line-up)キーバインディングが機能するようにしました。

注:C-qコマンドを実行しquoted-insertます。

于 2010-12-04T01:03:17.923 に答える
2

次の行は、macOS10.11.6およびGNUEmacs25.2.1で機能します。

(global-set-key (kbd "ESC <down>") 'end-of-buffer)
(global-set-key (kbd "ESC <up>") 'beginning-of-buffer)
于 2017-07-08T00:49:07.437 に答える
0

transpose-line-up関数があり、すでに定義されていると仮定transpose-line-downします(元の質問のサンプルコードからのようです):

(global-set-key [(meta up)] 'transpose-line-up)
(global-set-key [(meta down)] 'transpose-line-down)
于 2010-12-05T17:24:55.533 に答える
0

OSXターミナルで動作します:

(global-set-key (kbd "ESC <up>") 'transpose-line-up)
(global-set-key (kbd "ESC <down>") 'transpose-line-down)
于 2020-05-02T17:06:07.930 に答える