
1. 从“编辑器之神”到日常必备为什么你绕不开 vi/vim如果你在Linux世界里待过超过一天那么你大概率已经和vi或vim打过照面了。它可能是你第一次尝试编辑配置文件时那个让你手足无措、连怎么退出都不知道的黑屏终端也可能是你后来发现身边那些“大神”同事在服务器上运指如飞、效率惊人的秘密武器。这个诞生于1976年的文本编辑器至今仍是绝大多数Linux发行版的默认标配甚至在macOS的终端里vi命令也指向着它的增强版兄弟vim。很多人对它的第一印象是“反人类”、“难用”但一旦跨过最初的学习曲线你就会发现它是一把锋利无比的瑞士军刀能让你彻底摆脱鼠标在纯键盘操作中达到编辑效率的巅峰。这不仅仅是情怀更是生产力。无论是快速修改几行脚本还是在大规模代码文件中穿梭、重构vi/vim提供了一套独特而高效的模态编辑哲学这是现代图形化编辑器难以替代的核心价值。2. vi与vim一段进化史与核心哲学在深入具体操作之前有必要理清vi和vim的关系这有助于理解它的设计思路。vivisual editor的缩写是Bill Joy在1976年为BSD Unix系统开发的屏幕文本编辑器。在那个终端还是电传打字机或简单字符显示器的年代vi的设计是革命性的。而vimVi IMproved则是Bram Moolenaar在1991年发布的vi克隆版并在后续几十年里持续增强成为了事实上的标准。2.1 核心设计哲学模态编辑vi/vim最核心、也最让新手困惑的概念就是“模态编辑”。这与我们熟悉的Notepad、VS Code等“无模式编辑器”截然不同。在无模式编辑器中你敲击键盘字符就直接插入到文档里你想移动光标就得用方向键或鼠标。vi/vim则将编辑行为分成了几个不同的“模式”每个模式下相同的按键具有完全不同的功能普通模式Normal Mode这是启动vim后的默认模式也是命令的“待命”状态。在这个模式下你不能直接输入文本。键盘上的字母键变成了移动光标、删除、复制、粘贴等编辑命令。例如j是向下移动k是向上移动x是删除当前字符。这个模式是进行高效编辑的指挥中心。插入模式Insert Mode在这个模式下你的行为才和普通编辑器一样——输入文本。你需要从普通模式按iinsert、aappend等键进入。可视模式Visual Mode用于选择文本块。按v进入字符可视模式可以像鼠标拖动一样选择字符按V进入行可视模式按行选择按Ctrlv进入块可视模式可以进行矩形列选择。命令行模式Command-line Mode在普通模式下按:进入可以执行保存、退出、搜索替换、配置等更复杂的命令。这种设计的精妙之处在于它将“移动/命令”和“输入文本”这两个最频繁的操作彻底分离避免了频繁在键盘主键区和方向键/功能键之间切换让你的双手始终保持在键盘核心区域从而实现行云流水般的操作。一开始你可能觉得别扭但习惯后你会发现自己再也回不去了。2.2 vim相对于vi的飞跃性增强虽然我们常把vi/vim混为一谈但vim带来的改进是巨大的语法高亮对编程和标记语言如你提到的Markdown、HTML、SystemVerilog的支持让代码阅读一目了然。通过:syntax on开启。多级撤销原始的vi只支持撤销上一次操作而vim支持无限次撤销u和重做Ctrlr。多窗口与标签页可以分割窗口:sp水平分割:vsp垂直分割或使用标签页:tabnew同时编辑多个文件非常适合对比或参考。可视化选择上述提到的块选择模式Ctrlv是vim独有的强大功能便于进行列对齐编辑。广泛的扩展性支持通过.vimrc配置文件进行深度定制并拥有庞大的插件生态系统通过Vundle、Pathogen、vim-plug等管理器安装可以打造成一个全功能的IDE。脚本支持内置Vimscript允许用户编写脚本自动化复杂任务。因此在现代环境中我们谈论和学习的基本都是vim。你的系统里可能同时存在vi和vim命令但vi往往只是一个指向vim的软链接或者是一个精简兼容模式。3. 生存指南从零开始驾驭vim的必备操作让我们暂时忘掉那些高级技巧先解决最迫切的生存问题如何打开、编辑、保存并安全地离开vim。这是无数新手的第一个“坑”。3.1 启动与基础文件操作打开文件在终端中输入vim 文件名。如果文件不存在vim会创建一个新缓冲区保存时才会实际创建文件。打开并定位到第N行vim N 文件名这在查看编译错误或日志时非常有用。打开并定位到第一个匹配字符串vim /搜索词 文件名。启动后你便进入了普通模式。3.2 模式切换与文本输入进入插入模式开始打字i在当前光标位置前插入。a在当前光标位置后插入。I在当前行的行首非空字符前插入。A在当前行的行尾插入。o在当前行下方新建一行并进入插入模式。O在当前行上方新建一行并进入插入模式。返回普通模式在任何模式下插入、可视、命令行按Esc键。这是最重要的键没有之一。如果你不确定当前在什么模式多按几次Esc总能回到安全的普通模式。3.3 保存、退出及其他命令行操作在普通模式下按:进入命令行模式此时光标会移动到屏幕底部等待输入命令。保存:w退出如果未修改:q保存并退出:wq或按Shiftzz普通模式下。强制退出不保存修改:q!。当你改乱了文件想重新来时就用这个。强制保存只读文件:w!。需要你有足够的文件权限。另存为:w 新文件名显示行号:set number或:set nu。取消显示:set nonumber。语法高亮:syntax on 关闭:syntax off。注意网上流传的所谓“vim保存退出命令”如、ZZ、:x等:x和ZZ与:wq类似但只在文件被修改时才写入。对于新手牢记:wq和:q!这一对组合就足以应对99%的情况。3.4 基础移动与编辑在普通模式下移动光标不需要方向键基本移动h左j下k上l右。这最初是为了适配没有方向键的键盘现在则是为了手指不离开主键区。单词移动w移动到下一个单词词首e移动到当前或下一个单词词尾b移动到上一个单词词首。行内移动0移动到行首^移动到行首第一个非空白字符$移动到行尾。文档移动gg移动到文件第一行G移动到文件最后一行NG或:NN为数字移动到第N行。屏幕移动Ctrlf向下翻页Ctrlb向上翻页H移动到屏幕顶部M移动到屏幕中间L移动到屏幕底部。有了移动就可以组合编辑命令。vim的编辑命令格式通常是[数字]操作[范围]。删除x删除当前光标下的字符。dw从光标位置删除到一个单词的结尾delete word。d$或D从光标位置删除到行尾。dd删除整行。2dd删除当前行及下一行共两行。复制yankyy复制当前行。yw复制一个单词。粘贴putp在光标后粘贴。如果复制的是整行则在当前行下方粘贴。P在光标前粘贴。如果复制的是整行则在当前行上方粘贴。撤销与重做u撤销上一次操作。Ctrlr重做被撤销的操作。4. 效率飞跃解锁vim的中阶核心技能掌握了生存技能后以下这些功能将真正开始提升你的编辑效率。4.1 搜索与替换快速定位与批量修改搜索和替换是文本编辑的刚需vim在这方面的功能非常强大。搜索普通模式下按/进入向前搜索输入关键词后按回车。例如/hello。按?进入向后搜索。按n跳转到下一个匹配项N跳转到上一个匹配项。搜索支持正则表达式例如/^printf搜索以printf开头的行。替换命令行模式下的替换命令格式为:[范围]s/旧文本/新文本/[标志]。:s/foo/bar将当前行第一个foo替换为bar。:s/foo/bar/g将当前行所有的foo替换为barg表示全局。:%s/foo/bar/g将整个文件%表示所有行中所有的foo替换为bar。:10,20s/foo/bar/g将第10行到第20行所有的foo替换为bar。:s/foo/bar/gc替换时每个匹配项都询问确认c表示确认。实操心得替换时如果“旧文本”或“新文本”中包含/字符可以用其他分隔符如#避免转义。例如:s#/usr/local#/opt#g。4.2 可视模式与文本块操作可视模式让你能像在GUI编辑器里用鼠标选择一样操作文本。v进入字符可视模式移动光标选择字符。V进入行可视模式移动光标按行选择。Ctrlv进入块可视模式矩形选择这是vim独有的杀手级功能。选择后可以进行列插入、列删除、列替换等操作。列插入Ctrlv选中一列按I输入内容再按Esc会在选中的每一行前插入相同内容。这在批量添加注释或前缀时极其高效。列删除Ctrlv选中列按d删除。4.3 多文件与窗口管理真正的项目往往涉及多个文件。在vim内打开新文件命令行模式下:e 文件名。分割窗口:sp 文件名水平分割窗口并打开文件不指定文件名则打开当前文件。:vsp 文件名垂直分割窗口。窗口间切换Ctrlw后按方向键h/j/k/l或w循环切换。关闭窗口在要关闭的窗口内输入:q或:close。标签页:tabnew 文件名在新标签页打开文件。gt切换到下一个标签页。gT切换到上一个标签页。4.4 寄存器与宏复杂操作的自动化vim的寄存器就像剪贴板但功能更强。有匿名寄存器、命名寄存器a-z、系统剪贴板寄存器等。ayy将当前行复制到寄存器a中。ap则是粘贴寄存器a的内容。y复制到系统剪贴板需要vim支持clipboard特性。p从系统剪贴板粘贴。这解决了你提到的“如何从Windows复制到Linux”后在vim中粘贴的问题——确保vim编译时支持了剪贴板然后在终端vim里用p粘贴。宏是更强大的自动化工具可以录制并重复一系列操作。录制在普通模式下按q加一个寄存器名如a开始录制。屏幕左下角会显示recording。执行操作进行你想要的任何编辑操作移动、删除、修改等。停止按q停止录制。播放按a播放录制在寄存器a中的宏。重复上一次播放的宏。10a重复播放10次。宏非常适合对多行进行完全相同的格式化或修改操作。5. 个性化与进阶打造属于你的开发环境原生的vim已经很强但通过配置和插件它能化身成适应任何工作流的强大IDE。5.1 配置文件 .vimrc用户配置文件位于家目录下~/.vimrc。每次启动vim时都会读取此文件。一个极简但实用的基础配置示例 设置行号 set number 语法高亮 syntax on 高亮当前行 set cursorline 缩进设置 set tabstop4 Tab键显示为4个空格宽度 set shiftwidth4 自动缩进时为4个空格 set expandtab 将Tab自动转换为空格 set autoindent 自动缩进 搜索设置 set hlsearch 高亮显示搜索结果 set incsearch 输入搜索内容时实时匹配 取消搜索高亮快捷键 nnoremap silent C-l :nohlsearchCRC-l 设置文件编码 set encodingutf-8 set fileencodingsutf-8,gbk 鼠标支持在终端中 set mousea你可以根据网络热词中提到的需求进行定制例如设置主题如colorscheme darcula需要先安装该主题。打开文件定位到上次退出位置在.vimrc中添加au BufReadPost * if line(\) 1 line(\) line($) | exe normal! g\ | endif。解决中文乱码上面的fileencodings设置就是一种尝试。5.2 插件管理手动管理插件很麻烦推荐使用插件管理器如vim-plug。安装vim-plugcurl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim配置插件在~/.vimrc中添加call plug#begin(~/.vim/plugged) 声明插件 Plug preservim/nerdtree 文件树 Plug vim-airline/vim-airline 状态栏美化 Plug ycm-core/YouCompleteMe 代码补全需要编译 Plug preservim/nerdcommenter 快速注释 添加更多你需要的插件... call plug#end()安装插件重新打开vim执行:PlugInstall。5.3 针对特定语言的配置例如针对你提到的SystemVerilog 文件关键字自动高亮你可以安装专用的语法插件如Plug vhda/verilog_systemverilog.vim。对于Markdown可以使用Plug plasticboy/vim-markdown来获得更好的语法高亮和折叠支持。5.4 解决常见“坑”与故障zsh: command not found: vim这说明系统没有安装vim。在Ubuntu/Debian上使用sudo apt install vim安装在CentOS/RHEL上使用sudo yum install vim。在Git中设置vim为默认编辑器git config --global core.editor vim。这样在执行git commit等操作时就会调用vim。复制粘贴乱码确保终端、vim的编码设置一致尝试.vimrc中的编码设置。对于跨系统如Windows到Linux复制使用p粘贴并检查编码。插件安装失败/冲突仔细阅读插件文档确保依赖满足。有时插件之间会冲突需要逐一排查。6. 思维转换将vim哲学融入日常工作流学习vim不仅仅是记忆命令更是一种思维方式的转变。以下是一些将vim效率最大化的建议抛弃方向键强迫自己在普通模式下使用h/j/k/l移动。一开始慢但肌肉记忆形成后效率是方向键无法比拟的。组合命令思维vim命令是可组合的。d删除w一个单词组合成dwc修改$到行尾组合成c$删除到行尾并进入插入模式。记住操作范围这个模式。用重复代替重复不要手动做重复的事。用.重复上一次修改、宏q、或者带数字前缀的命令如5dd删除5行。利用搜索导航在代码中跳转不要只用j/k滚动多用/搜索函数名、变量名。定制你的武器花时间配置你的.vimrc安装几个核心插件文件浏览、语法检查、模糊查找。一个顺手的工具能激发你使用的欲望。最后学习vim没有捷径。它有一个著名的学习曲线图——开始很陡峭但一旦越过某个点你的编辑效率会持续稳定在一个很高的水平。建议每天花15分钟在 vimtutor 终端输入vimtutor即可上练习这是官方交互式教程。不要试图一次性记住所有命令先从生存指南开始然后在实际工作中遇到低效操作时主动去搜索“vim如何做XXX”逐步积累。很快你就会发现这个看似古老的编辑器已经成为你手中最得心应手的利器。