1. vi编辑器概述
vi编辑器是Unix/Linux系统中最经典的文本编辑器之一,由Bill Joy在1976年开发。作为系统管理员和开发人员的必备工具,vi以其高效的操作方式和强大的功能著称。即使在图形界面编辑器盛行的今天,vi仍然是服务器环境下的首选编辑器,因为它:
- 几乎预装在所有Unix/Linux系统中
- 占用资源极少
- 完全通过键盘操作,无需鼠标
- 支持强大的文本处理功能
vi的学习曲线较为陡峭,但一旦掌握其操作逻辑,编辑效率将大幅提升。现代系统中通常使用的是vim(Vi IMproved),它是vi的增强版本,增加了语法高亮、多级撤销等实用功能。
2. vi的三种工作模式
2.1 命令模式(Command Mode)
这是vi启动时的默认模式。在此模式下:
- 所有按键输入都被视为命令
- 可以执行光标移动、删除、复制等操作
- 按
:进入末行模式,按i/a/o等进入插入模式
常用命令:
h/j/k/l 左/下/上/右移动光标 w/b 移动到下一个/上一个单词开头 0/$ 移动到行首/行尾 gg/G 移动到文件开头/结尾 dd 删除当前行 yy 复制当前行 p/P 粘贴到光标后/前 u 撤销操作 Ctrl+r 重做2.2 插入模式(Insert Mode)
在此模式下可以像普通编辑器一样输入文本。进入方式:
i 在光标前插入 a 在光标后插入 o 在当前行下方新建一行并插入 I 在行首插入 A 在行尾插入 O 在当前行上方新建一行并插入退出插入模式按ESC键返回命令模式。
2.3 末行模式(Last Line Mode)
在命令模式下按:进入,用于执行文件操作、搜索替换等命令。常用命令:
:w 保存文件 :wq 保存并退出 :q! 不保存强制退出 :/pattern 向前搜索pattern :?pattern 向后搜索pattern :%s/old/new/g 全局替换old为new :set nu 显示行号 :20 跳转到第20行3. 高效编辑技巧
3.1 移动与定位
- 使用
f{char}快速跳转到当前行某个字符,如fa跳转到下一个a字符 Ctrl+f/Ctrl+b向前/后翻页H/M/L跳转到屏幕顶部/中间/底部Ctrl+o返回上一次位置,Ctrl+i前进
3.2 文本操作
di"删除引号内内容ci[修改中括号内内容>>/<<缩进/取消缩进当前行gUw将当前单词转为大写guw将当前单词转为小写xp交换当前字符与下一个字符
3.3 宏录制
qa开始录制宏到寄存器a- 执行一系列操作
q停止录制@a执行寄存器a中的宏100@a重复执行100次
4. vim高级功能
4.1 多窗口操作
:sp [file]水平分割窗口:vsp [file]垂直分割窗口Ctrl+w hjkl在窗口间切换Ctrl+w =使所有窗口等宽等高
4.2 标签页
:tabnew [file]新建标签页gt/gT切换到下一个/上一个标签页:tabm [n]移动当前标签页到第n位置
4.3 插件管理(Vundle示例)
- 安装Vundle:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim- 配置.vimrc:
set nocompatible filetype off 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 基础配置(.vimrc)
set nu " 显示行号 set tabstop=4 " Tab宽度 set shiftwidth=4 " 自动缩进宽度 set expandtab " 将Tab转为空格 set hlsearch " 高亮搜索结果 set incsearch " 实时搜索 syntax on " 语法高亮 set backspace=indent,eol,start " 更好的退格键行为 set mouse=a " 启用鼠标支持5.2 文件类型相关配置
autocmd FileType python setlocal et sta sw=4 sts=4 autocmd FileType javascript setlocal et sta sw=2 sts=2 autocmd FileType html setlocal et sta sw=2 sts=25.3 自定义快捷键
nnoremap <C-n> :NERDTreeToggle<CR> " Ctrl+n开关目录树 nnoremap <leader>w :w!<CR> " 快速保存 inoremap jj <ESC> " jj快速退出插入模式6. 常见问题解决
6.1 恢复交换文件
当vim异常退出时,再次打开文件会提示:
Found a swap file by the name ".filename.swp"选择:
- (O)pen Read-Only:只读打开
- (R)ecover:恢复内容
- (D)elete it:删除交换文件
- (Q)uit:退出
- (A)bort:中止
6.2 编码问题
处理乱码文件:
:e ++enc=gbk filename " 以GBK编码重新加载文件 :set fileencoding=utf-8 " 设置文件编码为UTF-8 :w " 保存6.3 行尾符问题
Windows和Unix行尾符转换:
:set ff=unix " 转换为Unix格式(LF) :set ff=dos " 转换为Windows格式(CRLF)7. 学习资源推荐
- 内置教程:在终端输入
vimtutor启动交互式教程 - 速查表:
:help quickref查看快速参考:help index查看命令索引
- 在线资源:
- Vim官方文档:https://www.vim.org/docs.php
- Vim Adventures:交互式学习游戏
- Vim Galore:GitHub上的综合指南
提示:学习vi的最佳方式是强迫自己在日常工作中使用它。开始时可能会觉得效率低下,但坚持2-3周后,你会发现编辑速度显著提升。