我是这样⽤vim写代码的--基础篇
本⼈是从重度vs使⽤者经过⼤概半年的时间转变成的重度vim使⽤者。学习过程中也看过很多教程和经验,⼀开始只能机械的记住什么键对应什么功能,常⽤有哪些插件,别⼈的vimrc长啥样。很难理解为什么如此设计,vimrc⾥⾯为啥要设成那样,有什么好处。⼀直觉得针对vim新⼿,缺乏简明的介绍和解释的⽂章。本⽂会先简单介绍vim的基本操作以及vim的优势,然后根据⾃⼰的理解,介绍⼀些按键的作⽤,并尽可能说明为什么要⽤,为什么要这么做以及⼀些使⽤技巧。
在这之前,我是搞图形学,做游戏客户端的,因此最熟悉的是windows+vs组合环境。开始搞服务器后,坑爹了,公司的linux服务器只能远程命令⾏连接,⼀种选择是写⼀段同步⼀下,编译出错,再同步⼀下,极度浪费时间。于是常⽤⼯具开始转变为
windows+vs+linux+vim,直到现在虽然⼯作环境在windows下,常⽤编辑⼯具已经成了vim。
vim作为⼀个上⼿以后⾮常⾼效的编辑⼯具,即使平时主要使⽤IDE环境,也实在值得学习掌握,本⼈的vs也是常年使⽤vsvim插件,能有效提⾼编辑效率,减少键⿏切换。经常听到有的程序员敲键盘噼噼啪啪毫⽆停顿,⽽有的则是敲⼏下停⼀下再敲⼏下,显然前者的节奏很稳,听着⾮常带感。使⽤了vim后就可以做到⼿不离键盘,不⽤⿏标,持续稳定⾼能输出。其实那声⾳⼀定是在聊天啦。。。最终决定敲键盘的速度还是思考的时间。。。vim能带来的好处是,让双⼿更轻松,减少不必要的操作,⾄少不⽤成为⿏
标⼿了嘛。
vim的安装,mac/linux⾃带,初学⽤⾃带的就够了,先把基本功能都熟悉,再根据⾃⼰的需求安装特定编译的版本即可。windows下,请下载官⽅最新版本,有exe⽂件直接安装,总之⽬前vim的安装算是⾮常简单了,使⽤⼀般插件也不⽤⾃⼰编译安装。
⽇常编辑中最常⽤的就是光标的移动,vs等常见编辑器的移动是利⽤键盘的上下左右键以及⿏标点击移动光标。⽽vim不需要移动整个⼿掌以触及⽅向键或移动整个⼿腕去摸⿏标。vim有三种模式,normal,insert,visual,每种模式下键盘区域的按键功能都不⼀样,这样在有限的⼿指区域内,除了打字外,可以做更多的操作,更可以⾃定义很多快捷键来帮助⾃⼰做特殊的操作。有很多⽂章会介绍vim的键位,并且肯定⽐本⽂全⾯,这⾥本⽂只希望尽可能解释键位的含义和意图,理解或想象键位的全称或者设计意图⾮常重要,可以帮助⾃⼰更快的熟悉这些键位,当熟悉了⼤多数编辑⽅式后,就能得⼼应⼿,⽐普通编辑器⾼效了。
下⾯简单介绍下vim三个模式的概念,并着重介绍normal模式下的各种操作⽅式。
insert模式,就是正常的输⼊模式,可以正常打字,组合按键以及功能键还是可以使⽤⼀些快捷操作。
visual模式,字⾯理解视图模式,在normal模式下按下v即可进⼊,然后使⽤normal模式下的移动命令,
便可以选中⼤段⽂本,做后续操作了。常⽤的是按下v后,选中⼀段⽂字,进⾏复制(y)、剪切(d)、移动(<>)或者搜索等。另外按下ctrl-v,也可以进⼊批量编辑,这是个较⾼级的编辑,不太常⽤,不多说。
normal模式,vim最常⽤的且区别于多数编辑器的模式,有的叫命令模式,也可以叫编辑模式,在该模式下,键盘整个是⼀套编辑按键。在insert或者visual模式下,按esc键(⼿⼩觉得esc也太远的,可以改成更⽅便摸到的键,⽐如';;')即可进⼊normal模式。这⾥介绍⼀下常⽤的键位和命令,⽇常编辑中只⽤到⼀些常⽤键位就够了。⼀些⾼级编辑技巧,⽇常使⽤很少,笨拙的⽅式也能完成,没必要花太多时间研究,当然出于研究vim为⽬的就另当别论了,毕竟vs也是有很多神奇的快捷键的嘛。
⽂件的基本操作
⽂件最基本的操作就是打开、关闭和保存了,这些都依赖vim内的命令⾏,normal模式下输⼊冒号 ':' 紧跟命令:
:new在新窗⼝新建⼀个⽂件
:tabnew在新tab中新建⽂件
:e filepath编辑指定⽂件(edit),没有则新建vim编辑器下载与安装
:q 不保存退出(quit),⽂件发⽣更改会提⽰,加叹号!表⽰强制退出,放弃更改
:w保存当前⽂件(write)
编辑中的移动操作
h/j/k/l依次对应向左下上右移动,设计上正好在标准⼿势的右⼿⼿指下(标准⼿势很重要啊),习惯以后,⼿指微⼩的移动就能移动光标,⾮常⽅便。
w/b w可以理解为word,意为向前(右)⼀个单词,单词会被符号隔开,不仅仅是空格;b可以理解为back,向后(左)⼀个单词。
ctrl-d/ctrl-u/ctrl-f/ctrl-b依次对应向下翻半页(down),向上翻半页(up),向下翻整页(forward),向上翻整页(back),前⾯我们已经看到单个按键b已经有别的⽤处了,因此翻页这种操作就加⼀个ctrl组合键啦。另外可能很多⼈习惯了ctrl-f是搜索,⽐如我。。。所以我就放弃了向下翻整页,把它改成了搜索,所有快捷键都是可以⾃定义覆盖的。如此⿏标滚轮可以抠掉了,滚动条也可以隐藏掉了(因为vim状态栏有显⽰当前位置,因此可以不依赖滚动条观察当前位置,可以省出更多空间看代码呢。个⼈为了美观⽽隐藏。。。匿。。。)
^/$/gg/G移动到⾏⾸(shift+6),⾏尾(shift+4),⽂件头(按两下g),⽂件尾(shift+g)。这⾥^和$正是正则
表达式的头和尾的表⽰字母了。g我的理解是global,全⽂的头和尾,欢迎提出更好的见解。。。
实际编辑中,我们经常想移动的不仅仅是⼀个字或者⼀个单词,可能是多个,这时只要先按下数字再按相应的按键即可。⽐如往右移3个字(3l),或者往右移3个单词(3w)。甚⾄往右或往左移到下⼀个指定字母,需要⽤到前置的forward按键f和shift-f,⽐如往右移到下⼀个字母 'a' (fa),往左移到下⼀个字母 'a' (Fa)。习惯后,会明显⽐⿏标点中某个单词,或者狂按上下左右键⾼效的多。
另外还有⼀个⼩问题很多⼈会遇到的,如果⼀⾏的⽂字⾮常多,导致分了好⼏⾏显⽰,此时想在⾥⾯往下往上移动怎么办呢?
ctrl-j/ctrl-k⾏内向下和向上移动,没有为什么。。。单个按键被⽤掉了啊。。。
关于移动⼤概讲这么多,熟练后单窗⼝的编辑移动基本够⽤了,关键是要善于组合使⽤各种移动操作,才能以最⾼效简单的⽅式完成精准的移动。
复制剪切和粘贴
接下来就是编程最重要的神操作了,恩。。。
ctrl-c 好吧,并不是想象中的复制。。。是⼀个中断操作,平时基本⽤不到,提⽰,不要习惯性去按它。。。
yw/yb/yy复制当前单词右侧部分(按⼀下y再按⼀下w),复制当前单词左侧部分,复制当前⾏(按两下y),y是前置键(yank,可以理解为激活复制),紧跟着表⽰要复制哪⼀部分。注意y前⾯还可以加数字,表⽰操作⼏次,⽐如3yw,就会复制3个单词。我就想复制整个单词咋办?要习惯多使⽤w和b,另外还有⼀种⽅便的选中整个单词的⽅式viw(visual+inner word)。
p/shift-p粘贴到光标之后,粘贴到光标之前。由于normal模式下,光标是位于⼀个字下的,所以贴到前⾯和后⾯是不⼀样的,熟练后也不会被困扰。⼀样,可以3p,这样就连续粘贴3次了呢。
学会以上技能,就再也不⽤⿏标选⼀坨,然后ctrl-c/ctrl-v了;写着写着有想复制的函数名,esc退出到normal模式,按yw,然后hjkl或者ctrl-o直接返回之前正在输⼊的地⽅,按下p,完成。整个过程⽆需任何停顿,只需稍动下⼿指。
dw/db/dd 有复制肯定也要有剪切了,d(delete) 与y相对,是剪切的前置键。这⾥就是剪切⼀个单词,剪切整⾏。
D 剪切当前到⾏尾的所有字符,这个操作也很实⽤,复制粘贴⼀下,把后⾯原来的都删掉。
x单个字剪切,毕竟常⽤的ctrl-x是剪切。
上⾯都是⼩范围的复制粘贴操作,如果我们要复制⼀⼤段⽂本,就要⽤到上⽂提到的visual模式了。按
v进⼊visual模式,然后运⽤上⽂的移动命令,会发现移过的位置都成了选中状态,此后按下y,整段⽂字即被复制,再到要粘贴的地⽅粘贴即可。⽐如要复制从当前位置到⽂本最后,那就vGy,然后到要粘贴的地⽅p,整段⽂字粘贴完,完全不需要⿏标点着按滚轮。
搜索和替换
说完复制粘贴,还有⼀个⽐较重要的操作是搜索和替换。编程所需要的搜索其实更多的是跳到定义等较⾼阶的搜索,⽐较依赖插件。但是对于⼀些脚本语⾔以及⽂件内搜索,⽂本搜索还是很实⽤的。这⾥也简单介绍下。
#/* 向上搜索当前单词,向下搜索当前单词,这两个是最⽅便的⽂件内搜索,如果开了多个窗⼝,窗⼝间是可以共同看到⾼亮结果的。加⼀个前置命令g,也可以理解为global,范围更⼴,只要包含该单词的字符串都可以被搜索到。
n/N跳到下⼀个搜索结果(next),跳到上⼀个搜索结果(可以注意到,很多⼤写都是反向操作)
⽐如当前光标所在的单词是word,要搜索别的word,就按下shift-8,即可跳到第⼀个结果,再按n/N即可依次跳到所有结果,或者回到上⼀个结果。但是有的时候需要搜索的不只是⼀个单词啊,可能是⼀个指定的字符串啊,normal模式下,按下 '/' 即可在底下命令⾏⾥输⼊要搜索的内容,之后还是按n/N。
有的时候还要搜索正则表达式啊。。。按下 '/' 后是可以搜正则表达式的,要加反斜杠,不常⽤,⽤到再看。这⾥还有⼀个⼩技巧,按下 '/' 后,ctrl-r + ctrl-w 即可在命令⾏粘贴光标所在单词。
再说替换,替换是需要使⽤vim的内置命令的,在normal模式下,输⼊ ':' 即可在命令⾏中键⼊命令。替换的命令是:s(substitute),举两个例⼦说明:
:s/word/newword/g当前⾏的word替换为newword,g代表所有出现的都替换,不加g则只替换第⼀次出现的
:%s/word/newword/g全⽂的word替换为newword,%代表全⽂
⽇常替换也够了,当然装了插件后有更⾼端⽅便的查和替换,不在本⽂基础范围了。
⼏个实⽤键位
以下介绍⼏个实⽤键位,后续想到再补充。
shift-j合并当前⾏与下⼀⾏,编辑中常常写了多⾏想合并成⼀⾏,特别是某个分⽀语句,写完发现只要⼀⾏,⼀个快捷键搞定,不⽤删很
多空格。。。
(/)/shift-% 既然是写代码,段落的概念肯定是很重要的,左右括号可以在向下和向上跳到下⼀个空⾏。shift-%可以帮助在代码块成对的开头和结尾之间来回跳,帮助观察代码段落和编辑。⽐如两个成对的括号之间,lua代码的function和end之间,代码块很长的if-else-end之间。
</> 左右尖括号,⽤于代码缩进,往左或往右缩进⼀个tab位。按v进⼊visual模式,选中⼀⼤段,即可实现⼤段的缩进。当然装了插件针对特定语⾔还有更智能的缩进⽅法。这⾥是最基本的缩进键。
ctrl-i/ctrl-o 前进和后退,个⼈把这俩快捷键理解为in和out,便于记忆,写代码经常需要在代码之间跳来跳去,这时回到上⼀次编辑的地⽅,如果⽤⿏标就要⽂件了,那是相当⿇烦,使⽤这两个快捷键,基本上来回切换就是瞬间的事。相当于vs的ctrl--和shift-ctrl--。
以上应该是vim编辑最常⽤的键位和命令了,熟练掌握以上键位,快速⽅便的编辑就基本达成了。
关于vim的基础就说这么多,相信使⽤以上编辑⽅式已经⽐txt⾼效很多,当然相⽐vs还缺乏了很多跳转、多窗⼝、调试等功能。关于vim 的窗⼝切换,vimrc设置,插件等,后续会单独介绍,从⽽真正实现⾼效的代码编辑和调试。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论