VI是Unix中标准的文本编辑器之一。
VI中命令区分大小写,工作模式分为插入与命令模式,命令模式包括基本命令和ex编辑命令,ex编辑命令一般出现在屏幕下方,由:引出。
VI命令格式:
[命令] (文本)
[命令] (数字)(文本)
(数字)[命令] (文本)
基本命令:i a c d y p u x w q o r s
vi [filename] 打开一个指定文件
基本文本处理
i 在当前光标前插入文本
I 在行首插入文本
a 在当前光标后插入文本
A 在行尾插入文本
O 在当前行前插入一行
o 在当前行后插入一行
x 删除当前光标字符
xw 删除单词
x$ 删除到行尾
x0 删除到行首
5x 删除5个字符
0 光标移动到当前行第一个字符
$ 光标移动到当前行最后一个字符
h 光标左移一个空格
l 光标右移一个空格
j 光标下移一行
k 光标上移一行
w|W 光标前移一个单词
b|B 光标后移一个单词
p 粘贴
移动或复制文本可以通过先删除(dd),然后粘贴(p)的方法实现,如dd删除一行,p粘贴改行,x删除字符,p粘贴字符。
c | C 修改文本
cw 修改单词,并插入
c$ 修改到行尾
c0 修改到行首
cc 替换当前行
d |D 删除字符
dw 删除单词
d$ 删除到行尾
dd 删除当前行
r|R 替换当前文本
S 替换当前行
s 替换字符
~ 字母大小写转换
y | Y 复制文本
yw 复制单词
y$ 复制到行尾
y0 复制到行首
yy 复制一行
4yy 复制4行
. 重复操作
u 撤销上一次操作
U 撤销改行任何操作
J 合并当前行与下一行
参数可以带数字使用,如4h左移4个空格, 50i* 插入50个*
/ | n 向前搜索
? | N 向后搜索
^F 向前滚一屏
^B 向后滚一屏
^D 向前滚半屏
^U 向后滚半屏
^L 刷新屏幕
编辑命令扩展
vi + [file] 打开文件到最后一行
vi -r [file] 系统崩溃后恢复文件
vi +n [file] 打开文件到第n行
vi +/pattern [file] 打开文件到模式首次出现的地方
vi -R 以只读模式打开文件
//1-9 前9次删除操作
vi编辑器中可以CTRL+Z挂起vi,返回Unix shell状态,进行其他工作,unix shell中的fg 命令可以使当前工作返回第一个挂起的vi窗口
ex行编辑器
vi中,在ex行命令可以用!调用unix系统命令,如!ls, 列出当前目录的所有文件,!df 察看当前硬盘使用情况。
ex命令由行号和命令组成,以回车键结束。
:1 到第一行
:1,3 打印1~3行
:$ 到最后一行
:shift + G 到最后一行
:p 恢复缓冲区的内容(如:1p :3p)
:s/screen/line 替换当前行第一个screen 为 line
:1,3 s/screen/l 替换1~3行的screen为l
Q 进入ex编辑命令模式
vi 返回vi编辑器
:delete|d 删除
:copy |co|t copy 并粘贴 copy的内容
:move [行号]|m move到指定行
:23,29co100 复制23~29行并把他们粘贴到100行的后面
:set nu 显示行号
:= 显示总行号
:.= 先是当前行行号
行地址符号
. 当前行
$ 最后以行
% 文件每一行(1,$)
+ 向后
- 向前
:.+20# 先是从当前行向后20行的行号
:g 全局搜索
:g/pattern 搜索符合模式的行
:g!/patterhn 搜索不符合模式的行
:w 保存但不退出.
:w [newfile] 将当前修改保存到新文件.
:wq || ZZ 保存退出.
:e 不保存当前修改,回到初始版本文件.
:q 退出不保存.
写文件并推出编辑器
:1,10w>> [newfile] 使用>>重定向添加符 和w 把内容追加到文件
:read [file] 读取系统中现有文件数据
:r [file]
:0r [file] 将要读取的文件放到当前文件的开始
:12r [file] 将要读取的文件放到当前文件的12行后
vi可以打开多个文件,通过ex命令在文件间切换,如vi temp test, 通过:vi temp, :vi test切换到不同文件,:n命令可以调用另一个文件
:g | :s 全局替换
/g 在当前行全局替换
:s/old/new/g 当前行全局替换old字符为new
:1,$s/old/new/g 全局替换
:1,50s/old/new/g 替换1~50行
:gc 确认替换,y 替换
n 重复搜索
%s/editer/editor/g == :g/editer/s//editor/g
grep/sed/awk 正则表达
. 匹配单字符
* 匹配其前面的单个字符的0个或多个实例:bugs* == bug | bugs
*. 匹配任何数量的任何字符
^ 用于正则表达式的开始
$
\ 将后面的字符视为普通字符:\* == *
[] 匹配所包含字符的任何一个:p[aeiout]r == par | per....
:g/^$/d 删除所有空行
\U 替换字符为大写
& 重复替换
Advanced vi command
:set option 设置选项
:set nooption 关闭选项设置
:set all 显示所有选项
:set ic 指定模式搜索忽略大小写
:set noic 不忽略
.exrc文件 控制vi环境的exrc文件位于主目录下(首次登陆时所在的目录),可以用vi编辑器修改.exrc文件
:so sourcefile 可以调用sourcefile中的选项设置
编程选项
:set autoindent 自动缩进
CTRL+D 取消一个缩进级别(插入模式)
CRTL+T 实现另一个缩进级别(插入模式)
>> 行右移(缺省8空格--实际上将制表符插入到文本中)
<< 行左移8空格
5>> 移动该段落中前5行
:set shiftwidth=4 该选项可以更改缺省缩进的空格数目
:set tabstop=4 设置tab制表符号的字符数目
:set list 设置制表符显示为^I,行尾显示为$,通常屏幕中制表符和空白均显示为空白。
:set showmatch 设置搜索技巧
tabstop
shiftwidth
number
list
autowrite 设置后,调用:n(下一个)命令移动到下一个文件编辑时,:! 运行shell命令之前将自动写出已修改的缓冲区内容
:![command] 执行unix命令
:!date 显示时间
:!sort 排序文件
:ab 单词缩写
:unab 单词缩写失效
:map 列出当前映射的所有字符
:map x sequence 映射x为sequence编辑命令
:unmap x 取消映射
ex特殊键:
^ CTRL+V
^M 回车
^[ ESC
^H Backspace
^I tab
"... 双引号标记ex注释行,
VIM -- Vi Improved