本人是从重度vs使用者通过大概半年的时间转变成的重度vim使用者。学习过程当中也看过不少教程和经验,一开始只能机械的记住什么键对应什么功能,经常使用有哪些插件,别人的vimrc长啥样。很难理解为何如此设计,vimrc里面为啥要设成那样,有什么好处。一直以为针对vim新手,缺少简明的介绍和解释的文章。本文会先简单介绍vim的基本操做以及vim的优点,而后根据本身的理解,介绍一些按键的做用,并尽量说明为何要用,为何要这么作以及一些使用技巧。linux
在这以前,我是搞图形学,作游戏客户端的,所以最熟悉的是windows+vs组合环境。开始搞服务器后,坑爹了,公司的linux服务器只能远程命令行链接,一种选择是写一段同步一下,编译出错,再同步一下,极度浪费时间。因而经常使用工具开始转变为windows+vs+linux+vim,直到如今虽然工做环境在windows下,经常使用编辑工具已经成了vim。git
vim做为一个上手之后很是高效的编辑工具,即便平时主要使用IDE环境,也实在值得学习掌握,本人的vs也是常年使用vsvim插件,能有效提升编辑效率,减小键鼠切换。常常听到有的程序员敲键盘噼噼啪啪毫无停顿,而有的则是敲几下停一下再敲几下,显然前者的节奏很稳,听着很是带感。使用了vim后就能够作到手不离键盘,不用鼠标,持续稳定高能输出。其实那声音必定是在聊天啦。。。最终决定敲键盘的速度仍是思考的时间。。。vim能带来的好处是,让双手更轻松,减小没必要要的操做,至少不用成为鼠标手了嘛。程序员
vim的安装,mac/linux自带,初学用自带的就够了,先把基本功能都熟悉,再根据本身的需求安装特定编译的版本便可。windows下,请下载官方最新版本,有exe文件直接安装,总之目前vim的安装算是很是简单了,使用通常插件也不用本身编译安装。github
github vim windows官方版本地址:https://github.com/vim/vim-win32-installer/releases正则表达式
平常编辑中最经常使用的就是光标的移动,vs等常见编辑器的移动是利用键盘的上下左右键以及鼠标点击移动光标。而vim不须要移动整个手掌以触及方向键或移动整个手腕去摸鼠标。vim有三种模式,normal,insert,visual,每种模式下键盘区域的按键功能都不同,这样在有限的手指区域内,除了打字外,能够作更多的操做,更能够自定义不少快捷键来帮助本身作特殊的操做。有不少文章会介绍vim的键位,而且确定比本文全面,这里本文只但愿尽量解释键位的含义和意图,理解或想象键位的全称或者设计意图很是重要,能够帮助本身更快的熟悉这些键位,当熟悉了大多数编辑方式后,就能驾轻就熟,比普通编辑器高效了。编程
下面简单介绍下vim三个模式的概念,并着重介绍normal模式下的各类操做方式。vim
insert模式,就是正常的输入模式,能够正常打字,组合按键以及功能键仍是可使用一些快捷操做。windows
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),没有则新建
: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设置,插件等,后续会单独介绍,从而真正实现高效的代码编辑和调试。