第一次接触vi编辑器是在十五年前的一个深夜,当时我正试图在远程服务器上修改一个关键配置文件。面对那个只有光标闪烁的黑屏,我完全不知道如何输入文字,更不知道如何保存退出。那次经历让我深刻认识到:在Linux世界里,vi/vim就像空气一样无处不在,你可以不喜欢它,但必须学会使用它。
vi(visual editor的缩写)诞生于1976年,由Bill Joy开发。vim(Vi IMproved)则是Bram Moolenaar在1991年推出的增强版本。如今,几乎所有的Unix-like系统都预装了vi或其衍生版本。特别是在服务器环境中,当你需要快速编辑配置文件时,vim往往是你唯一可用的编辑器。数据显示,在2022年的开发者调查中,vim仍然是最受欢迎的代码编辑器之一,尤其在系统管理员和DevOps工程师群体中占比高达65%。
提示:即使你平时习惯使用nano或GUI编辑器,也建议掌握vim的基础操作。因为在某些最小化安装的Linux发行版或紧急恢复模式下,vim可能是你唯一的选择。
刚启动vim时默认进入的就是普通模式。这个模式下所有按键都对应着命令而非字符输入。比如:
h/j/k/l 分别对应左/下/上/右移动光标(替代方向键)dd 删除当前行yy 复制当前行p 粘贴剪贴板内容u 撤销操作Ctrl+r 重做操作这个设计源于vi诞生的年代,当时键盘还没有独立的方向键。现代键盘虽然有了方向键,但熟练使用h/j/k/l能让你手指不离主键盘区,显著提升编辑效率。
在普通模式下按i(insert)或a(append)进入插入模式,此时可以像常规文本编辑器一样输入内容。区别在于:
i 在当前光标前插入a 在当前光标后插入I 在行首插入A 在行尾插入o 在当前行下方新建一行并插入O 在当前行上方新建一行并插入在普通模式下按:进入命令行模式,可以执行保存、退出等操作。常用命令包括:
:w 保存文件:q 退出vim:wq 保存并退出:q! 强制退出不保存:set nu 显示行号:/keyword 搜索关键词除了基础的h/j/k/l,vim提供了极其丰富的移动命令:
w/W 移动到下一个单词开头(W忽略标点)b/B 移动到上一个单词开头e/E 移动到单词末尾0 移动到行首$ 移动到行尾gg 移动到文件开头G 移动到文件末尾50G 跳转到第50行Ctrl+f 向下翻页Ctrl+b 向上翻页vim的强大之处在于可以将命令与移动组合使用:
dw 删除到单词末尾d$ 删除到行尾dgg 删除到文件开头caw 修改整个单词(删除并进入插入模式)>} 向右缩进当前代码块:%s/old/new/g 全局替换文本在普通模式下按v进入字符可视模式,V进入行可视模式,Ctrl+v进入块可视模式。选中文本后可以:
y 复制选中内容d 删除选中内容> 向右缩进< 向左缩进块选择模式特别适合处理列数据,比如同时注释多行代码:
Ctrl+v进入块选择I输入#Esc完成批量插入在用户目录下创建~/.vimrc文件可以自定义vim行为。推荐的基础配置:
vim复制" 显示行号
set number
" 语法高亮
syntax on
" 自动缩进
set autoindent
" Tab键转换为4个空格
set tabstop=4
set shiftwidth=4
set expandtab
" 显示光标当前位置
set ruler
" 搜索时忽略大小写
set ignorecase
" 高亮搜索匹配
set hlsearch
" 边输入边搜索
set incsearch
" 显示匹配的括号
set showmatch
虽然vim本身功能强大,但通过插件可以进一步提升开发体验。Vundle是最流行的插件管理器之一:
bash复制git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
vim复制set nocompatible
filetype off
" 设置运行时路径包含Vundle
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" 让Vundle管理自身
Plugin 'VundleVim/Vundle.vim'
" 添加其他插件
Plugin 'scrooloose/nerdtree' " 文件浏览器
Plugin 'vim-airline/vim-airline' " 状态栏美化
Plugin 'ycm-core/YouCompleteMe' " 代码补全
call vundle#end()
filetype plugin indent on
:PluginInstall安装插件Ctrl+n打开/关闭gcc注释当前行)问题1:不小心进入了其他模式不知道如何退出
Esc键返回普通模式问题2:编辑时系统崩溃导致文件未保存
:recover恢复交换文件问题3:粘贴代码时格式混乱
:set paste,粘贴后执行:set nopaste/pattern 向前搜索?pattern 向后搜索n 跳转到下一个匹配N 跳转到上一个匹配:%s/old/new/g 全局替换:%s/old/new/gc 全局替换并确认:10,20s/old/new/g 只在10-20行替换:e filename 打开新文件:bn 切换到下一个缓冲区:bp 切换到上一个缓冲区:bd 关闭当前缓冲区:sp filename 水平分割窗口:vsp filename 垂直分割窗口Ctrl+w 后接方向键切换窗口h/j/k/l移动光标i/a/o进入插入模式:wq等基本命令dd/yy/p等基础编辑命令w/b/e/$/0等移动命令dw/cw/dd等编辑组合.重复上次操作q开始录制,q结束,@执行)m标记,`跳转)个人心得:vim的学习曲线确实陡峭,但一旦突破某个临界点,你会发现它带来的效率提升是惊人的。建议每天花15分钟刻意练习,坚持一个月就能感受到明显进步。我自己在掌握vim后,文本编辑速度至少提升了3倍,特别是在处理大型配置文件或代码时优势更加明显。