我正试图在Eclipse中输入一个我想念的功能,其中 Alt + [ Up / Down ]转换行向上或向下,但不能为我的生活弄清楚如何正确分配这些键。我在-nw
模式下使用它(所以只在shell窗口中),通常在屏幕会话中运行。
使用全局键绑定,我可以使用它来处理字母组合,例如(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 打印^[
并将光标向上移动一行。
C-h k ( Alt + Up )打印ESC <up> (translated from ESC M-O A) is undefined
。
感谢您的建议,但他们都是一样的。
答案 0 :(得分:20)
Emacs有一个complex mechanism来处理各种终端类型上的功能键和修饰符编码的变化。在所有情况下,它都无法开箱即用。以下设置应适用于您的终端:
(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>")
和(kbd "<M-down>")
代替[(meta up)]
和[(meta down)]
{1}})关于终端用来编码这些密钥组合的转义序列。
答案 1 :(得分:7)
我总是使用 Ch k(key)(即describe-key
)来了解Emacs如何引用(键),然后使用(kbd)
使用相同的字符串来利用它。
在这种情况下,describe-key
会返回<M-up>
,因此我会使用(global-set-key (kbd "<M-up>") 'transpose-line-up)
(正如J.F. Sebastian所做的那样)。
编辑:
运行emacs -nw
(但不是通过屏幕),描述密钥报告ESC <up> (translated from ESC M-[ A)
和(kbd "ESC <up>")
成功绑定它。
运行screen emacs -nw
,描述密钥报告ESC <up> (translated from ESC M-O A)
,它似乎与您看到的一致,(kbd "ESC <up>")
的绑定对我来说仍然有用。
(n.b。在Cygwin下测试,屏幕为4.00.03,Emacs为23.2.1。)
答案 2 :(得分:5)
(global-set-key [M-up] 'beginning-of-buffer)
(global-set-key [M-down] 'end-of-buffer)
在我的OSX中,我有这个定义来执行Alt-up / down跳转到缓冲区的顶部/底部。
答案 3 :(得分:4)
我输入了 C-q&lt; M-up&gt; ,它在^[[1;3A
内的screen
内的终端上生成emacs
。
(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
。
答案 4 :(得分:1)
以下几行适用于 macOS 10.11.6 和 GNU Emacs 25.2.1 :
(global-set-key (kbd "ESC <down>") 'end-of-buffer)
(global-set-key (kbd "ESC <up>") 'beginning-of-buffer)
答案 5 :(得分:0)
假设您已经定义了transpose-line-up
和transpose-line-down
函数(因为它似乎来自原始问题中的示例代码):
(global-set-key [(meta up)] 'transpose-line-up)
(global-set-key [(meta down)] 'transpose-line-down)
答案 6 :(得分:0)
可在OSX终端上运行:
(global-set-key (kbd "ESC <up>") 'transpose-line-up)
(global-set-key (kbd "ESC <down>") 'transpose-line-down)