Vim 通过 Vnc:数字键盘键插入意外字符

Vim 通过 Vnc:数字键盘键插入意外字符

这个问题与如何在 osx 上通过 term=xterm 的 iterm2 让数字键盘在 vim 中工作?如何在 osx 上通过 term=xterm 的 iterm2 让数字键盘在 vim 中工作?但我找不到相应答案中描述的元素。

我正在从 Windows 机器通过 VNC 访问 Linux 机器。

在 Linux 机器上,通过这个 VNC 会话,我在 Vim 中进行编辑,在插入模式下,当我从数字键盘输入“/”和“*”(即启动 C 样式注释)时,会插入字符“o”和“j”(具体来说,似乎插入了回车符,然后在第一个制表位插入“o”或“j”)。

我记录的问题和答案似乎是 MacOs 特有的;例如,在 Linux 机器上运行的终端和 VNC 的“首选项”之间,我找不到任何关于“带有数字键盘的 xterm”的引用。

有人能建议如何在我描述的环境中解决这个问题吗?我不清楚这种行为的根源是 Vim、终端还是 VNC。

如果相关的话,这里是$TERMVim 版本和 .vimrc:

>vim --version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Dec 21 2016 15:22:28)

>echo $TERM
screen-256color

>cat ~/.vimrc
set backspace=indent,eol,start
set shiftwidth=2
set softtabstop=2
set expandtab
set smarttab
filetype plugin indent on
autocmd FileType make set noexpandtab shiftwidth=4 softtabstop=0
set cino+=(0
set statusline=
set statusline +=\[%n] "buffer number
set statusline +=\%F   "File
set statusline +=%=%l/%L "currentLine/totalLine
set statusline +=%4v "virtual column
set laststatus=2
set t_Co=256
colorscheme torte
set number
"let g:netrw_liststyle = 3
syntax on

更新: 另一个可能相关的因素:我在 bash shell 上运行 tmux。我的 .tmux.conf:

>cat ~/.tmux.conf 
unbind C-b
set -g prefix C-a
bind C-a send-prefix
set-window-option -g mode-keys vi
set -g set-titles on
set-window-option -g automatic-rename off
set-option -g allow-rename off

答案1

附言:我在网上找到这个信息,但现在找不到源链接。

  1. 在一些常见位置创建以下文件:

    $ cat fix_numpad 
    ! initialization, 
    ! Ensure that we have all keysyms we're going to use assigned to something. 
    
    keycode any = KP_Insert 
    keycode any = KP_End 
    keycode any = KP_Down 
    keycode any = KP_Next 
    keycode any = KP_Left 
    keycode any = KP_Begin 
    keycode any = KP_Right 
    keycode any = KP_Home 
    keycode any = KP_Up 
    keycode any = KP_Prior 
    keycode any = KP_Delete 
    
    ! Set the keypad to numeric mode. 
    ! You may need to adjust KP_Next/KP_Prior; possible alternatives 
    ! are KP_Page_Down/KP_Page_Up or just Next/Prior. 
    ! just Next. 
    keysym KP_Insert = KP_0 
    keysym KP_End    = KP_1 
    keysym KP_Down   = KP_2 
    keysym KP_Next   = KP_3 
    keysym KP_Left   = KP_4 
    keysym KP_Begin  = KP_5 
    keysym KP_Right  = KP_6 
    keysym KP_Home   = KP_7 
    keysym KP_Up     = KP_8 
    keysym KP_Prior  = KP_9 
    keysym KP_Delete = KP_Decimal
    
    $
    
  2. 分配新映射

    $ xmodmap fix_numpad
    

注意:您可以将其添加到您的~/.vnc/xstartup文件中,以便始终保留您的映射。

答案2

这个问题意味着你正在使用xterm,并且想要将应用程序键盘模式切换为普通的(虽然它已设置为应用)。对于xterm,您可以随时通过“VT 选项”菜单中的菜单项(按住 Control 键并单击鼠标中键)打开/关闭应用程序模式:

这些菜单项在以下情况下被选中(带有复选标记):应用模式

xterm使用键码信息来告诉它是否按下了键盘键,并使用正常/应用程序模式来决定为该键发送什么。

答案3

我发现解决此问题的唯一方法是修改TERMtmux 中的环境变量:

setenv TERM xterm

(我很沮丧,我在 tcsh)

然而,这不是一个推荐的长期解决方案。tmux 开发人员表示可能会出现显示问题。目前它对我来说表现良好,但这绝对会是一个“当需要时”的事情:我很想听到更好的解决方案。

答案4

我使用 x11vnc 作为服务器,使用 tigervnc 作为查看器。同样的问题。

我已经用 修复了它setxkbmap -option 'numpad:microsoft'

相关内容