VI命令太多,插件无数,不过对于日常基本的文本操作,掌握基本命令足以,这里转一篇大牛总结的,平时使用的比较多的命令:
1. 光标移动相关命令:
l 0:移到行首;
l $:移到行尾;
l n:跳到相对当前行的后n行;
l :n:跳到第n行,注意是在命令模式输入“:n”,前面的是只输入n
l nG:跳到第n行,注意:G大写
l gg:文件开头
l shift+g: 文件结尾
l %跳到匹配的括号;
l ctrl+o后退;
l ctrl+i前进;
l ctrl+t, taglist中用于标签跳转
l gd:跳转到变量定义的地方
l m+一个字母可以设定一个标签,然后`+设定标签的字母就跳到相应的标签处
l f+一个字符,跳转到当前行当前光标后面第一次出现这个字符的位置;
l ctrl+b向后翻页;
l ctrl+f向前翻页;
l ctrl+]跳转到当前符号的定义处(需要有tag文件)
2. 编辑相关命令:
插入:
l i(I):i,光标前插入;I:行首插入;
l a(A):a光标后插入;A:行尾插入;
l o(O):o:行上插入新行;O:行下插入新行;
删除:d
l dd:删除当前行;
l dnd:删除包含当前行在内的之后n行;
l d+G:删除当前行至最后行所有内容;
复制:y
l yy:复制当前行;
l yny:复制包含当前行在内的之后n行;
粘贴:
l p
撤销:
l u(U):u,撤销上一个操作;U,撤销当前行所有操作
重复:
l ctr + r
重复上一个命令:
l .(句点号)
3.保存退出:
l w:随时保存
l x:如果改变了文件那么保持并且退出;如果文件没有被改变则直接退出;
l ctrl+z: 如果改变了文件那么放弃修改直接退出;如果文件没有被改变则直接退出;
4. 搜索相关:
l 向前搜索:?
l 向后搜索:/
l 下一个匹配:n,对于向前搜索,光标向前移动;对于向后搜索,光标向后移动;
l 上一个匹配:N 查找上一个出现的string
小技巧:hlsearch和nohlsearch开关会设置是否允许高亮搜到的字符串;默认输入搜索字符串回车后vi会将搜索到的所有字符串高亮,如果要取消高亮,一个比较简单的方法是随便重新搜索一个不存在的字符串即可。
l shift+8,向后搜索当前光标指向的单词
l shift+3,向前搜索当前光标指向的单词
5.替换:(执行后进入编辑模式)
l :%s/old string/new string/g 这个指令是于在整个文件中替换特定字符串
l c:相当于删除命令d加插入命令i的结合;如果要删除并且修改,那么可以直接用c命令比较方便,而不用d命令先删除后插入;和命令d类似,cc删除当前行并插入,cnc删除包含当前行在内的之后n行并插入;还可以和0,$,w,e等结合操作;
l r(R):r,替换一个字符后自动转换命令模式;R进入替换编辑模式,一直到按ESC才能重新返回命令模式;
6.选择:
l CTRL-v:列选择模式,或者叫做可视块选择。
选择后可以用x删除,或者按I进入插入模式,插入后按ESC所有列都插入了相同的内容;
可以用这个功能进行多行缩进,选择多行首字母,然后一起插入空格进行缩进;
l Shift-v:行选择模式,进入行选择模式后可以用k,j键上下移动进行选择,
选择后可以用d进行删除,或者用y进行复制;<左缩进,>右缩进;
7. 综上:
编辑和替换命令都会从命令模式进入编辑模式;
删除命令d,复制命令y,替换命令c可以搭配0,$,w,e进行操作。
0代表行首,
$代表行尾,
w代表当前光标至后面的空白部分(包括空白),
e代表当前光标到第一个非空白部分之间的内容;
例如:d$表示删除光标至行首部分,y0表示复制光标至行首部分,cw会删除当前光标之后直到第一个空格,并且进入编辑模式;
删除命令d,复制命令y,替换命令c可以搭配 w,e以及行或者字数进行操作,格式:*n?(*代表d,y或者c操作,n代表包含当前行在内的后n行,?代表e或者w)例如:d2w,删除当前光标至后面的两个单词;y2e,复制当前光标至后面两个单词包括空格在内;dnd,yny,删除或者复制当前行在内的n行;
8.杂项命令 :
l 大小写转换键:~
l ctrl+g:显示当前编辑的文件相关信息;
l ctrl+p,ctrl+n:根据上下文自动完成;
l 显示行号:set nu(set nonu)
l 自动换行:set wrap(set nowrap)
l zo:打开当前行折叠
l zc或者空格:关闭当前行折叠
l 打开多个文件后的切换:
:b filename或者
:b 文件编号
进行文件切换(后不一定加文件全名,只要能保证唯一性,如:
:b te*)
l :ls 查看缓存中的文件
l 有时候为了方便可以把vi分为两个窗口:
:sp 或者:split
l 分开窗口后如何切换窗口呢:
ctrl+w,然后j,k上下切换窗口;
l :e 编辑新文件,如:
:e test.rst