1. 在Normal mode下键入i时会进入输入模式(Insert mode),此时是在光标所在字符的前面插入字符;在Normal mode下键入I(大写)会在当前光标所在行的开头进入输入模式(Insert mode)
2. 在一行的末尾追加(Append)字符,需要在Normal mode下按Shift+a,光标会自动跳转到当前光标所在行的末尾并进入输入模式(Insert mode)。
3. 删除命令(Normal mode时)
(1)dw,删除一个单词,即删除从当前光标所在字符开始直到下一个单词的第一个字符之前的所有字符。
(2)d$,删除从当前光标所在字符开始直到当前行末尾的所有字符。
(3)d0,删除从当前光标所在字符(不包括该字符)直到当前行开头的所有字符,与d$互补。
(4)de,删除从当前光标所在字符开始直到当前单词的最后一个字符的所有字符。
(5)dd,删除光标所在的一整行字符
(6)dG和dgg,在下面有叙述
(7):x,yd,x与y表示行号,该命令表示删除行号x到行号y的所有行
注:
(1)如果想在Normal mode下输入dw,当输入了d后又不想输入dw命令了,需要按ESC才能撤销已经输入的部分命令,否则部分命令会被记住并等待完整命令的剩余部分被输入。
(2)dw可以看作是“操作符+操作数”的形式,d为操作符,表示删除,w为操作数,含义在于表示一个word;
(3)再者,操作可以带有数字,表示个数,比如d2w或者2dw,表示删除两个单词,d2d或2dd表示删除两行。
(4)所有这些删除命令其实相当于“剪切”命令,即Cut,虽然文本被删除了,但同时也放在了寄存器中,在任意位置键入p(即paste或put)会将刚才剪切的文本”粘帖“到光标所在的后面或下一行(如果是删除了一行的话),可以多次”粘帖“同一文本直到寄存器中的文本被新的”剪切“命令改变。
注:p表示在当前光标所在位置的后面(或下一行)粘贴,P(大写)表示在当前光标所在位置的前面(或上一行)粘贴。
"ay表示将当前行的内容复制到缓冲区a,a是缓冲区名,26个字母都可以作为缓冲区名,这样就可以有26个缓冲区;"ap表示将缓冲区a的内容粘贴到当前行
4.光标移动(Normal mode时)
(1)h、l分别表示向左、向右移动一个字符,j、k分别表示向下、向上移动一行。
可以添加数字来移动多个字符或多行,比如3h表示左移3个字符,6l表示右移6个字符,2j表示下移2行,4k表示上移4行。h可认为是high,l可认为是low
(2)H表示移动到当前屏幕显示出来的首行(High),L表示移动到当前屏幕显示出来的尾行(Low),M表示移动到当前屏幕显示出来的中间行(Middle)。
可添加数字来移动多个,比如3H表示移动到当前屏幕显示出来的第3行,5L表示移动到当前屏幕显示出来的倒数第5行,M一般不带数字。
(3)按0或Home键表示将光标移动到当前所在行的开始处
(4)按w表示移动到下一个单词的第一个字符
(5)按e表示移动到当前单词的最后一个字符
(6)可在e或w前面添加数字,表示移动的单词个数
(7)按^表示将光标移动到当前所在行的第一个非空字符
5. 取消编辑(Normal mode时)
(1)键入u(小写)来取消上一个命令所进行的编辑,相当于undo
(2)如果键入U(大写),则表示将对当前行中的所有编辑都取消
(3)键入Ctrl+r,则表示redo,即undo the undo's,只对小写的u命令有效
6. 替换文本(Normal mode时)
(1)替换单个字符
键入r表示替换,然后再输入一个字符,则光标所在字符会被替换为在键入r后输入的字符
键入R(大写,即Shift+r)来进入替换模式(区别于INSERT,即插入模式,Word编辑中也存在插入模式和改写模式,改写模式也叫替换模式),再键入字符就会替换光标所在位置字符。
(2)替换多个字符
应该使用c命令,即change,这是操作符,操作数类似于前面的删除命令,比如ce表示将当前光标所在单词删除并进入Insert mode,然后就可以输入其他字符了,而后别忘了先回到Normal mode再键入其他命令。
相应的也有cw和c$(这里cw和ce的功能差不多),也可以增加数字表示执行次数,比如c2e等
(3)批量替换字符串
键入:s命令,表示substitute,格式为:s/old/new/g,该命令表示将当前行中第一个old表示的字符串替换为new表示的字符串,/g参数是可选的,表示“全局”选项,即将当前行中所有old表示的字符串替换为new表示的字符串;
键入:#,#s/old/new/g,两个#字符表示行号,该命令表示将两个行号之间的所有文本(包括行号所在行)中第一个old表示的字符串替换为new表示的字符串,/g参数是可选的,表示“全局”选项
键入:%s/old/new/g,该命令表示整个文件中第一个old表示的字符串替换为new表示的字符串,/g参数是可选的,表示“全局”选项
键入:%s/old/new/gc,该命令表示整个文件中所有old表示的字符串替换为new表示的字符串,但每替换一个old字符串都要询问是否替换
7. 文本跳转(Normal mode时)
(1)跳转到文本的第一行,键入gg
(2)跳转到文本的最后一行,键入G(大写,即Shift+g)
(3)查看当前光标所在行的文本信息,键入Ctrl+g,会显示文件路径、文件名、光标所在行和列以及其他信息
(4)跳转到某一行,可键入:数字(表示行数),然后回车,或键入数字(表示行数)+G(大写,即Shift+g)
注:g可以理解为go
8. 查找文本(Normal mode时)
(1)键入/表示查找命令,然后再键入一个搜索词即可实现从当前行向后查找该搜索词,如果遇到文件末尾仍然没有查找到则会返回到文件开始处进行查找
(2)键入?也表示查找命令,然后再键入一个搜索词即可实现从当前行向前查找该搜索词,如果遇到文件开始处仍然没有查找到则会返回到文件末尾进行查找
(3)查找下一个,使用命令n或N,小写表示按搜索顺序查找下一个,大写表示按与搜索顺序的相反顺序查找下一个
(4)在使用n或N查找下一个的”路径“中,可以使用Ctrl+o来回到上一个查找到该搜索词的地方,使用Ctrl+i来回到下一个查找到该搜索词的地方。
9. 括号配对查找(Normal mode时)
如果当前光标所在位置的字符是一个括号类型的字符,比如(、)、[、]、{、},那么键入命令%会自动将光标移动到与当前括号配对的括号处;如果当前光标所在位置不是一个括号类型的字符,那么键入命令%会自动将光标移动到与当前光标所在字符后面最近的括号类型字符配对的括号处。这在代码编写中很常用。
10. 翻页
(1)Ctrl+F,向前(Forward)翻页
(2)Ctrl+B,向后(Back)翻页
11.复制命令
(1)y是复制命令,类似于前面,ye,yw,y$以及yy都是命令组合
(2)y [number] y,比如yy表示复制当前光标所在行,y3y或3yy表示从当前光标所在行复制3行(包括当前光标所在行),其他ye,yw,y$类似
(3):p,qy,p和q表示行号,该命令会复制行号为p到行号为q的所有行。
12.同时编辑多个文件
(1)可以使用类似于vim *.txt、vim hello.?、vi 1.txt 2.txt 3.txt等来同时打开多个文件,键入:n表示跳转到下一个文件(:2n就表示跳转到下2个文件,依次类推),键入:N表示跳转到上一个文件(:2N就表示跳转到上2个文件,依次类推),注意,跳转到其他文件之前一定要将当前文件修改的内容写入才可以成功跳转。
(2)使用:q只能关闭当前文件,使用:q!可以同时关闭所有打开的文件(非分屏时)。
(3)如果已经打开一个了一个文件,则在vi的命令输入状态下键入 :sp (水平分割线)或:vsp(垂直分割线)加另外一个文件的路径及文件名,如此就可以在一个窗口打开多个文件了。(sp表示split,vsp表示vertical split)
(4)也可以用 vi -o file1 file2 file3.... 以水平分割屏幕窗口方式同时打开多个文件,如果-o换为-O(大写),则表示以垂直分割屏幕窗口方式同时打开多个文件。
(5)当同时打开多个文件时,可以使用 Ctrl + 按两次w在窗口间切换,Normal mode下键入:ls或:buffers可列出所有打开的文件(一个打开的文件就认为是一个buffer),其中带有%a标识的表示当前正在编辑的文件,带有#标识的文件表示上一个编辑的文件,这样,键入:e#就可以回到上一个编辑的文件中(也可以使用快捷键Ctrl+^)。(前面说了:n或:N可以跳转到其他文件,因为每一个打开的文件都认为是一个buffer,所以也可以使用:buffer n来跳转到某个打开文件,n是一个正整数,:ls或:buffers也显示了各个打开文件的序号n,可简写为:b n)
(6)vi -r a.txt b.txt c.txt ... 可以在VIM中以tab的形式打开多个文件,可以使用gt命令(即先按g再按t,可理解为go tab)切换到下一个tab,可以使用ngt(n是一个正整数)来切换到第n个tab。
(7)键入:tabnew可以打开一个新的tab
13.标记
键入ma表示用字符a来标记(Mark)光标所在行,然后可以使用通过键入'a来从其他行跳转到标记行。
a也可以替换为其他字符。
z.其他
(1)键入:!+命令名字即可,比如:!make或:!ls -ls或:!./test
(2)将当前文件内容整个复制(写入)另外一个文件,如果是新创建一个文件,则可以直接键入:w a.txt,即将当前文件内容写入一个新文件a.txt(新文件是指该文件之前不存在),如果要将当前文件内容写入一个已存在的文件中,可以键入:w! a.txt,此命令会用当前文件的内容替换原来文件a.txt的内容。
(3)将文件的部分内容复制(写入)另外一个文件,可以使用VISUAL模式来选择一部分文本,选择后,如果是新创建一个文件,则可以直接键入:w a.txt(此时最底一行会显示为:'<,'>w a.txt),即将当前文件内容写入一个新文件a.txt(新文件是指该文件之前不存在),如果要将当前选择的文件内容写入一个已存在的文件中,可以键入:w! a.txt,此命令会用当前文件中选择的内容替换原来文件a.txt的内容。
(4)VISUAL模式帮助我们选择一部分文本,然后我们可以对该部分文件进行其他操作,比如删除,复制,写入等
注:键入v会进入VISUAL模式,键入V(大写)会进入VISUAL LINE模式,即会整行整行地选中。
VISUAL或VISUAL LINE模式下,选中一段或几行内容后,按 o 可以在选中文本的两端进行跳转,比较有用。
(5)有写就有读,可以键入:r 文件名来将一个文件的内容读入当前光标所在位置的下一行,注意:既然可以读文件,那也可以读其他任何内容,比如管道等,所以也可以读其他命令的执行结果,比如键入:r ls -ls会将命令ls -ls的结果读入当前光标所在位置的下一行。
(6)开启新的一行
键入o就可以在当前光标所在行的下面开启一个新空行并进入INSERT模式;
键入O(大写)就可以在当前光标所在行的上面开启一个新空行并进入INSERT模式;
注:o表示open
(7)vi中可以使用Tab键或Ctrl+d来补全命令
(8)x是删除,p是粘贴,连续键入xp的效果就是将光标所在字符与其后面的一个字符互换位置;dd是剪切一行,p是
粘贴,连续键入ddp的效果就是将光标所在行与其下一行互换位置。
(9)gg是跳转到文档开头,G是跳转到文档结尾,相应地,dgg是删除从文档开头到当前光标所在行(包括该行)之间的所有行,dG是删除从当前光标所在行(包括该行)到文档末尾之间的所有行。
(10)J(大写)表示将光标所在行与下一行合并为一行,同时用空格分隔这两行。
(11).(即英文句号)表示重复上一个命令,但不重复undo、redo等命令
(12)vim -d 1.txt 2.txt 可以用来比较1.txt和2.txt之间的不同,一般可用来比较两份类似代码之间的不同。