VI的一些基本命令之一
在Fedora下虽然写C/C++代码可以用Code::blocks,但是还是用VI来的顺手,尤其是VI用熟了之后,发现真是太好用了,如果想自己好好的学习下有关VI的一些命令的话,那么最好还是从网上下一个Tutorial,英文中文版随便,英文版的也很好懂的。下面记录下我看Tutorial时记下的命令,比如移动光标这样的命令,这里就没有了,所以如果想找一篇入门的文章的话,或许这里不适合你。
na
s 和x的功能差不多,不过是删除当前字符之后进入到Insert模式,另外c命令和d命令的区别就类似与s和x的区别
^ 跳到当前行的第一个非空字符
fx 从当前字符开始,在当前行查找第一次出现x字符的位置,并跳到x所在的地方,比如你有文本abcdefg。当前光标位置在a处,那么fe,则会把光标跳到e所在的位置,可以在f前面加上数字表示查找第多少个。相同功能的还有F,t,T,其中F是从后往前找,t/T是找到x所在位置前面的一个字符。这样还可以和d,y等命令结合使用
CTRL-U/CTRL-D/CTRL-B/CTRL-F 向上滚半屏,向下滚半屏,向上滚一屏,向下滚一屏
. 执行最后一次删除或者修改命令操作
J 把当前行和接下来的行合并在一起,nJ表示合并n行(包括当前行)n》=2
r 表示修改一个字符,nr [表示任意你想换成的字符],表示替换从当前字符开始的n个字符,并都替换成。
~ 改变当前字符的大小写 ,当然你也可以在前面加上数字,这条命令,在你不小心按下了Caps键的时候还是很有用的
可以用q来录制宏,然后保存在某一个字母所对应的宏区里面,以后可以用。比如你的C 语言头文件有如下一些
fcntl.h
unistd.h
stdlib.h
那么你可以通过如下的命令来快速的完成头文件的录入,首先我们可以把每行都相同的东西不录入(这就是宏的好处,待会可以一次性录入)。然后先录入所有的不同出,也就是先录入如下的几行
fcntl
unistd
stdlib
然后把光标移动到第一行,也就是stdio所在的行,然后退出到Normal模式,接下来就是录制宏了。按下qa,表示把接下来的宏录制在a所对应的宏区。然后依次输入I#include <<ESC>A.h><ESC>jq,解释下这条命令吧,首先I表示进入Insert模式,而且是从行头开始,然后依次输入#include <这些字符,<ESC>表示退出到Normal模式,然后A表示进入插入模式,不过是从行末开始,然后输入.h>表示头文件的后面几个字符,然后<ESC>表示退出到Normal模式,接下来的j表示移到下一行,q表示宏录制结束。到这里你的宏已经录制在a里面了,接下来就是使用了,把光标移动到fcntl所在的行,然后退出到Normal模式,接下来按下3@a.发现接下来的3行也全部写好了吧,是不是简化了很多工作呢?这里的3表示需要调用3次。
在VI中如果需要输入一些特殊字符怎么办呢?当然可以解决的啦,可以通过命令(在Normal模式下)输入:digraphs来得到对应的命令,然后在Insert模式下用CTRL-K+刚才得到的两个字符来完成特殊字符的输入
VI中如果用搜索的话,那么.*[]^%/\?~$这些字符是有特殊意义的,也就是不代表自己本身的,是转意字符,如果想搜这些转意字符,需要在他们前面加上反斜线\来去掉他们的转意性质。另外,搜索模式是有历史记录的,你可以通过在Normal模式输入/进入搜索模式然后通过上下按键来选择历史命令。
一般搜索到的字符都是高亮的,但是我第二次打开其他的文件也是会高亮上一次搜索的字符,如果我不想高亮怎么办,首先可以通过搜索一个本文件没有的字符或者词来解决,还有就是可以通过命令:set nohlsearch设置不显示高亮,当然:set hlsearch表示显示高亮
如果我想在我输入每一个字符的同时,VI自动匹配我已经输入的字符,怎么办,用命令设置:set incsearch.这样VI就会在你输入每一个字符的时候,匹配当前已经输入的字符。
ma 在当前位置添加一个名为a的标志
`a 跳到名字万为a的mark位置
‘a 跳到名字为a的mark的行首
:marks 会列出所有的mark 另外mark可以和d,y等命令一起组合使用,另外,每次打开文件的时候,会自动有一些mark。
!!command 用command命令的执行结果代替当前行,这个在加入日期什么的还是很方便的
set autowrite/noautowrite 设置自动保存和不自动保存的,默认是不自动保存的
v/V/CTRL-v 进入Visual模式,v是可以单个字符的,然后V是整行整行的,CTRL-v是矩形形式的。这个对于改变一大片文字什么的也是很有用的
由于我这也是记录式的,顺便加上一些自己操作之后的感想,所以很多东西建议读者看Tutorial,那才是王道,下一篇《VI的基本命令之二》会接着这篇写