ARTICLE DETAIL

资讯详情

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

Vim命令与配置实战:从模式编辑到高效文本处理

Vim命令与配置实战:从模式编辑到高效文本处理 1. 一个活了四十年的编辑器为什么现在还有人搜vim命令每次看到搜索框里又有人敲下vim命令和vim配置我都有点感慨。一个诞生于上世纪七十年代的编辑器在图形界面、AI辅助编程满天飞的今天还能让这么多人主动去搜、去折腾、去安装这本身就说明问题了。Vim不是考古项目它是一套至今仍然高效得离谱的文本操作体系一旦习惯它的键位和模式你会觉得鼠标在编辑文本这件事上几乎是一种浪费。这篇文章不是教科书复读。我会从Vim的底层设计逻辑讲起把日常最常用的vim命令按记忆地图重新组织再给出我实际在用的vim配置参考和插件方案然后专门处理一个新手必踩的坑——在Ubuntu里装Vim时报package vim is not available怎么办最后聊聊在macOS上用Vim和Xcode分别处理什么场景。内容面向两类人一类是被用Vim很酷引过来、想系统入门的初学者另一类是已经会用基本命令、想解决具体痛点剪贴板、缩进、中文乱码、swap恢复的经验型用户。我先说一句结论Vim的学习曲线确实陡但它不是玄学它的陡是因为它把编辑文本这件事重新设计了一遍。你花三天记住的键位会在接下来十年里每天还给利息。1.1 为什么这种过时的设计反而成了生产力很多人第一次打开Vim连字都打不进去因为默认进的是Normal模式按键不产生字符而是发指令。这个体验极其劝退但恰恰是Vim的核心。普通编辑器里你想删除一个单词可能是选中、按Delete、再处理光标位置在Vim里一个dw就结束了。更关键的是这种操作不是专用快捷键而是由操作符动作组合出来的语言。我经常用一个类比普通编辑器是开手动挡每一步都要自己盯着Vim是学了一套手势指令熟练之后手指几乎不用离开键盘中排。你在写代码、改配置、处理日志、编辑远端服务器上的文件时不用在键盘和鼠标之间来回切换这种连续性的价值在长时间编码时会非常明显。还有一点容易被忽略Vim几乎存在于一切Unix-like系统上。你SSH到一台新服务器、进一个Docker容器、甚至路由器管理界面里键盘按出来的是vi还是vim都能凑合着改文件。这种哪里都有它的普适性是任何现代IDE都给不了的。1.2 哪些人最该先学哪些人可以先放放我的建议很明确如果你经常要连服务器、改配置文件、写脚本、处理日志文本Vim是值得投入的必修课早晚逃不掉如果你只做纯前端页面、纯iOS界面设计并且日常开发环境中根本不需要碰命令行那确实可以先缓一缓。但这两种身份常常是重叠的——很多iOS开发者同样要写Ruby脚本、改Fastlane配置、处理CI的yml文件。在这个场景里Vim的作用不是替代Xcode而是让你在不打开重量级IDE的时候也能用最快的速度把文本改完。所以与其问该不该学Vim不如问我在命令行环境里是不是已经受够了用nano上下左右一点点挪。2. 理解模式编辑Vim把命令做成了语法2.1 三种模式你手里拿的不是输入框是遥控器Vim最反直觉的设计就是模式。我把它们简化成三句话Normal模式默认键盘是遥控器按下的每个键都在操控编辑器比如j下移、x删除。Insert模式键盘才是打字机你敲什么屏幕就出什么按Esc回到遥控器状态。Visual模式相当于按下Shift选中的状态v逐字符、V整行、Ctrlv按列块选。想明白这一点你就不会再犯打开Vim第一件事是找光标在哪打的错误。再说直白点Vim的Normal模式才是它的主场Insert模式只是偶尔插一段话的临时状态。真正的高手一天按Esc的次数比输字符的次数还多因为大部分时间你是在指挥编辑而不是打字。这个思维转换是整个学习过程中最难过的一关一旦过了后面所有命令都像拼积木一样自然。2.2 命令是能组合的语言式的编辑思维这是Vim真正拉开差距的地方。编辑操作不是一堆互相独立的快捷键而是动词名词的语法结构。动词是操作符比如d删除、c修改等于删除并进入Insert、y复制、缩进名词是动作范围比如w词、i(括号内、$行尾、G文件末尾。我来举几个实际组合你感受一下这个模式的威力dw删一个词还有daw、diw这种更细的变体ci(光标在括号对中间时一键删掉括号里所有内容并进入输入状态yyp复制当前行并粘贴到下一行相当于向下复制一行G从当前行到文件末尾全部缩进一层。为什么这个设计高效因为它的组合是有限的几个原子操作却可以覆盖几乎无穷的场景。你不需要记住删除括号内内容的专门快捷键你只需要理解c是改、i(是括号内然后现场组合。这比在菜单里翻找命令不知道快到哪里去了。另外命令前可以加数字表示重复几次比如3dd删除三行、2yy复制两行。这个看似简单的功能配合.命令重复上一次修改能产生一种批处理手工活的爽感先处理一次然后按.替你做剩下的所有同样改动。我见过很多人用CtrlC/V复制粘贴一段带缩进的文本然后在下一处手动重复同样操作其实用.和宏能更快地完成。3. vim命令地图按功能分组背键位效率最高3.1 光标移动先学会满文件乱跳移动是编辑的基础这句话在Vim里格外成立。你每次按下删除、复制、替换其实都隐含了一个移动的前提光标在哪里决定操作作用在哪儿。所以我建议新手先别急着背编辑键先把移动练熟。Vim的移动命令我按作用范围分成三组字符和行内、词间、全篇这样记忆负担最小。字符和行内移动h左、l右、j下、k上0到行首^到行首第一个非空字符$到行尾f字符跳到本行下一个该字符处F反向找t是跳到字符前一位。小技巧f(配合cf(可以快速改写函数参数。词间移动w跳到下一个词首e跳到下一个词尾b回退一个词首W/B是按空格分隔的大词跳。这里有个中文环境的特殊体验中文没有空格分词w按标点或空白跳的效果不明显我习惯用f按标点定位处理中文文本时更顺手。全篇移动gg到文件头G到文件尾nG或ngg跳到第n行Ctrlf向后翻页Ctrlb向前翻页Ctrld/Ctrlu是半页H屏幕顶端、M屏幕中间、L屏幕底端是看当前屏幕哪里的快捷定位。我实测下来对写代码最有用的是三组{}按段落/代码块跳gd跳转到光标下符号的定义在Vim里够用了*和#在当前文件里搜索光标处的词。这三组能覆盖大部分跳到另一个地方的需求背熟它们你的编辑速度就上了一个台阶。3.2 编辑操作插入、删除、复制、粘贴插入类i在光标前插入、a在光标后插入、o下面开新行、O上面开新行、I到行首插入、A到行尾插入。记住o和O是最常用的因为写代码时开新行是高频操作。很多人问i和a有什么区别区别就在插入点一个在光标左侧、一个在光标右侧实际用起来配合$行尾和0行首会很灵活。删除类x删光标处字符可以3xdd删整行D删到行尾dw删词d$删到行尾等效Ddi(、da(删括号内/含括号的内容。这些命令的组合逻辑和2.2节说的一样花几分钟推演一遍就全通了。删除其实不是目的它经常是我要改这里的前置动作所以c系列删除并进入插入使用频率更高。复制粘贴yy复制整行yw复制词p粘贴到光标后/下一行P粘到光标前/上一行u撤销Ctrlr重做。这里有个新手常搞混的点Vim的复制不叫复制而叫抳yank粘贴也不叫粘贴而叫put。你脑子里记得y是拿p是放语义就顺了。3.3 搜索、替换和全局操作搜索/关键词往下搜?关键词往上搜n下一个匹配N上一个匹配。开启动态搜索后输入过程中就能看到匹配跳转建议在配置里把incsearch打开。hlsearch会把所有匹配高亮这个功能很实用但有时候也烦人——高亮一直挂着可以用:nohlsearch临时关掉或者映射一个快捷键来切换。替换是Vim里最值钱的功能基础格式是范围 s/旧/新/修饰符。几个常用写法:%s/foo/bar/g全文件替换:.,5s/foo/bar/gc从当前行往下五行范围内替换c表示每次询问:%s/foo/bar/gi忽略大小写:1,50s/foo/bar/g第1行到第50行。我用一个小例子说明它的价值有一次接手一个老项目代码里把接口名getUserInfo拼成了getUserInfoo几十个文件里都有。用grep -rl配合Vim的:%s可以逐文件处理或者直接在Vim里用vimgrep收集所有匹配再批量替换几分钟全部处理完。这个场景如果你在IDE里逐个找效率差距是完全不同的量级。3.4 可视模式和列编辑批量操作的三个利器v是逐字符选择V是整行选择Ctrlv是列块选择。列块模式尤其值得一提你可以同时给多行加注释、删掉一个对齐列、或者批量修改一列数据。典型操作是Ctrlv选中若干行的行首按I输入#再按Esc所有行的行首都插入了#。这个操作在写代码时做整段注释非常快比一个个//快十倍。宏macro是另一个批量利器qa开始录制到寄存器a做完一系列操作后q结束然后a执行宏重复上一次宏。配合数字前缀5a可以连续执行五次。宏最实用的场景是把一段格式混乱的文本重新排版录一个移动替换跳转的组合然后批量执行。我到现在还在用它处理导出日志和Excel粘贴过来的脏数据这种半结构化文本用宏逐行规整比写脚本快太多。4. vim配置实战从默认难用到顺手只需20行4.1 第一份.vimrc从能用到好用写配置之前先明确一个原则Vim默认配置是为了兼容和普适不是为了舒服。所以拿到新环境我第一件事就是写一份最小但足够顺手的.vimrc。下面是我给新手的起步版本set nocompatible set number set relativenumber set ruler set cursorline syntax on set autoindent set smartindent set expandtab set tabstop4 set shiftwidth4 set softtabstop4 set ignorecase set smartcase set incsearch set hlsearch set laststatus2 set wildmenu set showcmd set noswapfile set timeoutlen300每个设置我都说下为什么number和relativenumber一起开行号显示绝对数值、同时相对数值便于用10j这类跳转cursorline高亮当前行长时间盯代码很省眼睛expandtab让Tab变成空格避免团队协作时混合空格和Tab引发的对齐混乱tabstop定义了Tab宽度但关键是shiftwidth要与之匹配因为Vim里和缩进用的是shiftwidth而不是tabstopignorecase配smartcase的意思是你搜索时如果输入了大小写混合就按大小写敏感处理全小写则忽略大小写这是最舒服的搜索体验。noswapfile是我个人的取舍Vim崩溃时没有swap就很难恢复但现代项目里git基本上能兜底关掉swap省去大量.swp文件已存在的打扰。如果你不放心可以用set undofile和set undodir配合把撤销历史持久化到文件比swap实用得多7.2节会细说。4.2 插件不是越多越好给新手的四个建议Vim的插件体系经历了从Vundle到vim-plug的演化我建议直接用vim-plug因为它体积小、更新简单、文档清晰。安装方式按官方文档执行然后在.vimrc里声明插件。我会装的插件不超过十个核心类别是状态栏lightline或airline二选一让文件名、当前模式、行列号、git分支一眼可见文件浏览内置netrw就够用:E调用不一定要装NERDTree模糊搜索fzf.vim配合系统fzf比CtrlP快一个数量级是我的主力文件查找方案增强编辑vim-surround给词加引号/括号、vim-commentarygc注释、repeat让.支持插件操作。给新手的忠告是不要在配置上花太多时间插件只是把你缺的那两三块补上就行。我见过太多人第一周就在折腾主题、括号高亮、自动补全结果基本命令还没用熟最后丧失信心。Vim的强项不是像IDE那样开箱即用大而全而是你亲手把它调成刚好贴合自己习惯的趁手工具。插件引入得越多升级越频繁、冲突越多、写配置的时间越长这本身就是一种成本。4.3 键位映射把最常见操作变成肌肉记忆键位映射的核心是减少按键次数和移动距离。我最推荐三组把jj映射成Escinoremap jj Esc。这样在Insert模式里想回到Normal手不用伸到右上角去按Esc食指在j上连击两下就够这个改动会显著降低输入时的等待感。定义Leader键默认是\我习惯改成空格let mapleader 然后nnoremap Leaderw :wCR保存文件、nnoremap Leaderq :qCR退出。记住Leader键是你自己的私有快捷键前缀可以自由编排。把;映射成:nnoremap ; :。在Normal模式按;就相当于按了冒号少按一个Shift输命令的频率一高这个小改动很值得。映射还有个细节noremap和map的区别很大。map会递归解析映射后的结果容易产生连环反应noremap不会递归绝大多数情况下都应该用nnoremap/inoremap这类非递归映射这是进坑老手的共识。4.4 终端里的Vim颜色和剪贴板设置实测如果你在终端里用Vim有两件事需要单独注意。第一是颜色现代终端大多支持真彩色可以在.vimrc设置set termguicolors。第二是剪贴板终端版的vim如果不带clipboard特性就没办法把内容复制到系统剪贴板。你可以在Vim里执行:version查看特性如果显示-clipboard要么安装vim-gtk3这类带图形支持的版本要么在终端里依赖终端本身的复制粘贴方式比如macOS的CmdC。我自己在macOS和Linux上分别维护了两套配置Linux服务器上一切从简只保证基本编辑和搜索功能桌面开发机上才开真彩色、状态栏和模糊搜索。在服务器上每次先裸奔也能干活这种能力本身就是Vim的生存哲学——越接近原始状态越能适应任何环境。5. Ubuntu安装报错package vim is not available的完整排查5.1 这条报错到底在说什么如果你在Ubuntu或Debian系的机器上执行sudo apt install vim看到类似package vim is not available, but is referred to by another package的提示先别慌。这句英文的意思是你在当前APT的软件包索引里找不到名为vim的包但有一些已安装或索引中的包在依赖关系里提到了它。后面通常还跟着一行However the following packages replace it: vim-tiny vim-common vim-runtime最后以E: Package vim has no installation candidate收尾。这里最容易误读的是replace it这几个词。它不是说系统想用vim-tiny替换掉你要的完整版Vim而是提示你vim这个包名没有进入候选列表可能是索引过期也可能是软件源里缺少包含它的组件。最常见的场景就是全新安装的系统从来没执行过apt update或者装的是镜像精简版软件源里只带了一部分组件。搞清楚这个机制你就不会在apt install后面反复加参数而是先去处理索引和源这两件真正的问题。5.2 实操按顺序执行这三步第一步刷新软件包索引这一步能解决八成的情况。很多报错的机器都是装好系统后一次都没执行过apt update软件包索引还停留在安装镜像自带的旧版本自然不会把vim列为安装候选。执行sudo apt update时如果看到大量Get:的下载行说明索引正在更新更新完再装vim多半就好了。刷新之后用apt-cache search vim看一下当前源里到底有哪些vim相关包确认心里有数再动手。第二步如果apt update之后依然提示找不到vim那就要检查软件源配置。打开/etc/apt/sources.list或/etc/apt/sources.list.d/下的文件确认包含vim的系统组件已经启用。在Debian系的标准布局里软件源分为main、universe、multiverse等组件vim通常位于main或universe中。如果确实是源里没有可以直接安装替代包sudo apt install vim-gtk3vim-gtk3本身包含了完整的Vim功能还额外支持剪贴板、系统托盘菜单这些图形特性副作用是包体积更大。在服务器上我更推荐vim-nox没有X依赖又有完整的特性集。这一步的关键在于先查清你的目标是只要有一个能用的完整Vim还是必须包名叫vim前者比后者容易得多。第三步装完验证一下vim --version | head -n 5 update-alternatives --config editorupdate-alternatives是Debian系管理默认编辑器的机制运行后你可以把默认编辑器从/bin/nano切到/usr/bin/vim这样以后crontab -e、git commit这类需要编辑器的命令都会默认用Vim打开。这一步很多人忽略但其实非常关键否则你装好了Vim系统还是用nano等于没装。5.3 还有一个容易踩的坑vim和vim-tiny分不清有时候apt install vim虽然成功了但装出来的是vim-tiny。怎么判断看vim --version输出版本行的末尾如果显示-clipboard、-python3这些减号就说明很多特性没编译进去完整版会显示clipboard、python3。vim-tiny在编辑文本上没太大问题但缺少多窗口、剪贴板、脚本语言支持这几个关键特性很多插件和日常操作会受限。如果你在配置过程中发现某些功能比如:set clipboardunnamedplus失效不正常先查一下自己用的到底是哪个Vim版本这是排查问题的第一步而不是最后一步。6. 分别用Vim和Xcode不同任务选不同工具6.1 两个工具根本不在同一个赛道每次看到有人问vim命令和Xcode选哪个我都觉得问题问偏了。Xcode是苹果生态的集成开发环境它的本职工作是把Swift/Objective-C代码编译成iOS/macOS应用并且把界面设计、资源管理、签名打包、模拟器调试这一整条链路串起来。Vim是一个纯文本编辑器它不做编译、不做界面拖拽、不做证书管理。两者重叠的部分只有文本编辑这一小块而Vim在文本编辑这一小块里更强Xcode在整体工程管理上不可替代。所以正确的问法不是哪个更好而是我在哪个环节用哪个。你写SwiftUI界面、连Storyboard、调试iOS真机的时候老老实实待Xcode里你改一个JSON配置文件、写一段脚本、处理服务器上的日志或者写Markdown文档时开Vim反而高效得多。实际上很多开发者现在的日常是Xcode里写UIVim或带Vim插件的编辑器里写后端和工具链。这个组合不是背叛Xcode而是把工具放到它最适合的位置。6.2 Vim在Xcode工作流里的三个实际用法第一种是把Vim当作外部文本处理器。Xcode项目的很多文件Info.plist、各种json、配置文件、脚本不需要打开Xcode就能改用Vim改完后直接xcodebuild命令行编译。这样做的好处是快启动Vim几乎零延迟而启动Xcode一次要好几秒甚至十几秒。我处理Fastlane配置、Ruby脚本、CI的yml文件时都走这条路。第二种是在Xcode内部集成Vim键位。这里要实话实说Xcode自带的键位系统是Emacs风格的子集没有完整Vim模式。第三方方案比如XVim插件因为需要绕过Xcode的代码签名校验在新版本Xcode上经常失效我不推荐往这个方向上折腾。如果你离不开Vim键位更保险的方案是去用Visual Studio Code的Vim插件或在JetBrains家IDE里装IdeaVim它们的Vim模式都维护得相当好。第三种是文本互送的协作流。有些任务我会双开Xcode只负责编译、运行、看崩溃日志Vim负责大段重构和批量修改。改完保存回到Xcode里代码会因为有版本控制的文件监听而自动刷新。你不需要在两个工具之间反复导入导出Git或文件系统就是它们之间的传送带。这个模式用熟了之后你会觉得IDE和编辑器不是竞争关系而是互补关系。6.3 一个实际例子批量修复项目里的字符串前缀我去年处理过一个真实场景一个iOS项目里几十个本地化字符串文件strings其中有一组键名的前缀拼错了统一是home_banner_写成了hme_banner_。用Xcode一个个文件找效率很低。我的做法是在终端用grep -rn hme_banner_定位所有文件然后用Vim打开每个文件执行:%s/hme_banner_/home_banner_/g甚至用参数模式:argdo批量处理。整个过程五分钟不到。这种文件级别的大规模精确替换是Xcode的图形界面很难给的体验因为它本质上不是个文本批量处理工具。反过来也一样如果你想给一个App加新的推送通知权限涉及证书、描述文件、Signing Capabilities页面这种操作你用Vim做一辈子也做不出来必须在Xcode里点开工程设置配合开发者网站处理。选工具之前先看清楚任务属于哪一类这才是成熟工程师的工作方式。7. 高频问题排查剪贴板、撤销、乱码与崩溃恢复7.1 复制粘贴不跟系统剪贴板走终端版Vim最常见的问题是在Vim里y复制的东西切到浏览器里Cmd/CtrlV粘不上。原因我在4.4节说过是Vim编译时没有开启剪贴板特性。解决方案分两步先确认现状在Vim里:version看有没有clipboard如果没有装带图形支持的Vim包Debian系用vim-gtk3macOS用带clipboard的homebrew版本然后在配置里加set clipboardunnamedplusLinux或set clipboardunnamedmacOS。这样Vim的默认y就会往系统剪贴板写p也会从系统剪贴板读。需要注意unnamedplus和unnamed的区别unnamed映射的是横选剪贴板primary/选区剪贴板unnamedplus才是Linux下和CtrlC/CtrlV一致的剪贴板。设错了还是会发现粘不出去。这个细节是排查我已经设置了clipboard但怎么还不行的最常见原因。7.2 撤销记录一关文件就没了Vim默认的撤销是存在内存里的退出就清空。你辛苦撤回来的状态关掉重开就得从头再来这在长会话或临时编辑时尤其让人头疼。想要持久化在.vimrc里启用这两个设置set undofile set undodir~/.vim/undodir设置之后Vim会把每次编辑的撤销历史写入磁盘下次打开文件时还能继续用u和Ctrlr返回任意历史状态。这个功能有点像文本编辑的历史快照配合Git使用几乎能覆盖所有误操作的挽回场景。我见过有人因为撤销丢了一下午的代码其实只要开了undofile这种损失完全可以避免。7.3 打开文件提示swap文件已存在当你上次编辑异常退出SSH断开、终端卡死Vim会留下.文件名.swp文件下次打开会提示Swap file already exists。此时的正确处理顺序是判断是不是有别的Vim进程正在编辑同一个文件比如开了多个终端窗口如果有先处理进程确认没有后可以用vim -r 文件名把swap文件里的未保存内容恢复出来确认恢复内容后手动删除swp文件。更保险的做法是记住这个规律——只要看到Swap file提示就先ls -la看下这个swp文件的修改时间别急着删它很可能是你误关窗口时的救命稻草。如果像我一样觉得swp文件总是产生噪音可以全局设置set noswapfile但代价是失去崩溃恢复能力不建议在服务器上这样配因为服务器会话中断太常见了。7.4 粘贴一大段代码时缩进全乱这是新手的经典遭遇在终端里向Vim粘贴一段已经缩进好的代码结果Vim按自己的自动缩进重新处理所有行挤在一起或越缩越歪。原因在于Vim在Insert模式下会激活autoindent粘贴的每个换行都会触发自动缩进逻辑而粘贴的内容本身已经带了缩进二者叠加就乱了。在Vim 8之后终端支持Bracket Paste Mode的会自动处理但如果你的终端或SSH环境不支持最土但最可靠的办法是粘贴前:set paste粘贴完再:set nopaste。更优雅的方案是在配置里设置set pastetoggleF2用快捷键在粘贴模式和正常模式之间切换。记住这个坑之后我的流程是在IDE或浏览器里复制代码回到终端Vim按F2进入paste模式粘贴再按F2退出。三步形成肌肉记忆后再也没被这个问题坑过。7.5 中文显示乱码和编码问题Vim在Linux服务器上打开Windows传来或数据库导出的文件经常遇到乱码。根因是文件编码和Vim当前encoding不一致。建议配置set encodingutf-8 set fileencodingsutf-8,gbk,gb2312,big5,latin1fileencodings是Vim检测文件编码的探测顺序把它放在encoding之后可以让Vim在打开常见编码的中文文件时自动识别。如果文件已经打开但乱码用:e encgbk重新加载指定编码。这个技巧在处理导出表、旧系统日志这类文本时非常救命。顺便说编辑完乱码文件想保存成UTF-8执行:set fileencodingutf-8再:w即可。7.6 一个被低估的命令行技巧用vimdiff看差异同一个文本编辑器好处是大量基于命令行的工具可以用Vim的接口。我最常用的是vimdiffvimdiff file1 file2它会并排显示两个文件差异行高亮支持在每个文件里用标准vim命令移动、复制:diffput、:diffget把一边的内容搬到另一边。我在代码审查和配置对比时几乎不用diff命令加肉眼比对直接vimdiff效率高很多。类似的命令还有vim -d以及配合git config --global diff.tool vimdiff可以把Git的git difftool也接到Vim上。这一条调到日常工作中价值远超背几十个键位。7.7 常见问题速查表下面这个表是我给团队新人整理的高频问题速查版直接对着查就行现象原因处理输入j/k变字母而不是移动在Insert模式按Esc回Normal模式粘贴代码缩进乱Vim自动缩进和已有缩进叠加:set paste粘贴完成后set nopastey复制后系统里粘贴不上Vim无clipboard装vim-gtk3配置clipboardunnamedplus退出重开撤销记录没了未启用持久撤销设置undofile和undodir打开文件提示swap exists有别的实例或用swp残留处理实例vim -r恢复后清理swp中文乱码编码探测失败设置fileencodingsutf-8,gbk,...:e encgbk方向键发出A B C D终端进入普通模式检查终端raw模式或用h j k lEsc后有延迟ESC作为修饰键的终端延时终端里关闭Esc延时或映射jj为Esc8. 最后分享两个我实际受用的心得8.1 把配置当代码管理我把.vimrc做成了注释版每条配置后面都用中文写清楚为什么存在。这个习惯救过我很多次一年后再看自己配的东西能立刻想起当时是为了解决哪个问题才加的换了新机器、新团队照着自己的注释建一遍配置比从零开始摸索快得多。建议你也把配置放进版本控制里至少要能一键在新服务器上部署。一个小技巧是给.vimrc分节基础设置、键位映射、插件、临时调试每一节之间留出明显的注释分隔这样找设置项非常快。8.2 给新人的学习顺序建议如果你刚入门别急着追求把所有命令背完。我给新人的顺序是第一周只学移动和基本编辑h j k l、i a o、dd yy p u、/搜索、:w q第二周开始用组合操作符ci(、yyp、.重复第三周再碰可视模式和宏。每一步都在真实项目里用起来比如就用Vim写了三天的配置文件而不是专门打开一篇教程背键位。Vim真正爽起来是在你形成肌肉记忆之后在那之前慢才是正常的。根据我个人经验Vim能不能改变你的工作方式取决于你愿不愿意忍受前两周的笨拙。这个编辑器四十年还没消失不是因为它被考古而是因为它把编辑这个动作设计得足够本质到今天依然没有人能完全替代它。你为它付出的那点学习成本几乎一定会在后续无数个命令行场景里赚回来。
返回列表