
1. vi编辑器Linux世界的文本编辑基石在Linux系统管理员和开发者的日常工作中vi编辑器就像是一把瑞士军刀——看似简单却功能强大。我第一次接触vi是在大学实验室的Unix系统上当时被它的模式切换搞得晕头转向但现在它已经成为我每天使用上百次的必备工具。与图形化编辑器不同vi完全通过键盘操作这种设计在服务器运维、远程调试等场景下展现出无可替代的优势。vi的历史可以追溯到1976年由Bill Joy在BSD Unix系统中开发。它的直系后代vimVi IMproved在1988年问世增加了多级撤销、语法高亮等现代功能。虽然现在有nano等更友好的编辑器但vi仍然是所有Unix-like系统的标配当你需要通过SSH快速修改服务器配置时vi永远是那个最可靠的伙伴。提示现代Linux发行版通常预装的是vim但为了保持兼容性vi命令往往作为vim的简化模式存在。可以通过vim --version查看你实际使用的版本。2. vi基础操作模式切换的艺术2.1 三种核心模式解析vi最让新手困惑的就是其模式设计理解这点就掌握了vi的精髓命令模式Normal mode启动vi后的默认模式所有按键都对应编辑命令而非直接输入文本。这时按i进入插入模式按:进入底线命令模式。插入模式Insert mode和常规编辑器一样直接输入文本。按ESC返回命令模式。我常用的小技巧是用a在光标后插入o在当前行下方新建一行I跳到行首插入。底线命令模式Command-line mode在命令模式下按:进入可执行保存、退出等操作。例如:wq保存退出:q!强制退出不保存。2.2 基础编辑命令速查表命令功能记忆技巧i当前光标前插入inserta当前光标后插入aftero下方新建行插入open new linex删除当前字符像剪刀剪掉字符dd删除当前行deletedoubleyy复制当前行yankyankp粘贴pasteu撤销undo/关键词搜索像浏览器搜索3. 高效编辑专业开发者的vi技巧3.1 光标移动的进阶操作熟练的光标移动能让你编辑速度提升数倍。除了基础的h/j/k/l这些组合键值得掌握w/b按单词前移/后移word/back0/$跳至行首/行尾gg/G跳至文件开头/结尾Ctrlf/Ctrlb向下/上翻页forward/backward:{行号}跳转到指定行如:15跳到第15行我特别喜欢f{字符}命令——比如fa会跳到当前行下一个a字符处配合;重复上次查找可以快速在行内定位。3.2 文本块操作技巧处理代码时经常需要操作多行文本# 删除3行包含当前行 3dd # 复制从当前行开始的5行 5yy # 缩进多行在可视模式下 Vjjj # 选择4行并向右缩进可视模式按v进入是处理文本块的利器。三种可视模式各有用途v字符选择V行选择Ctrlv块选择列选择3.3 搜索替换实战vi支持强大的正则表达式替换格式为:[范围]s/模式/替换/[标志]# 将全文的foo替换为bar :%s/foo/bar/g # 仅在第10-20行替换且需要确认 :10,20s/old/new/gc # 忽略大小写替换 :%s/error/ERROR/gi注意%表示全文范围g表示行内全局替换否则每行只替换第一个匹配c表示每次替换前确认。4. 高级定制打造你的vi工作环境4.1 .vimrc配置文件详解在用户目录创建~/.vimrc可以永久保存配置。这是我的部分配置 显示行号 set number 语法高亮 syntax on 缩进设置 set tabstop4 制表符等于4空格 set shiftwidth4 自动缩进宽度 set expandtab 将制表符转为空格 搜索设置 set hlsearch 高亮搜索结果 set ignorecase 忽略大小写 set smartcase 有大写字母时区分大小写 快捷键映射 nnoremap C-s :wCR Ctrls保存 inoremap jk ESC 用jk代替ESC4.2 实用插件推荐通过插件管理器如Vundle可以扩展vim功能NERDTree文件浏览器快捷键Ctrln打开/关闭vim-airline美观的状态栏YouCompleteMe代码自动补全vim-fugitiveGit集成ctrlp.vim快速文件查找安装Vundle的基本步骤git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim然后在.vimrc中添加set nocompatible filetype off 设置Vundle路径 set rtp~/.vim/bundle/Vundle.vim call vundle#begin() 插件列表 Plugin VundleVim/Vundle.vim Plugin scrooloose/nerdtree Plugin vim-airline/vim-airline call vundle#end() filetype plugin indent on最后在vim中执行:PluginInstall安装插件。5. 常见问题与解决方案5.1 基础问题排查问题1陷入插入模式无法退出症状疯狂输入但编辑器无响应原因可能误触了i进入插入模式解决连续按ESC几次然后按:输入q!强制退出问题2文件保存时提示Readonly原因文件权限不足或文件系统只读解决# 保存时强制写入需要有sudo权限 :w !sudo tee % # 或者退出后以sudo重新编辑 :q sudo vi filename5.2 编码与行尾问题问题Windows创建的文件在Linux下显示^M原因Windows(CRLF)和Linux(LF)行尾不同解决 显示隐藏字符 :set list 转换行尾 :set ffunix :wq问题中文乱码解决在.vimrc中添加set fileencodingsutf-8,gbk,big5,latin1 set encodingutf-85.3 恢复交换文件当vi异常退出时可能会看到这样的提示Swap file .filename.swp already exists!这时可以选择Open Read-Only只读打开Recover从交换文件恢复Delete it删除交换文件Quit退出恢复后记得删除.swp文件rm .filename.swp6. vi在开发中的实战应用6.1 批量处理日志文件假设有一个服务器日志error.log我们需要提取所有ERROR行并统计出现次数# 在vi中执行 :%!grep ERROR | sort | uniq -c | sort -nr # 分解说明 # % - 全文范围 # ! - 执行外部命令 # grep ERROR - 筛选含ERROR的行 # sort - 排序 # uniq -c - 统计重复次数 # sort -nr - 按数字倒序6.2 快速修改配置文件修改nginx配置时我常用的vi工作流/server快速跳转到server块n查找下一个匹配ci{修改当前{}内的内容changeinner{编辑完成后ESC:wq保存退出6.3 多文件编辑技巧使用参数启动vi可以同时编辑多个文件vi file1.txt file2.txt在vi中切换文件:n下一个文件:N上一个文件:args查看文件列表:e filename打开新文件分屏操作:sp水平分割:vsp垂直分割Ctrlw方向键 切换窗口7. 从vi到vim的进阶之路7.1 vim的独有功能vim在vi基础上增加了许多实用功能多级撤销传统vi只能撤销一步vim支持无限撤销u和重做Ctrlr语法高亮根据文件类型自动着色.vimrc中启用syntax on filetype plugin indent on可视化选择用鼠标或键盘选择文本块标签页像浏览器一样管理多个文件:tabnew新建标签页gt/gT切换标签页7.2 性能优化技巧处理大文件时这些设置可以提升vim性能 禁用交换文件 set noswapfile 关闭语法高亮 syntax off 禁用插件 set noloadplugins 关闭折叠 set nofoldenable对于超大型日志文件GB级别可以考虑使用less或grep预处理后再用vim编辑。7.3 学习资源推荐要真正精通vim这些资源值得深入内置教程在终端输入vimtutor约30分钟基础教程vim-help在vim中输入:help查看完整文档在线练习https://vim-adventures.com/游戏化学习进阶书籍《Practical Vim》《Mastering Vim》社区支持https://www.vim.org/https://vi.stackexchange.com/我个人的学习建议是每天掌握1-2个新命令在实际工作中刻意使用它们。vi的学习曲线虽然陡峭但一旦越过某个临界点你会发现自己的文本编辑效率有了质的飞跃。