V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
redsonic
V2EX  ›  程序员

linux 上 VIM 的一个奇怪问题

  •  
  •   redsonic · 2016-03-22 18:57:24 +08:00 · 2689 次点击
    这是一个创建于 3203 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用了好几年的 vim 在 X 下用的很顺手,这些天准备抛弃桌面 所以开搞虚拟终端( tty )。发现原来桌面下 vim 的 ctrl+下划线映射绑定 ( nmap <C-_> command )失效了,变成了光标上移一行(和按‘ k ’一样),而减号也是上移一行, 也就是说这时候 vim 收到的还是减号, shift 被吃了? 奇怪的是 nmap <C-L> 还是有效的。
    刚开始我怀疑是 TERM 环境变量的问题,但改成和桌面一样的还是不行。然后怀疑是 vim 的 bug ,但自己编译一个还是老样子,最后把 vimrc 删了还是没有解决。
    7 条回复    2016-03-22 21:19:09 +08:00
    htfy96
        1
    htfy96  
       2016-03-22 19:09:09 +08:00
    zyguan
        2
    zyguan  
       2016-03-22 19:14:17 +08:00
    个人认为, x 上包了层 xkb ,很多东西就不一样了
    redsonic
        3
    redsonic  
    OP
       2016-03-22 19:22:59 +08:00
    @zyguan 对, x 把 keycode 映射成 symbol 再送给应用程序的。 tty 是映射成另外一套,但主键盘区的基本照搬 keycode 不会动。 刚发现另外一个发行版的 vim 在 tty 下面 nmap <C-_>工作正常,正在试他那个版本。如果再不行,我觉得是 tty 的问题,也就是内核的问题?
    yangtukun1412
        4
    yangtukun1412  
       2016-03-22 19:27:50 +08:00
    vim 里 <C+_> 实际上 map 的是 <C+/> ...
    redsonic
        5
    redsonic  
    OP
       2016-03-22 20:01:14 +08:00
    @htfy96
    @zyguan
    @yangtukun1412

    换版本无效,换内核无效。新装一台和当前发行版一样的虚拟机里面 tty vim map <C-_>却是正常的。

    然后突然发现 tty 里面 map <C-_> 按下 ctrl 和减号就 work 了, shift 真的被吃了。这到底是怎么了
    redsonic
        6
    redsonic  
    OP
       2016-03-22 20:27:51 +08:00
    @htfy96
    @zyguan
    @yangtukun1412

    问题找到了, 很久之前我把 tty 的键盘布局改成了 mac , ctrl+shift+减号 vim 看到的是 ^[- , pc 的正常布局应该是 ^_ 。直接 loadkey us 恢复 PC 布局。 或者改 /etc/sysconfig/keyboard 里面的 KEYTABLE 变量永久生效。 算了不折腾 mac 的布局,之前肯定把 /usr/share/kbd/keymaps 里面的搞乱了。
    zyguan
        7
    zyguan  
       2016-03-22 21:19:09 +08:00
    @redsonic 手动的真快,赞一个!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2492 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 05:02 · PVG 13:02 · LAX 21:02 · JFK 00:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.