向上移动箭头不突出显示文本 Emacs iterm2



我最近在这里得到了修复M-left等问题的帮助:终端元箭头键绑定中的 emacs,但无法使用类似的解决方案修复Shift-up。当我尝试shift-up时,我收到错误<select> is undefined.我尝试使用以下方法重新映射它:

(add-hook 'term-setup-hook                                                                                                                                                                         
'(lambda ()                                                                                                                                                                                      
 (define-key function-key-map "e[1;9A" [M-up])                                                                                                                                                
 (define-key function-key-map "e[1;9B" [M-down])                                                                                                                                              
 (define-key function-key-map "e[1;9C" [M-right])                                                                                                                                             
 (define-key function-key-map "e[1;2A" [S-up])                                                                                                                                                
 (define-key function-key-map "e[1;9D" [M-left])))  

但转变仍然没有定义。我还尝试通过使用从cat返回的转义序列来重新绑定密钥,这是^[[1;2A。奇怪的是,下移确实有效。 shift-select-mode也标在t

听起来像是我通过 Putty 访问 Ubuntu 12.04 机器时遇到的麻烦,当时 END 导致 Emacs 23.3.1 说<select> is undefined。事实证明,这是术语信息的问题,它允许程序以独立于设备的方式使用终端。

基于这个 2008 年的错误报告讨论,我通过在 ~/.bashrc 的顶部添加以下内容来解决我的问题:

#so the END key will work correctly in Emacs over PuTTY
TERM=xterm-vt220

注意,使用 xterm-vt220 或默认的 xterm,当我按 END 时,emacs -Q -nw ESC O A 表示 Up,ESC [ A 表示 Shift-Up 时,会变得ESC [ 4 ~。 (要查看 Emacs 获得的键代码,请按一些按钮,然后按C-h,l。 对于相同顺序的相同键,cat[4~[A[OA...所以向上和向上移位是奇怪的颠倒。


如果您不想更改术语信息,请参阅此讨论以获取解决方法http://lists.gnu.org/archive/html/help-gnu-emacs/2011-05/msg00211.html

您应该能够通过以下方式解决此问题:

(define-key input-decode-map "e[1;2A" [S-up])

为了使它在正确的时间生效,您必须在.emacs中使用以下内容:

(if (equal "xterm" (tty-type)) (define-key input-decode-map "e[1;2A" [S-up]))

只是为了添加有关解决方案的更多信息:https://github.com/arthurnn/dotfiles/blob/8d56f2419da9a4cb654d8941f379d6d5783bdb90/.emacs.d/init.d/setup-bindings.el#L3-L10 这应该可以解决包括emacsclient在内的所有情况。最后一行负责修复使用 emacsclient 时的 Shift-up。

最新更新