一般来说,vi命令有如下的特别:
- 字母大小写有区别.
 - 在输入时不会显示在屏幕上.
 - 不需要在命令后加上
Enter键. 
基本命令:
- 文件与系统基本操作
 
vi[filename]:q离开,:q!代表强制离开.- 按下
esc键会强制进入命令模式 ZZ离开并保存编辑结果- 也可以用ex命令保存编辑结果,输入
:w是保存文件但不离开vi,若无编辑动作,可输入:q退出,输入:wq,则是保存编辑结果并离开vi(:wq与ZZ相等). :e!恢复上一次存储的文件内容.:q!消除所有编辑结果然后离开vi.!df查看磁盘剩余空间.:w newfile可以在没有权限时,暂时将缓冲区写入一个新的文件.:!rm junkfile删除一些大文件,空出一些空间.:w! file会在文件已经存在时覆盖现有文件.
- 简单的文本编辑
 
- 进入插入模式方法:按下
i. - 移动光标:
h,j,k,l这4个位于键盘中心的键可以移动光标.h向左一个字符,j向下一行,k向上一行,l向右一个字符. - 设置与右边界的距离.以便自动插入换行符.这个选项是
wrapmargin(简写为wm),例如设置为10个字符换行.:set wm=10. - 移到一行的开头
0,移到一行的结尾$. - 显示行编号,
:set nu. w命令使光标移动一个单词,符号和标点也算是一个单词.W大写的使光标移动到下一个单词,没有算入标点和符号.b和B则相反.G可以移动到指定的行.如42G可移动到42行.- 文本内容修改命令.
i表示插入,a表示添加,c表示更改,d表示删除. - 移动:先用
d做删除,再用p进行放置. - 复制:先用
y做”拖曳”的动作,再用p进行放置. - 附加文本:
a.a与i用法几乎相同,除了前者是在光标后面插入文本,后者是在光标之前插入文本. - 更改文本:
c.将c与光标移动命令一起使用,定义有多少文本需要更改.如:cw从光标到这个单词的结尾,c2b从光标往前2个单词.c$从光标到本行末尾.c0从光标到本行开头. - 更改整行文本.
cc. - 修改单个字符,使用
r命令.例如:r-:使用r命令加上要更改的字符-. - 更改字符大小写.
~. - 删除文本.
d.例如,删除单词dw,删除一行dd与D. - 删除整行.
dd.D命令会删除从光标所在位置到本行结束间的文本(D是d$的简写). p放置命令会将缓冲区的文本放在光标后,大写的p命令则会把文本放置在光标前.ctrl F 往前滚动一整屏
- ctrl B 往后滚动一整屏
 - /字符串 按下enter会高亮你要搜索的字串
 - ?字符串  按下enter相反方向搜索字串
因为之前的搜索串还在缓存中,继续输入n,N 或者/ ?加enter键继续重复搜索.- ctrl g  显示总行数,现在行数在页面的大致位置
输入50G 会移动到第50行 
 - ctrl g  显示总行数,现在行数在页面的大致位置
 
- 越过基础的藩篱
 
打开file并前进到特定的位置.
vi +n file:在第n行打开file.vi + file:在最后一行打开file.vi +/pattern file:在第一个出现pattern的地方打开file.如果你的pattern中包含空格,则需要用单引号或双引号括起整个模式.+/'you make'或者用反斜线将空格转义+/you\ make.用只读模式显示文件
vi -R file或者view file.全局搜索.
:g/pattern:寻找文件中最后一次出现pattren的地方.:g/pattern/p:寻找并显示文件中所有包含pattern的行.:g!/pattern/nu:寻找并显示文件中所有不包含pattern的行,也显示所有找到的行号.:60,124g/pattern/p:寻找并显示第60行与第124行之间包含pattern的行.替换:
:s/old/new/:将当前这一行中第一个出现的模式old改为new.:s/old/new/g:将当前行每一个出现的old更换成new.(g会影响一行中的每一个模式,而:g会影响文件中的每一行.).:50,100s/old/new/g:将第50行到第100行之间每一个出现的old更改为new.:1,$s/old/new/g:将整个文件中的old更改为new.
也可以用%代替1,$.:%s/old/new/g也会替换整个文件中的old为new.
替换全局偶尔会出错,因此可以在每次替换之前做确认,可以在替换命令的结尾加上c以确认本次替换.如:1,30s/his/the/gc.这样如果确认替换,必须输入y(代表yes之意),再按下enter如果不想替换只需按下enter.