Emacs Home 和 End 键

Emacs Home 和 End 键

我在 urxvt 中运行 Emacs,并使用 zsh 作为 shell:

~ % echo $TERM && echo $SHELL
rxvt-256color
/bin/zsh
~ %

我现在的问题是无法让Homekey & Endkey 在 Emacs 中正常工作。

这是我的 keysbind 的 .Xresources 示例:

 URxvt.keysym.Home:            \033[1~
 URxvt.keysym.End:             \033[4~

 URxvt.keysym.C-Up:            \033[1;5A
 URxvt.keysym.C-Down:          \033[1;5B
 URxvt.keysym.C-Right:         \033[1;5C
 URxvt.keysym.C-Left:          \033[1;5D

 URxvt.keysym.Meta-Up:         \033[1;3A
 URxvt.keysym.Meta-Down:           \033[1;3B
 URxvt.keysym.Meta-Right:          \033[1;3C
 URxvt.keysym.Meta-Left:           \033[1;3D

 URxvt.keysym.S-Up:            \033[1;2A
 URxvt.keysym.S-Down:          \033[1;2B
 URxvt.keysym.S-Right:         \033[1;2C
 URxvt.keysym.S-Left:          \033[1;2D

借助在网上找到的这个 rxvt.el 文件(感谢其作者),我可以设置 Ctrl+箭头和 Shift+箭头。

~ % cat ~/.emacs.d/rxvt.el
[...]
(define-key function-key-map "\033[1;5A" [(control up)])
(define-key function-key-map "\033[1;5B" [(control down)])
(define-key function-key-map "\033[1;5D" [(control left)])
(define-key function-key-map "\033[1;5C" [(control right)])
(define-key function-key-map "\033[1;2A" [(shift up)])
(define-key function-key-map "\033[1;2B" [(shift down)])
(define-key function-key-map "\033[1;2D" [(shift left)])
(define-key function-key-map "\033[1;2C" [(shift right)])
[...]

Home以下是有关& 的内容End

~ % cat ~/.emacs.d/rxvt.el
[...]
(define-key function-key-map "\033[1~" [home])
(define-key function-key-map "\033[4~" [end])                                 
(define-key function-key-map "\033[7~" [find])
(define-key function-key-map "\033[2~" [insert])
(define-key function-key-map "\033[8~" [select]) 
(define-key function-key-map "\033[5~" [prior])
(define-key function-key-map "\033[6~" [next])
[...]

我将这些行添加到我的 .emacs 文件中,但没有任何效果:

~ % cat ~/.emacs
 [...]
 ;;default configuration for home & end key
 (global-set-key [home] 'beginning-of-line)
 (global-set-key [end] 'end-of-line)

以下是该sudo showkey命令告诉我的有关Home& 的信息End

 <user>@localhost ~ % sudo showkey
 [sudo] password for <user>: 
 kb mode was ?UNKNOWN?
 [ if you are trying this under X, it might not work
 since the X server is also reading /dev/console ]

 press any key (program terminates 10s after last keypress)...
 keycode  28 release
 ^[[1~keycode 102 press     //home key was pressed
 keycode 102 release
 ^[[4~keycode 107 press     //end key was pressed
 keycode 107 release
 keycode  29 press
 ^Ccaught signal 2, cleaning up...

有人有建议吗?

另外,如果我说Ctrl+有效并且具有我想要的和+A相同的行为,也许会有所帮助。HomeCtrlEEnd

答案1

这些对我有用:

(global-set-key (kbd "<home>") 'beginning-of-line)
(global-set-key (kbd "<end>") 'end-of-line)

答案2

我认为你比我更精通 emacs。但是,我根本不使用Home和键。End

我只是使用:

  • Ctrl+a将光标移至home行首。
  • Ctrl+e将光标移至end行首。

  • Alt++ ( SHIFTC- ,<)将光标移至home文件/缓冲区。

  • Alt++ ( SHIFTC- .>)将光标移至end文件/缓冲区。

我在默认的 emacs 教程中学到了这些。

我想,只有在我掌握了触摸打字之后,我才会发现这些键很实用。

答案3

如果您有兴趣自定义 rxvt 键绑定以改善 Emacs 互操作性,您可能会对我编写的 Emacs 包感兴趣,它可以教 Emacs 和终端如何正确识别所有 PC 键盘键和修饰键组合:

https://github.com/Cyber​​Shadow/term-keys

它可以为 urxvt(和其他终端)生成一个配置文件,将键和键 + 修饰符组合转换为唯一的序列代码,以便 Emacs 正确识别它们。

相关内容