Pre*_*117 3 terminal vim gvim xterm
最近我开始在 VIM 中遇到一个非常烦人的行为:
无论我是在插入模式还是普通模式下,如果我按下 F 键之一,vim 都不会做它通常打算做的事情:
F1 - inserts a "P"
F2 - inserts a "Q"
F3 - inserts a "R"
F4 - inserts a "S"
F5-10 - inverts case
Run Code Online (Sandbox Code Playgroud)
使用 GVim 时,一切都按预期工作。有什么建议?我在 Ubuntu Maverick 10.10 上使用 7.3 版。使用终止符但更改为默认终端无济于事。
这是因为终端将 X 事件转换为如下转义序列:
<F1> -> ^[OP
<F2> -> ^[OQ
<F3> -> ^[OR
<F4> -> ^[OS
<F5> -> ^[[15~
<F6> -> ^[[17~
Run Code Online (Sandbox Code Playgroud)
等等(^[
是一个转义字符)。在某些终端中,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
Run Code Online (Sandbox Code Playgroud)
如果您的代码与我用作示例的代码不同,请使用<C-v><F1>
(在插入或命令行模式下)获取终端发送的内容(更多信息参见:h i_CTRL-V
)。
归档时间: |
|
查看次数: |
1261 次 |
最近记录: |