简介:这份gvim命令大全面向Vim/gvim初学者与需要快速查阅快捷键的开发者,系统整理了图形化Vim环境下的常用操作指令,帮助解决编辑效率低、命令记不牢的问题。资源包内共1个doc文档,约90KB,以纯文本形式罗列命令与简要说明,便于打印或离线查阅。内容覆盖基本命令、光标移动、文本编辑、宏录制、文件操作与显示设置六大类,例如语法加亮、行号设置、字体与配色方案、删除与替换、宏录制、文件加密及在线帮助查询等,并附有部分命令的实际使用示例。目前已有1079人学习下载,适合作为日常编码时的速查手册,也可供刚接触gvim的用户按类别逐步熟悉命令体系,快速上手并提升编辑效率。
1. 从一份 gvim 命令大全说起:为什么老手还在翻这份速查表
刚接手一台跳板机做排障,图形界面只有最朴素的 gvim,连插件都没装。对面运维丢过来一份 gvim 命令大全,说“你先把这个过一遍,比装一堆插件管用”。当时不以为然,直到用:g/pattern/d三秒清掉两千行日志里的噪声,才意识到这份东西的价值不在“全”,而在“准”——它把 Vim 的模式切换、寄存器、宏、窗口分屏、批量替换这些高频操作按场景归了类,而不是像vimtutor那样从 hjkl 开始教。这份 gvim 命令大全本质上是一份面向图形化 Vim 的操作索引,覆盖了从文件打开、缓冲区管理、多窗口编辑到正则替换、宏录制、外部命令调用的完整链路。适合谁?适合已经能进插入模式、但每次遇到批量改代码或处理大日志还要去搜“vim 怎么替换”的人。它不教你装插件,也不讲 Neovim 的 Lua 配置,就是纯命令层面的硬功夫。下面按“先能查、再能改、最后能批量”的顺序拆一遍,中间会穿插我踩过的坑和参数边界。
2. gvim 命令大全的检索逻辑:模式、寄存器与地址
2.1 命令模式与 Ex 命令的边界
很多人把 gvim 命令大全当成字典用,遇到问题就翻,但翻之前得先搞清楚自己当前在哪个模式。gvim 启动后默认是普通模式,按:进入命令行模式,这里能执行 Ex 命令;按/或?进入搜索模式;按v、V、Ctrl-v进入可视模式。这份大全里大量命令是 Ex 命令,比如:e、:w、:q、:s,它们的特点是以行地址开头,能跨行操作。普通模式下的dd、yy、p是操作符加动作,作用范围由光标移动决定。两者混用是新手翻车重灾区:在普通模式敲:wq没问题,但在插入模式敲:wq只会往文件里写这四个字符。我一般会先确认左下角有没有-- INSERT --或-- VISUAL --,没有才是普通模式。Ex 命令的地址格式是这份大全里最值得先啃的部分:.表示当前行,$表示最后一行,%表示全文,1,5表示第 1 到 5 行,/pat/表示匹配 pat 的下一行。地址可以叠加,比如.,$s/old/new/g表示从当前行到文件末尾替换。理解地址之后,:g、:v、:normal这些批量命令才有意义,否则只能一行行手改。
2.2 寄存器与宏:把重复操作录下来
gvim 命令大全里关于寄存器的部分经常被跳过,但它是宏的基础。Vim 有 26 个命名寄存器a到z,外加0(最近复制)、"(默认)、+(系统剪贴板)、*(选择缓冲区)、_(黑洞)、=(表达式)。在 gvim 里,"+y复制到系统剪贴板,"+p从系统剪贴板粘贴,这是和终端 Vim 最大的体验差异之一。宏的录制用q加寄存器名开始,再按q结束,@加寄存器名回放,@@重复上一次回放。比如要在一份日志里给每行行首加时间戳前缀,可以这样录:
" 普通模式下操作 qa " 开始录制到寄存器 a I " 进入行首插入 [2024-01-01] " 输入固定前缀 <Esc> " 回到普通模式 j " 下移一行 q " 结束录制 100@a " 回放 100 次逻辑说明:I是行首插入,A是行尾插入,o是下方新开一行。宏录制时所有按键都会被记录,包括移动和编辑。参数说明:100@a里的 100 是次数,如果文件不足 100 行,Vim 会在最后一行报错并停止,不会越界。注意:宏里如果包含:命令,回放时同样会执行,但地址是相对当前行的,所以录之前要确保起始位置正确。我一般录完先用@a跑一次,确认无误再100@a,避免批量改错还得靠u一层层撤。
2.3 多窗口与缓冲区:gvim 的图形化优势
gvim 相比终端 Vim 最直观的便利是可以用鼠标拖拽分屏、点击标签页切换。命令层面,:sp水平分屏,:vsp垂直分屏,:tabnew新建标签页,:tabn/:tabp前后切换。缓冲区命令:ls列出当前所有缓冲区,:b 3切到第 3 个缓冲区,:bd删除缓冲区但不关窗口。这份大全里有一组窗口尺寸调整命令容易被忽略::resize 20把当前窗口高度设为 20 行,:vertical resize 80把宽度设为 80 列,Ctrl-w =让所有窗口等分。实际排障时我习惯左边:vsp开日志,右边开配置文件,用Ctrl-w加方向键切换,比在终端里反复:q再:e快得多。注意::bd只是从缓冲区列表移除,如果文件有未保存修改会报错,需要加!强制,但强制会丢改动,别问我怎么知道的。
3. 批量替换与全局命令:把正则用在刀刃上
3.1 substitute 命令的参数拆解
:s是 gvim 命令大全里使用频率最高的 Ex 命令,完整格式是:[range]s/{pattern}/{string}/{flags}。range 不写默认当前行,写%是全文。pattern 是 Vim 正则,和 PCRE 有差异:\(\)分组,\|或,\+一或多个,\?零或一,\{n,m}次数范围。string 里&代表整个匹配,\1到\9代表分组,\u下一个字符转大写,\l下一个字符转小写,\U后续全大写直到\E。flags 常用g全局替换行内所有匹配,c每次确认,i忽略大小写,I区分大小写,e不报错。比如把user_id改成userId:
:%s/user_\([a-z]\+\)/user\u\1/g逻辑说明:\([a-z]\+\)捕获下划线后的小写字母序列,\u把捕获组第一个字符转大写,\1引用捕获内容。参数说明:%是全文范围,g是行内所有匹配。如果只想在可视区域替换,先V选中再按:,命令行会自动补'<,'>。注意:Vim 正则默认魔法模式,.*[是特殊字符,+?|()需要转义,这和很多语言相反,翻车时先检查转义。
3.2 global 与 vglobal:按条件执行命令
:g/{pattern}/{command}对匹配 pattern 的每一行执行 command,:v/{pattern}/{command}对不匹配的行执行。这是 gvim 命令大全里最被低估的组合。比如删除所有空行::g/^$/d。删除所有包含DEBUG的行::g/DEBUG/d。给所有包含TODO的行尾加标记::g/TODO/s/$/ [待处理]/。更复杂的用法是配合:normal批量执行普通模式命令:
" 给所有以 - 开头的行末尾加分号 :g/^-/normal A;逻辑说明::g/^-/匹配行首是-的行,normal A;在这些行上执行普通模式的A;,即行尾插入分号。参数说明:normal后面的命令按普通模式解析,不需要写:。注意:normal命令里如果包含特殊字符如<Esc>,要写成\e或直接按Ctrl-vEsc输入。我一般先用:g/pattern/p打印确认匹配范围,再换成实际命令,避免误伤。
3.3 外部命令与过滤:把 shell 拉进来
gvim 命令大全里:!和:r!的篇幅不大,但实战价值极高。:!{cmd}执行外部命令,:r!{cmd}把命令输出插入当前行下方。比如:r!date插入当前时间,:r!ls -la插入目录列表。范围加!可以把选中行传给外部命令并用输出替换,比如:%!sort对全文排序,:'<,'>!python -m json.tool把选中的 JSON 格式化。这个机制的本质是把 Vim 缓冲区当管道。参数说明:!后面的命令由 shell 解析,所以可以用管道、重定向。注意:Windows 下 gvim 默认用cmd.exe,如果装了 Git Bash 想用 Unix 工具,需要设set shell=bash,否则sort、grep可能找不到。我一般会在_vimrc里加set shell=powershell或指定完整路径,避免环境变量不一致。
4. 避坑与排查:gvim 命令大全里没写的翻车现场
4.1 替换时特殊字符没转义,结果全乱
现象:执行:%s/a.b/x/g后,a-b、a b、aab全被替换成x,原本只想替换a.b这个字面量。原因:Vim 正则里.匹配任意字符,不是字面量点号。解决:字面量点号要写成\.,或者用\V开启非常魔法模式,\V之后只有反斜杠和分隔符有特殊含义。我一般替换路径或 IP 时先加\V,比如:%s/\V192.168.1.1/10.0.0.1/g,省得逐个转义。
4.2 宏回放时光标越界或模式不对
现象:录好的宏@a跑几行后开始乱改,甚至把后续行删了。原因:录制时包含了相对移动,但起始行和回放行数不匹配,或者录制结束时没回到普通模式。解决:录宏时养成习惯,最后一步按q前确保在普通模式,且移动命令用j而不是G这类绝对跳转。回放前先用:set nowrapscan避免搜索绕回文件头。如果宏里用了dd,回放次数超过剩余行数会报错,可以先:g/pattern/normal @a限定范围。
4.3 系统剪贴板寄存器不可用
现象:"+y没反应,或者粘贴出来是乱码。原因:gvim 编译时没带+clipboard特性,或者 Linux 下没有xclip/xsel。解决::version查看是否有+clipboard,没有的话换用"*y试试,或者装vim-gtk3版本。Windows 下一般自带,如果不行检查set clipboard=unnamed是否被覆盖。我一般先:echo has('clipboard'),返回 1 才用+寄存器,否则老老实实:r !cat绕。
4.4 全局命令嵌套导致死循环
现象::g/pattern/s/old/new/g执行后 Vim 卡住或报E486。原因:替换后的内容又匹配了pattern,:g会反复扫描。解决:用:g/pattern/s/old/new/g时确保替换结果不再匹配原 pattern,或者改用:v反向选择。更稳妥的做法是分两步:先:g/pattern/s//new/g把匹配行改掉,再检查。注意::g默认从文件头扫到文件尾,如果命令本身会插入新行,新行也会被扫描,必要时加:g/pattern/.,+2s/...限定范围。
4.5 编码与换行符不一致导致文件损坏
现象:在 Windows 用 gvim 改完文件,传到 Linux 后每行末尾多出^M,或者中文变问号。原因:fileformat是dos而目标系统是unix,或者encoding与fileencoding不一致。解决::set ff=unix切换换行符,:set fenc=utf-8设置文件编码,:set enc=utf-8设置内部编码。改完用:w保存。我一般会在_vimrc里加set fileformats=unix,dos和set encoding=utf-8,打开文件时先用:set ff?和:set fenc?确认,再动手改内容。
5. 进阶技巧:把命令大全变成肌肉记忆
5.1 用 :normal 批量执行普通模式命令
:normal是连接 Ex 命令和普通模式的桥梁。前面提过:g/^-/normal A;,更通用的写法是:%normal @a对每一行回放宏 a。如果只想对匹配行操作,:g/pattern/normal @a。参数说明:normal后面的内容按普通模式解析,但不会触发映射,如果需要映射用:normal!反而禁用映射,normal不带!会应用映射。我一般用normal!避免自定义映射干扰。注意:normal命令里不能直接写:开头的 Ex 命令,要写:normal :s/old/new/这种嵌套,但可读性差,不如拆成两步。
5.2 命令行窗口与历史检索
gvim 命令大全里q:打开命令行窗口,q/打开搜索历史窗口。在命令行窗口里可以像编辑普通缓冲区一样修改历史命令,按<CR>执行光标所在行。这个功能在调试复杂替换时特别有用:先q:调出历史,改好参数再回车,不用在命令行里反复按上下键。Ctrl-f在命令行模式下也能打开命令行窗口。我一般把q:当成 Ex 命令的草稿纸,尤其是写:g嵌套时,先在窗口里拼好再执行。
5.3 用 :global 配合 :normal 做结构化重排
假设有一份日志,每行格式是时间 级别 消息,想改成级别 | 时间 | 消息。可以用:
:g/^\d\{4\}-\d\{2\}-\d\{2\}/normal 0f r|f r|dwf xp逻辑说明:0到行首,f跳到第一个空格,r|替换成竖线,f再跳到下一个空格,r|替换,dw删除时间字段,f跳到级别后空格,x删空格,p粘贴时间到后面。参数说明:\d匹配数字,\{4\}是重复 4 次。这种写法依赖字段位置固定,如果消息里也有空格会错位。更稳的方案是用:s加分组::%s/^\(\S\+\) \(\S\+\) \(.*\)/\2 | \1 | \3/。我一般优先用:s分组,可读性和容错都更好,normal只在字段位置绝对固定时用。
5.4 验证替换结果:diff 与撤销树
改完一批文件后,用:w !diff -u - 原文件对比,或者:earlier 5m回到 5 分钟前的状态。Vim 的撤销树用:undolist查看分支,g-和g+在时间线上前后移动。参数说明::earlier接受5m、1h、3(次)等单位。我一般在大批量替换前先:w backup.txt存一份,再用:earlier兜底。注意::earlier依赖undofile和undodir设置,如果没开持久化撤销,关掉文件就没了。
5.5 把高频命令绑到快捷键
最后一步是减少敲击。在_vimrc里加:
" 快速保存并退出 nnoremap <leader>w :w<CR> " 快速全文替换当前词 nnoremap <leader>r :%s/\<<C-r><C-w>\>//g<Left><Left> " 切换行号 nnoremap <leader>n :set nu!<CR>逻辑说明:<leader>默认是反斜杠,<C-r><C-w>在命令行插入光标下单词,<Left><Left>把光标移到两个斜杠之间等待输入替换词。参数说明:nnoremap是非递归普通模式映射,避免映射嵌套。我一般把<leader>改成逗号,减少小指负担。注意:映射不要覆盖 Vim 内置命令,比如别把dd映射成别的,否则宏和插件都会出问题。
从那以后我每次拿到新环境,第一件事不是装插件,而是把这份 gvim 命令大全里的:g、:s、:normal、q:四个命令各敲十遍,直到不用想就能写出来。希望帮到你。
本文还有配套的精品资源,点击获取