家庭和终端的 Emacs 密钥

tbe*_*ett 9 keyboard-shortcuts zsh emacs urxvt

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

~ % echo $TERM && echo $SHELL
rxvt-256color
/bin/zsh
~ %
Run Code Online (Sandbox Code Playgroud)

我目前的问题是我无法在 Emacs 中使Homekey & Endkey 正常工作。

这是我用于键绑定的 .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
Run Code Online (Sandbox Code Playgroud)

由于这个 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)])
[...]
Run Code Online (Sandbox Code Playgroud)

以下是有关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])
[...]
Run Code Online (Sandbox Code Playgroud)

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

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

这是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...
Run Code Online (Sandbox Code Playgroud)

有人有建议吗?

如果我说Ctrl+A有效并且具有我想要的HomeCtrl+ Efor相同的行为,也许它会有所帮助End

小智 11

这些对我有用:

(global-set-key (kbd "<home>") 'beginning-of-line)
(global-set-key (kbd "<end>") 'end-of-line)
Run Code Online (Sandbox Code Playgroud)


小智 3

我认为你对 emacs 的掌握比我更先进。但是,我根本不使用Home和键。End

我只是使用:

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

  • Alt+ SHIFT+ ,(C-<) 将光标移至home文件/缓冲区的位置。

  • Alt+ SHIFT+ .(C->) 将光标移至end文件/缓冲区的位置。

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

我想,只有在我首先掌握了盲打之后,我才发现这些按键很实用。