**
Linux开发工具
**
Linux开发工具——vim
vim最小集
vim是一个多模式编辑器,vi也一样,但vim兼容了vi的所有指令,还有一些独有的特性,本篇只针对vim展开。vim有各种模式,每个模式的用法都有差别,模式之间也可以相互切换。不过常用的就是3~5种模式。像vs,我们写代码,执行程序都可以在vs上实现,这也就是一个集成开发环境,也就是IDE。vim虽然也可以集成,但一般不会这样做,并不适合。vim是一个单纯的编辑器,只用来写代码,linux上调试工具用gdb,编译用gcc,各司其职。vim的模式中,常用的5个是命令模式,底行模式,插入模式,视图模式,替换模式。这篇会写到命令,底行,插入模式。
vim 文件名,如果没有文件vim就会自动创建这个文件,当然也可以先touch一个再操作。打开后默认的是命令模式,此时输入代码式没有效的,即使屏幕上显示出了操作者输入的字母。想要正常的写代码,需要进入插入模式,进入的方法有很多,这里只写一种,输入i,左下角会出现INSERT,这就意味着我们可以写代码了。但是这里和vs不一样,如果没有对vim进行配置,那么这时候的vim和一个记事本一样,没有自动缩进,所以字符都需要自己敲,比如双括号,就得输入两个括号才行;缩进也得空格四下。先不说配置的问题,至少模式是有的,字符高亮是有的,代码也可以写。
写一段简单的代码。因为我是配置过的vim,左边带有数字序号,没有配置的不会有。
想要退出的时候,在插入模式下无法退出,得回到命令模式,回退的方式就是一个万能用键,esc。这时候左下角的INSERT就消失了,vim处在命令模式下,然后shift + :,vim就会进入底行模式,左下角就出现了一个冒号,冒号后输入的字母看这个图片!
我们先忽略上面三个,看冒号后的那四个。w是保存,q是退出,wq是保存并退出,q!是不保存退出,其实q也是一样的功能,不想保存时按q即可。
退出后cat一下就可以看到文件里已经有了代码。刚才提到过万能键esc,之所以是万能,是因为无论你处于哪个模式,操作的时候也已经混淆了,那么就可以直接esc进入到命令模式。命令模式可以切任何其他的模式。
vim指令集
刚才在图片中也看到了,上面还有三个指令。整个图片是按esc后可输入的东西,接下来我会写一些常用的指令,也包括图中那三个。
底行模式下, 调出和去掉行号:set nu/set nonu
大部分指令都是在命令模式下进行的,所以我们先esc。
基本操作
进入命令模式后,通过小键盘旁边的上下左右键调整光标位置,假设要复制这一行,按yy,要粘贴,按p,就会在下一行出现同样的内容。如果要粘贴好几行,在p前打上数字即可,比如3p,就是粘贴3遍。yy之前也可以加上数字,这时候yy的作用就是包括所在行,向下复制。比如光标在第3行,3yy则会复制345行。
如果后悔做一个操作,那么按u撤销即可。有趣的是,在复制的时候,光标无论在这一行的哪个位置都可以复制整个行的代码,当撤销时,光标也会来到之前你移动到的位置。回到撤销操作,如果对撤销这个操作后悔了,想撤销刚才的撤销操作,则按Ctrl + r.这两个操作可以互相使用,u,Ctrl + r,u,Ctrl + r,反复撤销…。
有个复制粘贴,自然也要有剪切。剪切的命令是dd,然后用p再粘贴。当然如果不粘贴,那么dd就相当于yy,也就是删除。dd之前也可以加上数字,表示剪切多少行,和yy一样。
总结一下 :
yy/nyy:复制当前行或者复制当前行在内的指定若干行
p/np:粘贴一行或者多行相同的内容到当前光标所在行之下
u:撤销刚刚的操作
Ctrl + r:对撤销进行撤销
dd/ndd:对当前行,或者当前行在内的n行的内容进行剪切
vim中,做了一系列操作后保存,那么还是可以撤销的,但是如果保存退出后,再进入就不能撤销了。
光标移动
假设已经有了几百行,我们想自由地移动光标,而不是用鼠标滑动,那么移动到尾部是shift g,其实也就是G,想移动到头部,则按gg。现在定位到一个准确的行数,比如47行,则在命令模式下按47shift g即可,所以它前面也是可以加数字的。
刚才是上下移动,现在是左右移动。左右移动到尾部shift 4 其实就是美元那个标识,头部则是shift 6,其实对应的就是上尖括号。左右移动的指令可以让光标可以快速移动:w,b就是向后,向前移动,以单词为单位。wb之前也可以加上数字,意味着移动过几个单词。
对于每个字母的大小写转变,这里用的都是同一个命令,shift ~,按一下即可变成小/大写,按住就会一直往后替换。如果不是大小写,而是要把其中一个字符换成另一个字符,那么按r后,输入要改成的字符即可,这也是一种替换。r前面也可以加上数字,表示往后替换n个字符。如果要替换整个一行的代码,则按shift r,此时就进入了替换模式,左下角出现REPLACE字符。这时候输入的内容vim就会替换过去,输入多个就替换多个。
假设要删除某个字符,按x,一直按则一直删。x前面也可以加上数字,表示删除n个字符。而shift x则是往前删除,也就是X。
总结一下:
_shift g:光标定位到文档最结尾
gg:光标定位到文档最开始
n shift g:光标定位到文档的指定行
shift 4:光标定位到文档行的结尾
shift 6:光标定位到文档行的最开始
n w, n b:按照单词为单位,进行前后移动,w向后,b向前
shift ~:快速大小写切换
n r:替换光标所在的字符
n x:行内删除,左-右
n shift x:行内删除, 右-左
_
扩展
h,j,k,l移动光标,释放鼠标。
h左移,l右移,j下移,k上移。
关于插入模式的进入,除了按i,再写两个其他方式。
按a,光标会向后移动一下;按o则是光标向下再开一行。左下角都是INSERT。其他按键搜索一下效果就行,作用都一样。
底行模式的一点代码
在底行模式时,/后跟上内容,就会进行搜索和这个内容所有出现的地方,并加上高亮,按n就可以指向第一个位置处,持续按就一直往下找。 底行模式下,有时候wq可能无法正确实现功能,后面加上!即可强制进行,比如w! q! wq!。
退出后我们可以通过gcc编译然后./a.out执行。如果在vim里面进行编译,那么在底行模式下,也可以输入在外面输入的内容,编译:!gcc test.c, 实现代码:!./a.out。
如果想整体替换某些内容,在底行模式输入%s/原本内容/替换内容/g,g代表全部。
在之前写C语言时,我们经常用到头文件,源文件,在vim里也可以这样。底行模式下,vs 后面跟上一个文件,vim就会自动分屏,分成两个。当然继续创建文件还会分屏。分屏后,有两个区域,那么如何判断当前在哪里写代码?在分屏时,光标在哪里编写代码就在哪里。如果想编写另一个区域,也可以。这里写两个办法。按住ctrl,快速按两下w。这样我们就可以把一个文件的内容复制到另一个里。
创建多个文件后,如何退出文件?光标在哪里,那么进入底行模式后,如果不想保留文件,那么q就会退出这个文件,然后光标在移动到其他文件,继续退出。
结束。