vi 是“Visual Editor”的缩写,值得一提的是,vi在所有的UNIX系统中兼容,因此学习和掌握vi是必不可少的技能。
vi有两种模式:输入模式和指令模式。
在输入模式下,可以进行内容编辑(插入、删除和修改);在指令模式下,可以进行命令操作。
刚启动vi时,进入的是指令模式,此时用户输入的任何字符都将被认为是一个指令。
两种模式的切换使用“Esc”键。
进入输入模式后,会看到文档最下方有一行“-- INSERT --”,这说明文档目前是在输入模式下。
1. 启动 vi
vi [文件名称]
2. 退出 vi
在指令模式下:
(1)放弃编辑内容并退出::q!
(2)保存对文件的修改并退出::wq!
(3)保存编辑内容不退出::w
3. 进入输入模式的命令
在指令模式下:
(1)在光标之后加入文字:a (联想记忆:append)
(2)在光标所在行尾加入文字:Shift + a (联想记忆:增强的append)
(3)在光标之前加入文字:i (联想记忆:insert)
(4)在光标所在行首加入文字:Shift + i (联想记忆:增强的insert)
(5)在光标所在行的下一行增加一空行:o (联想记忆:open a new line)
(6)在光标所在行的上一行增加一空行:Shift + o (联想记忆:增强的open a new line)
4. 移动光标
在指令模式下:
(1)向左移一个字符:h (联想记忆:h j k l 在键盘上挨着,分别对应着“左、下、上、右”)
(2)向下移一个字符:j (联想记忆:同上)
(3)向上移一个字符:k (联想记忆:同上)
(4)向右移一个字符:l (联想记忆:同上)
(5)移至光标所在行首:0 (联想记忆:一切由O开始)
(6)移至光标所在行尾:$ (联想记忆:$即结束)
(7)移至文档的最后一行第一列:Shift + g (联想记忆:增强的open a new line)
(8)移至文档的第n行:n + Shift + g (比如1G,相当于移至文档的第一行第一列)
(9)窗口往下卷一屏:Ctrl + f (联想记忆:forward)
(10)窗口往上卷一屏:Ctrl + b(联想记忆:backward)
(11)光标移动到下一单词的词首:w
(12)光标移动到前一单词的词首:b
(13)光标移动到下一单词的词尾:e
(14)光标移动到前一单词的词尾:ge
5. 删除与修改
(1)删除光标所在字符:x (联想记忆:相当于向前删除一个字符。)
(2)删除光标所在之前一字符:Shift + x (联想记忆:相当于向后删除一个字符。)
(3)删除光标所在行:dd (联想记忆:double delete)
(4)复制光标所在行:yy (联想记忆:double yank)
(5)粘贴复制的行:移动光标至要复制的行,然后执行 p 指令(联想记忆:paste)
6. 查找
(1)在光标之后查找该字符串:/字符串
(2)在光标之前查找该字符串:?字符串
(3)向下继续寻找下一个相同的字符串:n
(4)向上继续寻找下一个相同的字符串:shift + n
7. 撤销与重做
(1)恢复最后一个指令执行前的结果:u(联想记忆:undo)
(2)恢复光标所在行的所有改变:shift + u(联想记忆:shift 相当于“反”的意思,即反undo,就是redo)
8. 高级操作
(1)显示行号::set nu(联想记忆:number)
(2)隐藏行号::set nonu(联想记忆:no number)
(3)删除第5行至第15行的内容::5,15d(联想记忆:delete)
(4)将第5行至第15行的内容复制到第25行之后::5,15co25(联想记忆:copy)
(5)将第5行至第15行的内容移动到第25行之后::5,15mo25(联想记忆:move)
(6)将文件中所有的“wan”替换为“li”::1,$s/wan/li/g(联想记忆:substitute global)
(7)统计查找字符串“counter=1”的数量::%s/counter=1//gn