下面是用于编辑的子命令:
a 在当前光标后开始添加(append)字符。
i 在当前光标前开始插入(insert)字符。
o在光标所在行后插入一空行。
O在光标所在行前插入一空行
yy把当前行放入缓冲区。 2yy复制从当前行开始的两行。
Yw把光标所在的单词放入缓冲区
p 将缓冲区内容取到光标所在行的下面一行。
P 将缓冲区内容取到光标所在行的上面一行。
x删除光标所在的字符。
dw删除光标所在单词。
dd删除当前行。
ndd删除从当前开始的n行。2dd删除从当前行开始的两行。
u:取消当前的操作。
.:恢复当前的操作。
在命令模式下:%s/AAA/BBB/:将AAA替换为BBB
下面是用于控制浏览的子命令:
h 将光标左移一格。l 将光标右移一格。
j 将光标下移一格。
k 将光标上移一格。
w 将光标移到下一个单词词首。(hljkw都可以带数字,2h,光标右移两格)
0 把光标移到当前行的第一个字符处。 (0是零)
$ 把光标移到当前行的最后一个字符处
:1 或 gg
跳到文件尾
:$ 或 G (大写。当前若大小写锁定直接按g,未锁定则按shift+g)
M 把光标移到屏幕最中间一行。middle
L 把光标移到屏幕最底端一行。 (不是文件的最后一行)low
Ctrl + f 向后滚一页。(往文件结尾的方向)
Ctrl + b 向前滚一页。(往文件开头的方向)
两个反引号会到上次的位置。
/pattern 向后寻找指定的pattern ,若遇到文件尾,则从头再开始。
?pattern 向前寻找指定的pattern ,若遇到文件头,则从尾再开始。
n继续搜索,N反方向继续搜索。
:s/aaa/bbb/ 将当前行中第一次出现的aaa替换成bbb
:s/aaa/bbb/g 将当前行中所有出现的aaa替换成bbb
:1,$ s/aaa/bbb/g 将当前文件中所有出现的aaa替换成bbb
下面是一些控制内容显示的子命令:
:set number 在内容前显示行号。下面是用于保存文件的子命令:
:w保存内容。
:wq保存内容并退出。
:q!退出不保存。
:w file 另存为file。
vi的一些背景故事:Bill Joy在设计vi的时候用到的键盘是ADM-3A,(当时还没有鼠标) 当时的键盘和现在是很不同的,没有上下左右键,hjkl在ADML左下上右键。
当时的控制键只有ESC,CTRL,SHIFT,ESC就在CTRL的上方,所以ESC就被用来做为切换到命令模式的键。