在Linux操作系统中,vi(Visual Interface)编辑器不仅是一个文本编辑工具,更是系统管理员和开发者的“瑞士军刀”。自1976年由Bill Joy发明以来,它几乎预装在所有的Unix-like系统中。尽管现代有许多图形化编辑器(如VS Code、Sublime Text)和功能更强大的终端编辑器(如Neovim、Emacs),但vi凭借其极低的资源占用、极高的操作效率以及无处不在的兼容性,依然占据着不可替代的地位。深入掌握vi,是每一位Linux使用者的必修课。
vi与大多数现代编辑器最大的不同在于其模式化(Modal)的设计思想。它不是一进入就可以随意打字,而是将操作划分为不同的模式,最主要的是命令模式(Command Mode)和插入模式(Insert Mode)。命令模式:这是vi启动后的默认模式。在此模式下,键盘上的按键被视为指令,而非输入字符。你可以进行光标移动、删除、复制、粘贴、查找替换等操作。如果在此模式下误按字母键,可能会触发意想不到的命令(如按d可能开始删除操作)。插入模式:只有进入此模式,用户才能像使用记事本一样输入文本。从命令模式进入插入模式通常按i(insert)、a(append)、o(open new line)等键。退出插入模式回到命令模式,必须按Esc键。末行模式(Last Line Mode):在命令模式下输入:(冒号),光标会跳转到屏幕最下方,此时可以执行保存、退出、设置环境参数等高级命令。这种设计初看繁琐,实则精妙。它将“编辑动作”与“文本输入”彻底分离,使得熟练用户可以在不离开主键盘区的情况下,以极高的速度完成复杂的文本处理任务。
命令模式
此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。
ZZ # 保存退出ZQ # 不保存退出#光标跳转h: 左L: 右j: 下k: 上G # 光标跳转至最后一行gg # 光标跳转至第一行x # 删除单个字符dd # 剪切光标所在的行D # 从当前光标位置一直删除到行尾yy # 复制行(小写)p # 向下粘贴(大写)P # 向上粘贴u # 撤销最近的更改U # 撤消光标落在这行后所有此行的更改插入模式
使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令,当编辑文件完成后按 Esc键即可返回命令模式。
-i # 在当前光标所在位置之前随后输入的文本-I # 行首插入命令-o # 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本-O # 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本-a # 在当前光标所在位置之后随后输入的文本-A # 行尾插入命令末行模式
文件中的指定内容执行保存、查找或替换等操作。使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”(英文冒号)键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了。
:wq # 保存并退出:q # 不保存直接退出:q! # 强制退出不保存:w 新文件名 # 另存为新文件:set numner # 显示行号,简写(:set nu):set nonumner # 取消显示行号,简写(:set nonu):set ignorecase # 忽略大小写,简写(:set ic):set noignorecase # 不忽略大小写,简写(:set noic)# 显示Tab ^I和换行符 和$:set list # 启用:set nolist # 禁用:set ff=unix # 设置为unix编码:set key=password # 设置密码:set key='' # 取消密码# 查找内容(n:查找下一个匹配项,N:查找上一个匹配项):/xxx:noh # 关闭高亮# 替换内容:s/old/new/g # 将当前行的old替换为new,如果只替换第一个则去掉g:%s/old/new/g # 将全文中的old替换为new,如果只替换第一个则去掉g:%s/hello//g # 将全文中所有的hello删除对于高级用户,vi的威力在于“动词+名词”的组合逻辑。例如,d是删除动词,w是单词名词,dw即删除单词;c是改变(删除并插入),ci"表示修改双引号内的所有内容。这种语法化的操作逻辑,使得复杂编辑变得直观且迅速。此外,vi支持多窗口分割(:split水平分割,:vsplit垂直分割)和多文件编辑(:n下一个文件,:prev上一个文件),允许用户在同一个终端会话中同时处理多个相关代码文件,极大地提升了调试和重构的效率。