VIM 奇怪的行为 F1-10

VIM 奇怪的行为 F1-10

最近我在 VIM 中遇到了一个非常烦人的行为:

无论我处于插入模式还是正常模式,如果我按下其中一个 F 键,vim 都不会执行通常要执行的操作:

F1 - inserts a "P"
F2 - inserts a "Q"
F3 - inserts a "R"
F4 - inserts a "S"
F5-10 - inverts case

使用 GVim 时一切都按预期工作。有什么建议吗?我在 Ubuntu Maverick 10.10 上使用 7.3 版本。使用 terminator 但更改为默认终端没有帮助。

答案1

这是因为终端将 X 事件转换为如下的转义序列:

<F1> -> ^[OP
<F2> -> ^[OQ
<F3> -> ^[OR
<F4> -> ^[OS
<F5> -> ^[[15~
<F6> -> ^[[17~

等等(^[是转义字符)。在某些终端中,vim 能够从 terminfo 数据库中获取这些序列,但有时 terminfo 数据库与实际发送的字符不匹配或不包含key_f*条目。在这种情况下,按下<F1>将导致获得转义(退出当前模式,除非它是正常模式),O(在正常模式下:在光标行之前创建一个新行并进入插入模式)和插入到新行的一些字符(对于<F5>-...键来说~,是反转大小写的命令)。您可以通过在 vimrc 中输入类似以下内容来修复它

" Condition should identify terminal in question so "
" that it won't change anything for terminals without this problem "
if !has("gui_running") && $TERM is "xterm"
    for [key, code] in [["<F1>", "\eOP"],
                        \["<F2>", "\eOQ"],
                        \["<F5>", "\e[15~"],
                        \]
        execute "set" key."=".code
    endfor
endif

如果您的代码与我用作示例的代码不同,请使用<C-v><F1>(在插入或命令行模式下)获取您的终端发送的内容(更多信息:h i_CTRL-V)。

相关内容