我在 Debian、Win Vista 和 WinXP(后两者使用 Cygwin)下使用 Vim。
为了更轻松地处理制表符,我将<C-Left>
和映射<C-Right>
到:tab(prev|next)
。此映射在 Debian 计算机上非常有效。
<C-Left>
但是,据我所知,在 Windows 机器上,按下会删除 5 行,并且会干扰光标位置,而<C-Right>
按下也会执行此操作,并且还会进入插入模式。
问题:简而言之,我如何才能找出 Vim 的行为原因?有没有办法回溯活动命令和按键?罪魁祸首可能是插件?(我没有安装插件,可能是 Cygwin 发行版默认包含的插件……)如果是这样,我该如何找到它?
编辑1:好的,看来,我得到了第一个踪迹:终端发送<C-Left>
“ ^[[1;5D
”,并发送右“ ^[[1;5C
”(使用<C-V><C-Left>
技巧进行评估)。如果 vim 逐字解释并丢弃第一个字符,它就可以解释这种奇怪的行为。有什么想法,我该如何更改此键映射?
附加诊断:
无论存在什么
~/.vimrc
文件,都会发生这种行为(因此与我上面提到的映射无关),并且不会继承某些文件/etc/vim/vimrc
,因为这在默认的 Cygwin 安装中不存在。:verbose map
没有产生任何新的见解。根据 .vimrc 文件的存在,要么什么都没有出现,要么出现了我提到的映射:help <C-Left>
这表明默认值是简单的光标移动,但显然事实并非如此。Cygwin 下的 Vim 版本:
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Feb 11 2010 17:36:58) Included patches: 1-264 Compiled by http://cygwin.com/ Huge version without GUI. Features included (+) or not (-): +arabic +autocmd -balloon_eval -browse ++builtin_terms +byte_offset +cindent -clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments +cryptv +cscope +cursorshape +dialog_con +diff +digraphs -dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path +float +folding -footer +fork() -gettext -hangul_input +iconv +insert_expand +jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap +menu +mksession +modify_fname +mouse -mouseshape +mouse_dec -mouse_gpm -mouse_jsbterm +mouse_netterm -mouse_sysmouse +mouse_xterm +multi_byte +multi_lang -mzscheme -netbeans_intg -osfiletype +path_extra -perl +postscript +printer +profile -python +quickfix +reltime +rightleft -ruby +scrollbind +signs +smartindent -sniff +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup -X11 -xfontset -xim -xsmp -xterm_clipboard -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -g -O2 -D_FORTIFY_SOURCE=1 Linking: gcc -L/usr/local/lib -o vim.exe -lm -lncurses -liconv
答案1
:map
没有参数将显示您已映射的内容里面vim。任何超出此范围的键盘映射(例如来自 Kernel Tools 软件包中的 Keyboard Remap)都将在 vim“看到”按键之前进行,因此,显然 vim 无法解释原始按键。