ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Vim教程:从安装卸载到模式编辑与常用命令

Vim教程:从安装卸载到模式编辑与常用命令 1. 为什么学vim从“退不出去”的经典梗说起“如何退出vim”——这个问题在技术社区流传了快二十年到今天依然是高频搜索词听起来像段子但它是真实存在的困境很多人第一次在终端里敲下vim xxx屏幕上立刻弹出一个不像普通软件的界面鼠标点不了、按钮找不到输几个字母按回车也没什么反应人就懵了。我当年第一次在Ubuntu上用vim改apt源时也卡了十分钟最后还是直接关闭终端了事。之所以要专门写一篇安装、卸载加使用方式的完整教程是因为vim的地位太特殊它不是“一个编辑器”那么简单而是几乎所有Linux服务器的默认编辑器之一。你通过SSH连上一台没有图形界面的云主机也好、树莓派也好、刚装的纯命令行Ubuntu也好想改配置文件、写脚本绕不开vi/vim。更重要的是vim是一个跨发行版、跨服务器环境都存在的“通用能力”学会了它你在任意一台Linux机器上都能改文件、写代码、排查问题不需要依赖图形工具或某个特定IDE。这篇教程适合三类人刚装了Linux虚拟机还不太敢用终端的纯新手、主要在服务器上做运维和部署的工程同学、以及装了vim却一直只会i进入然后Esc再:wq的老实用户——我希望读完能让你真正理解vim的运行逻辑而不是背二十个孤立命令。我敢说只要你花一晚上搞懂“模式”这个核心概念vim的所谓学习曲线并不会比学一个新IDE的快捷键更陡。这篇的顺序是先聊为什么它长这样然后安装、卸载再讲核心使用方式最后是我踩过的一些坑。2. 安装篇不同发行版的安装方法与验证2.1 Debian/Ubuntu系apt安装与vim变体选择如果你用的是Ubuntu、Debian这类基于dpkg/apt的发行版安装很简单。先更新软件源索引sudo apt update然后安装即可sudo apt install -y vim装完验证vim --version能打印出类似VIM - Vi IMproved 8.2或9.x的开头就说明安装成功了。这里有个很容易忽略的细节Debian/Ubuntu的软件源里vim其实有几个变体安装vim这个实际包名时系统默认拉取的是vim-runtime加底层的vim包但如果你在某些精简镜像或最小化安装的环境里可能会遇到vim.tiny。vim.tiny是一个裁剪版支持vi基本模式但缺少语法高亮、缺少很多编译进完整版的功能。你可以看vim --version输出里是否包含syntax、multi_byte等特性如果是-syntax或-xterm_clipboard说明我建议你换一换。如果你希望vim支持系统剪贴板也就是能在vim里复制内容然后粘贴到浏览器或终端外面可以装图形界面的变体sudo apt install -y vim-gtk3这个包和vim本体是冲突的还是替代关系准确地说它们都提供vim这个二进制装vim-gtk3后会直接覆盖普通vim的位置同时带来clipboard特性。对经常在vim和其他窗口之间复制代码的人来说这一步非常值。如果你平时用CentOS/RHEL系列用yum或者dnfsudo yum install -y vim-enhanced或在新版系统上sudo dnf install -y vim-enhanced注意包名在RHEL系是vim-enhanced而不是vim因为默认的vim-minimal对应的是最小化的vi兼容版。Arch系则直接sudo pacman -S vim装完之后做两个小测试第一是vim --version确认版本第二是随便打开一个文件输入i进入插入模式确认左下角出现-- 插入 --再按Esc、输入:q回车能正常退出。基本盘验证过了说明vim能用后面再慢慢玩。2.2 离线安装rpm/deb包我之所以单独提离线安装是因为很多内网服务器、生产环境根本没有外网权限apt update和dnf install很可能第一步就失败。离线安装的核心思路是在一台能联网的同版本系统上把包下载好拷贝进去装。在Ubuntu上可以用apt downloadapt download vim会得到一个.deb文件拷到目标机器上后执行sudo dpkg -i vim*.debRHEL系用yumdownloader或dnf downloadsudo dnf download vim-enhanced sudo rpm -ivh vim-enhanced-*.rpm这里容易踩的坑是依赖不全。vim在Debian上依赖libtinfo、libc6等基础库如果目标机器太精简dpkg装的时候会报依赖错误。这时候可以用dpkg -i先装再用apt -f install自动补缺或者用apt-get install ./vim.deb这种方式让apt自动处理依赖这是我现在最推荐的做法。2.3 安装后的目录与自检清单安装完成后内核的几个关键路径值得看一眼/usr/bin/vim主程序二进制/etc/vim/系统级配置文件目录里面通常有vimrc对所有用户生效~/.vimrc当前用户的个人配置文件优先级高于系统级配置但文件默认不存在需要自己创建~/.vim放置插件、临时文件、交换文件的用户级目录自检清单也很简单which vim ls -l /usr/bin/vim vim --version | head -n 5which vim查到路径ls -l确认是否真的指向vimxxx防止某些系统把vim符号链接到vi甚至nano。3. 卸载篇什么时候卸、怎么卸干净3.1 你真的需要卸载vim吗很多新手问“怎么卸载vim”场景各不相同有的是为了换Neovim——那是另一个现代化重构版编辑器内核方向一致但插件体系更强有的是觉得vim太难用想回到nano或图形编辑器也有一部分纯属好奇想看看卸载命令长什么样。在动手之前我想先提醒一句vim几乎是Linux系统的通用组件本身不常驻内存安装它不影响什么性能卸载它也不能让系统变快多少。真正的卸载理由基本只有“准备换成neovim避免两个编辑器配置冲突”和“做镜像精简、想把系统压到最小体积”。如果你只是因为不会用就卸载我更建议先学会基础操作再说很多人的体验转折点出现在弄懂模式编辑之后而不是之前。3.2 remove和purge的差别假如确认要卸Debian系用sudo apt remove vim这个命令会移除可执行文件但会保留配置文件比如/etc/vim/vimrc。如果希望连配置文件一起清掉sudo apt purge vimpurge这个动作是我个人比较推荐的“卸载干净”标准二进制、配置文件、系统级vimrc全清后续重装等于全新状态不会出现配置文件残留导致的状态错乱。RHEL系对应的是sudo dnf remove vim-enhanced sudo dnf autoremovednf autoremove会清掉那些因为依赖关系被自动装进来、而现在不再需要的包顺手把dependencies清干净。装包的时候我们用的是sudo apt install -y vim卸载后可以再用一条确认命令which vim没有任何输出说明主程序已经清掉了。3.3 用户级配置残留的清理apt purge清的是系统级文件你自己当前用户目录下的配置文件它管不着。卸载干净的标准步骤还应该手动删掉rm -rf ~/.vimrc rm -rf ~/.vim这里有个坑一旦删了~/.vim你的插件、配色、语法缓存全部没了重新安装vim后就是一个完全裸的配置很多人卸载完重装发现“vim怎么变难看了”就是没意识到用户级配置文件是独立存在的。删之前务必想清楚最好把.vimrc和.vim目录先备份到~/vim_backup_$(date %Y%m%d)这种目录里后悔还能拉回来。另外还需要注意有没有系统级残留dpkg -l | grep vim如果有输出说明系统里还有其他vim相关的包比如vim-common、vim-runtime这些如果也想卸可以一起purge。RHEL系则用rpm -qa | grep vim来确认所有包都清干净了。3.4 一处小坑vi还在卸载vim后你可能会发现敲vi依然能打开一个看起来很像vim的界面——别慌这通常是vi或者nvi是独立的另一个编辑器。Debian系里默认vi指向的是一个最小化的vim兼容版本即使你卸掉了完整vimvi这个命令可能还在。如果这个vi也被你嫌弃可以一起卸sudo apt purge vim-tiny vi不过我的看法是留着vi不是坏事至少哪天服务器上没有vim可用时vi还能保命。这也是我反复强调“先学会基本编辑再决定卸不卸”的原因——有些环境你没法随心所欲装软件。4. 使用篇核心操作从打开文件到编辑保存4.1 模式编辑的本质为什么vim不让你直接打字新手最大的困惑是“按一个字母怎么不显示在屏幕上”。要解释清楚就要先明白vim的设计年代和设计意图它诞生在那个没有鼠标、没有方向键的终端时代键盘是唯一的输入设备。普通编辑器把“打字内容”和“操作命令”混在同一套键盘输入里而vim反其道而行把键盘在不同模式下的角色分开。通俗地说vim的模式很像手机输入法的中英文切换。输入法开着中文时按键盘敲出来的是汉字切换成英文时再按同一组键敲出来的是字母。vim也一样——在普通模式下你按D是“删除到行尾”的命令而在插入模式下你按D屏幕上就会打出一个字母D。模式变化了同一颗按键的含义就变化了这才是vim的核心哲学。把编辑器分成“普通模式Normal Mode”“插入模式Insert Mode”“可视模式Visual Mode”“命令行模式Command-line Mode”之后你的双手就可以在普通模式下快速移动光标、复制删除只把插入模式当“写字状态”使用。这套逻辑一旦接受比在图形编辑器的菜单里来回点鼠标高效得多。4.2 三种模式与切换方法我们先记住最重要的两个切换打开vim后默认处于普通模式按i进入插入模式到左下角出现-- 插入 --这时才能正常打字打完字按Esc回到普通模式右下角/左下角的模式提示消失这个循环就是vim最基础的日常进入插入、写字、Esc、用普通模式操作、再进入插入。很多新手一开始总是记不住按哪个键进入插入模式我给你一个最小记忆法开机第一件事想编辑就按i想退回去就按Esc这两个键能从早到晚覆盖你80%的操作。除此之外还有可视模式普通模式下按v进入字符可视模式、V进入行可视模式、CtrlV进入块可视模式选中一片文本后可以统一删除、复制或替换这个相当于图形编辑器里按住鼠标拖选的过程。命令行模式则是在普通模式下按:进入用于输入保存、退出、查找替换这类“给编辑器下指令”的操作。为了加深记忆我把模式切换整理成一张极简表操作按键说明进入插入模式在光标前i最高频进入插入模式在光标后a想在当前字符后追加时用进入插入模式行首/行尾I / A快速跳到行首行尾输入进入插入模式下方开新行o不用先回车再移到新行进入插入模式上方开新行O向当前行上方插入空行回到普通模式Esc最核心的“退出写字状态”进入可视模式v / V / Ctrlv选择字符/行/块进入命令行模式:输入保存、退出、替换等指令4.3 光标移动与编辑命令懂得了模式下一步是学会在普通模式下高效移动光标。新手会觉得用方向键更舒服vim当然支持方向键但既然这套设计是为了让手不离开主键盘区你最终应该试试这几颗键h向左、j向下、k向上、l向右0跳到行首、$跳到行尾w按单词右跳、b按单词左跳gg跳到整个文件的第一行G跳到整个文件的最后一行——热搜词里“vim怎么到底端”答案就是G500G或:500跳到第500行在普通模式下这些移动动作可以很自然地与操作命令组合。比如x删除光标所在字符dd删除当前整行5dd删除连续5行dw删除光标到单词结尾d$删除光标到行尾yy复制当前整行yw复制当前单词p在光标后粘贴P在光标前粘贴u撤销Ctrlr重做很多教程喜欢把命令列成几百条让你背但我不建议这样做。你先只记住“删除用d、复制用y、粘贴用p”熟练之后会发现大量操作是“动作对象”的组合d$是“删除到行尾”y w是“复制单词”d 5 j是“向下删5行”。理解了这套语法命令是可以自己推出来的不需要死记。下面这张表是我建议新手优先掌握的编辑命令操作命令备注删除当前字符x相当于退格删除右边字符删除整行dd高频很顺手删除到行尾d$相当于记事本里的删到行尾删除整个单词dw光标放在单词开头更准复制整行yy注意是复制不是剪切粘贴p / Pp放光标后P放光标前撤销u所有编辑操作都能撤销反撤销Ctrlr撤销多了就按它4.4 查找、替换与跳转服务器上调配置文件时最常干的不是从头把文件读一遍而是直接搜关键字。在普通模式下按/输入要查找的字符串回车即可/sbin光标会跳到第一个匹配项按n跳到下一个按N跳到上一个。如果你想全程看到匹配高亮可以在vim里启用:set hlsearch搜索完觉得满屏高亮太刺眼可以执行:nohlsearch就能在不清除搜索历史的情况下关掉当前高亮。替换是另一个高频操作语法看着复杂拆开其实很好理解。最基本的一句:s/old/new这是替换当前行的第一个匹配。如果想替换当前行全部匹配加g:s/old/new/g如果想把整个文件里的所有匹配都替换掉开头加一个%表示“全文件范围”:%s/old/new/g如果还希望每替换一处都询问你确认再追加c:%s/old/new/gc我特别推荐新手用最后这种带c的写法尤其是批量替换配置项时。有些文件名、注释文本里恰好也包含同样的字符串一键全量替换很危险逐条确认虽然多按几次y但能避免改错不可逆的内容。跳转方面除了前面提到的gg、G、:行号vim还支持从当前位置向后搜索跳转Ctrlg能显示当前文件名和行号Ctrlo还能跳回上一个位置。这个“回跳”在看代码、改配置时非常救命你在一处定义和一处引用之间来回查看用Ctrlo/Ctrli像浏览器的后退前进一样。4.5 保存退出全家桶“vim如何保存退出”之所以能排进热搜前几是因为新手的保存退出确实会遇到多岔路。普通模式下按:然后输入:w保存文件不退出:q退出当前文件未保存时会提示且拒绝退出:wq保存并退出 两步合一:q!不保存强制退出放弃所有修改ZZ保存并退出注意它是大写ZZ且不需要冒号:x同:wq但只在文件有改动时才写盘文件没改动时它只退出我见过不少新手原本想保存退出结果只输入了:w文件确实保存了但vim还在于是又按CtrlC、乱敲一顿最后被迫关闭终端然后下次打开发现文件被锁。这里的关键点在于:w保存之后继续按:q退出就好一点不复杂。还有一个很多人不知道的保存技巧当你在普通模式下修改完一个只读文件比如/etc/nginx/nginx.conf没注意权限就vim它修改后:w会提示E45: readonly option is set无法保存。这时不要气馁可以直接用vim的sudo-save大法:w !sudo tee %这行命令的含义是把当前缓冲区内容通过管道交给sudo tee用root身份写回原文件。它会把文件覆盖写回之后正常:q退出即可。这个技巧不鼓励你乱用但在忘了sudo的情况下几乎能救命。5. 进阶体验多文件操作与.vimrc配置5.1 同时编辑多个文件和分屏命令行里可以一次打开多个文件vim file1.c file2.h在vim内部用:n切换下一个文件、:prev返回上一个用:ls列出所有打开的缓冲区再:b 缓冲区编号跳过去。这个功能在改一个项目里的多个相关文件时特别顺手。还有一种更直观的方式是分屏:split 文件名 水平分屏 :vsplit 文件名 垂直分屏分屏之后用Ctrlww在屏幕间切换光标。我自己在排查跨文件问题时习惯上方放代码、下方放日志两栏对照着一眼就能看出问题位置。还有一个我最近发现很多人不用的小技巧gf把光标移到当前文本中出现的某个文件路径上直接按gfvim会尝试打开那个文件。热搜词里“vim打开文件里引用的文件路径”说的就是它。比如你在main.c里看到#include utils.h把光标移到utils.h上按gfvim会按path选项里配置的目录去找文件并打开。如果默认找不到可以执行:set path**让vim递归扫描当前目录树再按gf成功率会高很多。这个操作在阅读别人代码时堪比IDE的“跳转定义”非常值得练。5.2 一份不劝退新手的.vimrc配置很多新手装了vim后觉得界面单调、没高亮其实是因为默认配置里语法高亮可能没开或者配色太素。我可以给你一份亲测顺手的入门配置放到~/.vimrc里就行set number 显示行号 set relativenumber 相对行号方便像10j这样跳转 set syntax on 打开语法高亮 set showcmd 右下角显示当前插入的命令 set laststatus2 总是显示状态栏 set tabstop4 set shiftwidth4 set expandtab 输入Tab展开成4个空格 set autoindent set smartindent 自动缩进写代码时很好用 set hlsearch 搜索高亮 set incsearch 边输边搜 set ignorecase set smartcase 搜索时如果输入大写就走大小写敏感 set encodingutf-8 set fileencodingsucs-bom,utf-8,gbk,gb18030 防止中文乱码 set cursorline 当前行加高亮定位方便其中relative number相对行号对vim的移动命令真的很加分看到目标行距离当前行下面12行直接按12j跳过去不需要心里数格子。不过这属于习惯问题有人不喜欢去掉也无妨。我建议配置不要贪多。有人喜欢在vim里装一堆插件变成IDE但插件越多维护成本越高老版本插件和你用的vim版本之间还可能冲突一堆报错往往让新手直接弃坑。先用三个星期纯vim把自己的流程跑顺再按需装一两个插件比如管理插件用的vim-plug、文件树nerdtree体验会稳很多。5.3 中文乱码与编码设置国内用户最容易遇到的怪问题之一就是vim打开一个文件里面全是乱码。这个问题的根因是编码不匹配。Linux终端默认的locale可能是UTF-8而Windows上传上来的文件往往是GBK/GB2312编码。我在配置文件里写的set encodingutf-8 set fileencodingsucs-bom,utf-8,gbk,gb18030意思就是vim内部尽量用UTF-8处理但读取文件时按ucs-bom、utf-8、gbk、gb18030的顺序去猜编码。这样大多数Windows来源的文件打开后都能正常显示。如果已经打开文件才发现乱码可以临时执行:set fileencodinggbk :set fileencodingsgbk,utf-8 :ee命令会重新加载文件按新编码再读一遍通常乱码就变正常了。6. 避坑清单我踩过的vim的坑6.1 sudo vim与文件权限问题很多人习惯所有事都加sudo包括sudo vim ~/.vimrc。这个习惯很危险因为sudo执行时当前用户是root创建的交换文件、配置文件的属主都变成root。下次你用普通用户打开同一个文件会提示你没权限或是遇到“swap file already exists”因为.swp文件的属主是root你没法删除它。正确做法是当前用户的配置文件.vimrc直接用vim ~/.vimrc编辑只有改/etc/下的系统级文件时才用sudo vim /etc/xxx。万一已经因为sudo操作产生了root属主的.swp文件可以sudo rm ~/.vimrc.swp然后再正常打开。6.2 CtrlS冻结终端的诡异现象在vim里编辑到一半突然发现无论怎么按键盘都没反应终端像死机。这个“死机”十有八九是你按了CtrlS它是终端软件的“暂停输出/输入”快捷键整个终端流入被冻结vim自然没反应。解决办法不是关终端重来而是按CtrlQ解除冻结一切恢复正常。这个坑能卡住很多新手我也卡过不止一次现在习惯性提醒自己vim里如果感觉所有按键都失效第一反应按CtrlQ试试。6.3 Esc键失灵的替代方案还有一种是插拔了USB键盘、或者在部分终端模拟器配置下Esc键响应慢普通人按一下esc以为没生效再按一下还是没反应其实第一次的ESC已经被终端“吞”掉了。此时可以等一秒或者直接用Ctrl[代替Esc。这是终端原生支持的ESCAPE键等价物我经常用它来替代物理Esc尤其在笔记本方向键不顺手时能少一次手部大位移。出处是VT100终端的ESC字符本身就能用Ctrl[输入。所以不用担心“只有vim认这个”所有终端都认。6.4 swap文件与“vim卡死”的真相如果正常关闭vim它不会留什么痕迹。但如果你直接关闭SSH连接、终端窗口崩溃或者一个vim还在运行另一个终端又打开了同一个文件vim会提示E325: ATTENTION Found a swap file by the name .nginx.conf.swp这个swap文件是vim为了防止意外退出丢失数据而写的“草稿本”。遇到这个提示第一件事不是删掉.swp而是先想想是不是有另一个vim进程还开着同一个文件。用一个简单的命令确认ps aux | grep vim确认没有其他vim在编辑后再删掉对应的.swp文件rm .nginx.conf.swp之后就能正常打开文件了。如果文件重要且不确定是否丢失内容也可以直接按R让vim从swap文件恢复再另存为新文件做一次确认。6.5 别把vim复杂化先让流程跑通最后一个“坑”其实来自心态。我见过太多人第一天学vim就想着把所有命令全会、把所有插件全装上结果对话框式报错、快捷键冲突撞在一起彻底放弃了。我的路线建议是第一周只用i、Esc、:wq、方向键完成“打几个字然后保存退出”第二周开始练dd、yy、p、u尝试用这些做简单的整行操作第三周再引入搜索和替换。你会发现vim的体验是阶梯式提升的而不是某个瞬间突然顿悟。我自己最初是因为被vim虐过太多次才下定决心把模式编辑彻底搞懂的。后来每次通过SSH远程改服务器配置别人还在用nano手忙脚乱找光标我已经一条:wq收工了。这种“回本”的感觉大概就是继续学下去的最大动力。如果你在安装或使用中遇到别的问题可以顺着vim --version、配置文件、swap文件这条链路逐个排查基本能覆盖绝大多数日常状况。
返回列表