首页 文章

shift向上箭头不会突出显示文本emacs iterm2

提问于
浏览
6

我最近帮助修复 M-left 等等:emacs in terminal meta arrow keybindings,但无法使用类似的解决方案修复 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 .

2 回答

  • 2

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

    基于这个2008 bug report discussion,我通过在〜/ .bashrc的顶部添加以下内容来解决我的问题:

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

    N.B.,无论是xterm-vt220还是默认的xterm, emacs -Q -nw 在按END时为 ESC [ 4 ~ ,向上为 ESC O A ,为Shift-Up为 ESC [ A . (要查看Emacs获得的密钥代码,请按某些按钮,然后按 C-h,l . )对于相同顺序的相同按键, cat 表示 [4~[A[OA ...因此,向上和向上移位奇怪地反转 .


    如果您不想更改您的terminfo,请参阅此讨论以获取解决方法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(等于“xterm”(tty-type))(define-key input-decode-map“\ e [1; 2A”[S-up]))

  • 9

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

相关问题