Vim的模式与一些常用命令
i、Vim的模式
Vim有三种模式,Normal 、Insert 、 Visual。在Normal模式下,可以输入运行命令;在Insert模式下,可以输入编辑文本;在Visual模式下,可以对选定的文本运行命令操作并该命令仅仅作用于选定文本。启动Vim的默认模式是Normal模式,输入 i、I、a、A、o、O、s、S、r、R可以进入Insert模式,其中区别在于:
命令 | 区别 |
---|---|
i | 在光标之前插入字符 |
I | 在光标所在行的所有字符开头之前插入字符 |
a | 在光标之后插入字符 |
A | 在光标所在行的所有字符之后插入字符 |
o | 在当前光标的下面打开新的一行 |
O | 在当前光标的上面打开新的一行 |
s | 删除当前光标下的字符 |
S | 删除当前光标所在行的所有字符 |
r | 用新输入的字符替换当前光标所在字符,然后立即返回Normal模式 |
R | 在当前光标位置所在字符开始往后一直用新输入的字符替换所有原有字符 |
在Nomal模式中输入v进入Visual模式。 在Insert模式或Visual模式中按Esc键即返回Normal模式。
ii、VIm的常用命令(不做特殊注释的话,下面的命令一般在Normal模式生效,一般对文本操作的命令在Visual模式下也同样生效)
(1)、光标的移动:
h(左)、j(下)、k(上)、l(右)移动光标。还可以在命令之前输入数字,指定要移动多少行。比如:7h表示左移7个光标,6j表示光标下移6行。
光标向前跳多个词到达词首,比如5个词,输入5w;光标向后跳7个词到达词首,输入7b。跳到3个单词后的词末,输入3e;跳到3个单词前的词末,输入3ge。
移动到行首第一个非空字符,输入"^"或按Home键;移动到光标所在行的第一个字符(包括空格);移动到行尾,输入"$"或按End键。注意,这个只有"$"或按End键之前加数字会生效。
向前移动到某个指定的字符,比如向前找第三个“h”,输入”3fh“;向前把光标移动到第四个"b"字符的前一个字符上,输入”4tb“。向后移动到某个指定的字符,比如向后查找第三个”h“,输入”3Fh“;向后把光标移动到第四个”b“的后一个字符上,输入”4Tb“。这四个命令都可以使用”;“命令重复,","命令反向重复。光标不会移出当前行。
"%"命令可以将当前光标所在的括弧移动到匹配的括弧的位置,比如:从”)“移动到”(“,反之亦然。
gd命令到达光标所在处函数或变量定义之处。
”*“和”#“命令匹配当前光标所在单词, ”*“移动光标的下一个匹配单词,而”#“命令是移动光标到上一个匹配单词。
移动到指定行,比如想移动到第30行,输入30G或输入30gg。没有数字限制的话,G命令将光标移动到文件的尾部,gg命令移动光标到文件开始。
移动都某部分,比如到文件大约10%的行位置,输入”10%“。
H命令移动光标到视野内的第一行,M移动到视野内的中部,L移动光标到视野内的最后一行。
确定光标的位置,输入Ctrl-G命令。
Ctrl-u命令光标向上移动半屏,Ctrl-d光标向下移动半屏。
Ctrl-e上滚一行,Ctrl-y下滚一行。
Ctrl-f光标向前移动一整屏,Ctrl-b光标向后移动一整屏。
”zt“命令将光标所在行移动到屏幕的顶部,”zz“命令将光标所在行移动到屏幕的中部,”zb“将光标移动到屏幕的底部。
(2)、删除字符:
删除某个字符,移动光标到所在字符,然后输入x或dl(光标下的字符)、X或dh(光标签的字符);删除多个字符,可以在x之前加数字;
删除从当前光标到所在行上指定的某个字符之间的所有字符(包括该指定字符)
删除某行,移动光标到所在行,然后输入dd;
删除换行符将两行连起来,光标移动到要合并的两行的第一行,然后输入J。
利用命令组合模式,操作符-动作。d命令后跟一个光标移动动作,将删除从当前位置到光标移动到的目标位置的全部内容。例如:删除从当前光标向前的5个单词,命令为d5w;删除从当前光标位置到行尾的字符,命令为d$。
db表示从当前位置删除到前一个单词的开头。diw表示删除光标上的单词(不包括空格)。daw表示删除光标上的单词(包括空格)。
从当前光标位置上的字符一直删除到指定的字符(包括指定字符),用df命令,比如,删除到r,命令为dfr。从当前光标位置删除到指定字符的前一个字符,用dt命令,比如:dtr。
dG 表示从当前光标位置一直删除到文件的末尾。dgg表示从当前光标位置一直删除到文件的开始。
(3)、修改字符:
修改字符的操作命令是c。作用是删除字符后自动切换到Insert模式,比删除操作命令多了一个切换到Insert模式的功能。
修改光标下的 字符,cl.
修改光标前的字符,ch.
修改当前光标后的3个词,组合命令是c3w。
修改当前光标之前的单词,cb.
修改光标上的单词,不包括空格,ciw。
修改光标上的单词,包括空格,caw。
修改到指定字符(包括指定字符),比如修改到e,命令为cfe。
修改到指定字符之前一个字符,比如,修改到e之前的字符,cte.
修改光标所在行一整行,cc。
从当前光标位置修改到行尾,c$。
cG,修改到文件的末尾。
cgg,修改到文件的开头。
(4)、替换字符
r命令是进入Insert模式的命令之一,进入Insert模式等待你输入一个字符替换当前光标上的字符后自动返回Normal模式。
在r命令之前加入数字前缀,可以用一个字符替换当前光标后的多个字符。比如:3rp。但是例外的是,如果替换的字符是回车键,则只会用一个换行符替换多个字符。
使用R命令启动Replace模式, 这个模式下在当前光标位置所在字符开始往后一直可以持续用新输入的字符替换所有原有字符,直到你退出Replace模式。在这个模式下,使用退格键Backspace,原来被替换的字符会恢复。
(5)、查询字符:
从当前光标位置向前查找当前行上的某个指定字符的第一个字符,命令是f。比如: 查找w,fw。F也和f命令一样,但是查找方向相反。
从当前光标位置向前查找当前行上的某个指定字符的前一个字符,命令是t。比如: 查找o之前的字符,to。T也和t命令一样,但是查找方向相反。
向前查找字符单词命令, ”/“后加上想查找的字符单词。比如:”/a“ 就是查找字符”a“。想要向前查找当前光标后第三个匹配的a,还需要输入”3n“命令。向后第三个则输入”3N“。
向后查找字符,”?“后加上想查找的字符。想要向前查找光标后第三个匹配的字符,还需输入”3N“。向后第三个则输入”3n“。
查找字符通常区分大小写的,如果不想区分大小写,可在~/.vimrc文件中加入命令"set ignorecase"命令。
还可以将光标移动要查找的单词上,然后输入”*“命令,这样将取得当前光标上的单词并向前查找该单词。想要向前查找光标后第2个单词,可以输入"2*"。
向后查找当前光标上的单词,则可以输入”#“。想要向后查找当前光标的第2个单词,可以输入”2#“。
输入”/di“,也可能查找到单词”media“。如果想限定di只匹配单词开头,可以输入”/
"/^di",只匹配行首。"/di$"只匹配行未。”/^di$“仅仅匹配包括”di“的行并不带空格。
”/d.i“只匹配第一个字符是”d“,第二个字符是任意字符,第三个字符是”i“的字符串。
”/di/.“匹配带特殊字符”.“的字符串”di.“。
(6)、复制字符
使用d、x或其它命令删除文本的时候,这些被删除的文字将会被Vim缓存起来。可以使用p命令将该被删除的文本在当前光标的前面(比如前一行)重新粘贴出来。
使用y(yank:抽出)操作符命令可直接把文字拷贝到寄存器中,然后用p命令粘贴到其他地方。比如:拷贝4个单词,4yw(包括了单词后面的空格,用ye则不包括单词后的空格)。
yl拷贝当前光标下的字符,yh拷贝当前光标之前的字符。
yw拷贝当前光标到下一个单词的开头,yb拷贝当前光标到上一个单词的开头。yiw,拷贝光标上的单词(不包括空格)。yaw,拷贝光标上的单词(包括空格)。
y$拷贝到行尾。
yy命令拷贝一整行,快捷方式为Y。
yG,拷贝到文件的末尾。
ygg,拷贝到文件的开头。
(7)、文本对象
当处于某个单词或句子的中间,而又想删除整个单词或句子时,可以使用文本对象。比如:diw可以删除一整个单词(iw表示Inner word,不包括单词后的空格),如果想要包含单词后的空格也删除,可用命令daw。同样地,cis表示修改一整个句子(is表示Inner Sentence,不包括句子后的空格),如果想要包含句子后的空格也修改,则用命令cas。
同样地,在Visual模式下,也可以用文本对象命令来选中更多的文本。比如使用aw选中当前的整个单词,再次使用则选中多一个单词。
文本对象的表达式:<操作命令>a<文本对象>或<操作命令>i<文本对象>,操作命令可以是任何命令,如d,y,c;文本对象可以是一个单词w,一个句子s,一个段落p,也可以是一个特殊的字符:"、'、)、}、]。
使用 :help text-objects 可以在帮助里查看更多的文本对象的更多命令内容。
使用:help operator 可以在帮助里查看更多的操作符命令内容。
(8)、撤销与重做:
撤销上一个编辑操作,输入u;撤销所有在前一个编辑行上的操作,输入U;重做,输入Ctrl+r。
"."命令表示重复最后一次除u命令、Ctrl-r命令和冒号命令之外的任何操作命令。
(9)、查找命令
输入"/"、”?“、”:"后,按方向键上箭头或下箭头,可以查找同样的历史命令记录。
(10)、命令次数:
可以在很多命令之前加上数字,表示执行该命令的次数。
在组合命令的中,数字可以放在不同的地方。比如:修改5个单词,5cw和c5w都一样;删除10个单词,可以写成10cw、c10w,或者2c5w、5c2w。其中的差别在于数字修饰的命令不一样,但是作用是一样的。
(11)、退出:
保存文件并退出,输入ZZ或":wq"或“:x”;放弃修改并退出,输入“:q!”;强制退出所有打开的文件,输入“:qa!”
(12)、放弃执行命令:
Esc按键可以终止大部分命令。
(13)、帮助:
输入“:help”进入帮助窗口;输入ZZ,退出帮助窗口。
要获得具体的帮助,比如关于u命令的帮助,输入类似“:help u”。
默认显示Normal模式的帮助,要显示其他模式的命令,可以使用“i_”前缀。
获取命令参数的帮助,比如:“:help -e”.
使用“:helptags ~/.vim/doc” 命令产生插件的本地tags文件,从而可以在帮助中查询插件的文档。
(14)、标签跳转:
被 [ ]包起来的文字是一个标签链接,光标移动到 [ ]之间,按Ctrl+]组合键跳转到标签链接的地方。Ctrl+t或 Ctrl + O跳回前一个标签。
使用G命令或者”n“命令或者查找”/“命令跳到其他行后,Vim会记录下你跳过来的地方,使用两个单引号('')即可跳回原来的地方;或者使用Ctrl-o命令跳到较旧的地方;Ctrl-i命令或Tab键跳到较新的地方。输入":jumps"命令可以看到光标跳转的位置列表信息。
使用”m“命令标记当前光标的位置,位置的名称只能为a~z的单个字母(区分大小写)。比如:定义当前光标的位置为”E“,命令为"mE"。设置后可以通过单引号'+光标名称,或者上句号`+光标名称可以跳到指定的光标位置,区别是单引号 ’E命令跳转到标记光标位置所在行的首个非空字符(列的位置跟标记的时候不同),而上句号 `E跳转到标记的光标原来位置(包括行和列的位置都跟标记的时候一样)。输入”:marks“命令可以查看所有带名称的标记信息列表,其中有几个特殊的标记。比如:单引号 ' ,表示跳转前的位置。双引号 "表示Normal模式最后编辑的位置。中括号 [表示文件第一行的第一列。中括号 ]表示文件最后一行的第一列。 ^表示Insert模式下最后修改的位置。 . 表示无论是Insert模式或Normal模式最后修改的位置的开头。
(15)、显示Vim相关的文件路径
:scriptnames命令可以查找~/.vimrc或~/.gvimrc或插件等文件的路径。
(16)、在vim中打开编辑文件命令:
保存文件:
另存为:
当同时打开多个文件,在多个文件间切换命令:
(17)、Visual模式
之前介绍过,在Normal模式下,输入v,进入Visual模式。这样,你对光标作任何移动操作,从当前光标位置到移动到的位置之间的文本都会高亮,此时输入操作命令,比如删除命令d,则高亮部分文本会被删除。
在Visual模式下光标的移动操作跟Normal模式差不多。注意,在Visual模式下,"o"命令表示返回到选中文字的另一端,这跟Normal模式不同。
(18)、快捷键与一些常用的命令:
一些经常使用的组合命令,存在等价的快捷单字符命令:
dl 的等价快捷键为 x,作用删除当前光标下的字符。
dh的等价快捷键为 X,作用删除光标左边的字符。
d$的等价快捷键为D,作用删除到行尾。
cl的等价快捷键为s,作用修改当前光标的字符。
cc的等价快捷键为S,作用修改一整行。
c$的等价快捷键为C, 作用修改到行尾。
yy的等价快捷键为Y,作用拷贝一整行。
一些常用的命令的如下:
c 修改操作命令
d 删除操作命令
y 复制到寄存器的操作命令
~ 修改选中的字符的大小写,原来大写的转换成小写,原来小写的转成大写。在Visual模式和Normal模式下都能生效。 注意,只有tiledeop设置后,这个才能成为一个操作命令,才可用该命令与其他光标移动的命令组合使用。
g~ 修改选中的字符的大小写操作命令,原来大写的转换成小写,原来小写的转成大写。
gu 修改选中的字符为小写操作命令。
gU 修改选中的字符为大写操作命令。
! 过滤警告操作命令
gq 选中文本格式化,文本拼接组合成句子或段落命令。在Normal模式和Visual模式下都能生效。
> 选中文本向右Tab缩进。在Normal模式和Visual模式下都能生效。
< 选中文本向左Tab缩进。在Normal模式和Visual模式下都能生效。
gd 到达光标所在处函数或变量定义之处。
块操作命令过程: 移动到想要进行操作的位置,比如行首或行尾;按组合键Ctrl-v,进入块操作模式;移动光标到任何地方,选定块操作的范围,比如:hjkl命令;最后输入I(在块的每一行首插入字符)或A(块的每一行尾部插入)进入Insert模式,然后输入想要插入的字符,按Esc键使块的每一行同样的位置生效。
自动补全功能:在Insert模式下,输入一个词的开头,然后按组合键Ctrl-n或Ctrl-p,就出现自动补全的提示。
宏录制:q + <宏> + 操作队列 + q ,@<宏> , @@。<宏> 可以是任意单个字母(区分大小写)或任意单个数字, q<宏> 进入recording模式,该模式下你的操作记录会保存到寄存器<宏> 中;然后输入@<宏>操作命令将重新执行被记录到寄存器<宏>中的命令;@@命令跟@<宏>的作用一样。
可视化选择:v,V,Ctrl-v. v,V都可以进入Visual模式,而Ctrl-v可以进入Visual Block模式(即块操作模式),在这两个模式下,都可以移动光标选定编辑文本。对选定文本执行c,y,d等操作,下面有几个常用的对选定文本的操作:
(19)菜单快捷键
编辑菜单:
Undo 快捷键 command+z
Redo 快捷键 shift+command+z
Cut 快捷键 command+x (剪切的文本可以粘贴于其他程序或vim)
Copy 快捷键 command+c (复制的文本可以粘贴于其他程序或vim)
Paste 快捷键 command+v
Select All 快捷键 command+a
New window 快捷键 Command+n
New Tab 快捷键 Command+t
Open New File 快捷键爱你 Command+o
Save 快捷键 Command+s
Save as 快捷键 shifit+Command+s
Close window 快捷键 Shift+Command+w
Close 快捷键 Comman