切换窗口/节点时Vim自动执行未知命令的问题求助
Vim切换终端焦点后自动执行搜索命令的问题
问题描述
切换回运行Vim的终端窗口时,Vim会自动执行光标所在单词的全局搜索,显示该单词在文件中的所有匹配行,必须按回车才能恢复编辑操作。无法确定触发该行为的命令或快捷键,也无法主动复现该输出。
已尝试操作
- 在运行Vim的终端间切换焦点,期望无自动操作发生
预期结果
切换焦点后无任何自动操作,可直接继续编辑工作
实际结果
自动执行单词搜索,输出格式如下:
<filename> <index>: <line number> <line> <index>: <line number> <line> ... Press ENTER or type command to continue
示例
编辑脚本~/.config/bspwm/scripts/screenshot.sh时,光标位于单词option0上,通过鼠标或快捷键(Super + hjkl)切换到其他窗口再切回,终端底部显示:
.config/bspwm/scripts/screenshot.sh 1: 4 option0='area to clip' 2: 8 options="$option0\n$option1" 3: 15 "$option0") Press ENTER or type command to continue
环境信息
Operating System: EndeavourOS Window manager: bspwm Kernel: Linux 6.3.7-arch1-1 Architecture: x86-64
无~/.vimrc文件,vim --version输出:
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled May 20 2023 16:56:14) Included patches: 1-1572 Compiled by Arch Linux Huge version without GUI. Features included (+) or not (-): +acl +file_in_path +mouse_urxvt -tag_any_white +arabic +find_in_path +mouse_xterm +tcl/dyn +autocmd +float +multi_byte +termguicolors +autochdir +folding +multi_lang +terminal -autoservername -footer -mzscheme +terminfo -balloon_eval +fork() +netbeans_intg +termresponse +balloon_eval_term +gettext +num64 +textobjects -browse -hangul_input +packages +textprop ++builtin_terms +iconv +path_extra +timers +byte_offset +insert_expand +perl/dyn +title +channel +ipv6 +persistent_undo -toolbar +cindent +job +popupwin +user_commands -clientserver +jumplist +postscript +vartabs -clipboard +keymap +printer +vertsplit +cmdline_compl +lambda +profile +vim9script +cmdline_hist +langmap -python +viminfo +cmdline_info +libcall +python3/dyn +virtualedit +comments +linebreak +quickfix +visual +conceal +lispindent +reltime +visualextra +cryptv +listcmds +rightleft +vreplace +cscope +localmap +ruby/dyn +wildignore +cursorbind +lua/dyn +scrollbind +wildmenu +cursorshape +menu +signs +windows +dialog_con +mksession +smartindent +writebackup +diff +modify_fname -sodium -X11 +digraphs +mouse -sound -xfontset -dnd -mouseshape +spell -xim -ebcdic +mouse_dec +startuptime -xpm +emacs_tags +mouse_gpm +statusline -xsmp +eval -mouse_jsbterm -sun_workshop -xterm_clipboard +ex_extra +mouse_netterm +syntax -xterm_save +extra_search +mouse_sgr +tag_binary -farsi -mouse_sysmouse -tag_old_static system vimrc file: "/etc/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" defaults file: "$VIMRUNTIME/defaults.vim" fall-back for $VIM: "/usr/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -g -ffile-prefix-map=/build/vim/src=/usr/src/debug/vim -flto=auto -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 Linking: gcc -Wl,-E -Wl,-rpath,/usr/lib/perl5/5.36/core_perl/CORE -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -flto=auto -L/usr/local/lib -o vim -lm -ltinfo -lelf -lacl -lattr -lgpm -Wl,-E -Wl,-rpath,/usr/lib/perl5/5.36/core_perl/CORE -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -flto=auto -fstack-protector-strong -L/usr/local/lib -L/usr/lib/perl5/5.36/core_perl/CORE -lperl -lpthread -ldl -lm -lcrypt -lutil -lc -L/usr/lib -ltclstub8.6 -ldl -lz -lpthread -lm
问题原因及解决方法
1. 排查终端/窗口管理器的焦点切换配置
bspwm或终端模拟器可能在焦点切换时,向Vim发送了*(光标所在单词全局搜索)的按键事件:
- 检查bspwm配置文件
~/.config/bspwm/bspwmrc,确认焦点切换的快捷键绑定没有额外发送字符到终端 - 检查终端模拟器(如Alacritty、Kitty)的配置,是否存在焦点切换时自动输入字符的设置
2. 检查Vim系统级配置
虽然没有用户~/.vimrc,但系统级配置可能存在自动触发的命令:
- 运行
cat /etc/vimrc和cat $VIMRUNTIME/defaults.vim,搜索是否有FocusGained相关的自动命令(autocmd),例如:
若存在此类配置,删除或注释即可autocmd FocusGained * normal! *
3. 测试纯Vim环境
运行vim -u NONE(不加载任何配置文件),重复焦点切换操作:
- 若不再触发自动搜索,说明问题来自配置文件
- 若仍触发,问题大概率在终端或窗口管理器层面
4. 检查终端粘贴/选择行为
部分终端会在焦点切换时自动粘贴选中的文本,而Vim普通模式下*字符会触发全局搜索:
- 确认没有未取消的文本选中状态
- 检查终端是否配置了自动粘贴选中内容到活动窗口
内容的提问来源于stack exchange,提问作者dmg_
相关产品推荐
相关产品推荐

