俗话说工欲善其事,必先利其器
,对于程序员来讲,若是要高效的编码,那么掌握某类文本编辑器的快捷键是很是有必要的(固然手速快打字快也算 😅)。 在文本编辑器领域内,vim
和emacs
是绕不过的两座高山,业内有一个说法是vim是编辑器之神,emacs是神的编辑器
,这句话大致是说 vim 在编辑器的操控基本是无敌的存在,而可以操控 emacs 的都是大神般的存在,网上面关于 emacs 有不少段子,好比使用 emacs 煮咖啡等,实际上 emacs 是能够外接 lisp 语言来开发,因此相对 vim 来讲能够作更多非文本编辑器的事情。git
学习任何一门技能都会存在学习曲线,不一样的技能学习曲线不尽相同,不过学习 vim 的朋友,看着下面这个 90° 的学习曲线,可能须要喝杯 82 年的咖啡压压惊 😂。 程序员
任何敌人都是纸老虎
,因此咱们对于学习 vim 在作好充分心理准备的状况下,也不必太打消本身的信心,小时候咱们学卖油翁时也学过最朴素的道理:
无他,但手熟尔
,只要训练充分得当,咱们也能够像卖油翁将油轻松倒过铜钱般掌握好 vim,因此,咱们作好了玩 hard 模式的心理准备就能够上路啦。
要把玩 vim 首先要进入到 vim 的normal模式
,才能拿到它那把锋利的道具,进入normal
模式的方式有两个,一个是按住esc
键,一个是按住ctrl+[
键。github
玩过电脑游戏的朋友们应该都有这样的经历,须要控制游戏人物上下左右移动,通常是 wasd
,vim 也同样,假设咱们使用 vim 来阅读源码,这种场景通常会使用normal
模式,在normal模式
下对应上下左右的快捷键分别是kjhl
,这是使用 vim 时最基本的快捷键,是否是特别容易?另外咱们在浏览代码时,下移一行的需求基本是最频繁的,因此这里猜想 vim 把j
键用做下移,另外j
键上有一个小突起特别适合快速起步,从这里看出 vim 的键设置实际上是很是人性化的。 chrome
不少时候咱们在写完第一版程序,作自我代码 review 时,常常会有删除一行或者多行的需求,若是咱们使用notepad
或者sublime
相似的文本编辑器,须要先选中多行而后按退格键作删除,在使用 vim 时,咱们只要保证咱们在normal
模式下,连续敲击dd
键,便可删除当前光标所处的行,d2d
便可删除当前行和其下一行,这样简单推理dnd
就能够删除从当前行往下的n-1
行啦,是否是很方便很简单?vim
在咱们阅读完代码,作了相应删除和编辑以后,最不能忘记的事情就是实时保存了,否则遇到断电或者系统崩溃就白瞎了,和其余编辑器使用meta+s
键保存不同,vim 须要进入命令行模式,进入命令模式的前提是处在normal
模式,在normal
模式下敲击:
,而后编辑器下方就会出现一个相似终端的小窗口,输入w
便可保存,若是想要保存后立马关闭当前文档,输入x
或者wq
便可。编辑器
这样咱们就完成了 vim 三步走,浏览-->编辑--->保存,怎么样,是否是就和玩了一个小游戏一局通常,看起来难度也没 90° 那么大嘛。ide
上面一节咱们讲了咱们平时使用文本编辑器的基本三步,如今咱们来看看 vim 为何被称为编辑器之神,它到底有哪些奇淫技巧,操做如此之强。函数
在通常文本编辑器中移动是一件很是痛苦的事情,好比上下左右这种最基本的移动,咱们要离开咱们的打字区域,手指跑到键盘的右下角按上下左右键来移动,这无疑会让咱们离开咱们咱们的温馨区。 可是,在 vim 的normal模式
下移动是一个很是有趣的事情,经过 vim 提供的预设快捷键,咱们能够在温馨区快速方便的移动,彻底停不下来。 在列出 vim 的移动快捷键以前,咱们先来普及一下几个基本的概念:学习
层次
:字母-->单词-->句子-->段落-->函数-->文档;首尾
:单词首部-->单词尾部-->行首-->行尾-->段落首部-->段落尾部-->文档首部-->文档尾部;与这些概念对应的在 vim 中移动的快捷键分别是:编码
上(k)下(j)左(h)右(l)
;w
),下一个单词尾部(e
),上一个单词头部(b
),上一个单词尾部(ge
);0
或者^
)、行尾($
);{
),段落尾部(}
);gg
),文档尾部(G
);删除单词以及以上层次通常是一个组合键:d+级别键
;
X
),删除光标后字符(x
);dw
),删除前一个单词(db
);dd
,删除当前行和下一行(dj
),删除当前行和上一行(dk
);d}
),删除光标前段落(d{
);dgg
),删除光标后文档(dG
);u
(undo);ctrl+r
(redo);y+级别键
(yank);p
和P
(paste);
动做+次数+方向
在熟悉了以上浏览和编辑的大部分快捷键后,使用 vim 的快速重复模式能够加速你的操做。 好比浏览代码时你想快速向下移动 4 行,删除时想快速向右删除 3 个单词,若是你只会上面的基础快捷键,那么你仍是得重复屡次,对于追求高效编码的你来讲,是不能接受的。 vim 提供了一套模式:动做+次数+方向
,其中动做
可选,对于刚刚的需求来讲,只须要使用4j
和d3w
便可完成需求,是否是很是快捷,快来试试吧!
通常咱们在定位问题时会使用搜索,在重构时会使用到替换。 vim 也提供了强大的搜索/替换功能,而且支持正则搜索和正则替换,灰常强大。 使用 vim 的搜索和替换,咱们须要从 vim 的normal
模式进入到命令模式,在normal
模式下按:
便可进入命令行模式。
/key
(向下搜索关键词 key)或者?key
(向上搜索关键词 key);%s/source/dest/g
或者1,10s/source/dest
,其中%s
表示全文替换,1,10s
表示只对 1-10 行作替换,source
表示被替换的单词,dest
表示要被替换的单词,g
表示该行若命中多个关键词则会都替换;morningking hello
都替换成hello morningking
,咱们须要敲入:%s/\(hello\) \(morningking\)/\2 \1/g
,这里使用到了正则里面的捕获分组,是否是很强大?vim 也提供了文件操做,如保存,退出,放弃,前提也是须要进入命令行模式。
w
;q
;q!
其中保存退出能够结合使用,如
wq
,固然也可使用快捷键x
一键保存退出
限于篇幅,以上列出了 vim 经常使用的高级特性,固然,vim 的高级特性远不止如此,好比还可使用宏、折叠、选择模式、分屏、书签、缓冲区等,不过因为不太经常使用,这里暂时先不一一列举,有兴趣你们能够浏览参阅里面包含的连接继续遨游;
相信你们若熟悉和高效的使用了 vim,必定会喜欢在本身习惯的软件里去寻找是否有 vim 插件,毕竟 vim 插件可让你的手指在温馨区快速切换,逼格闪闪。 下面给你们分享一下我平时使用的软件里面的 vim 插件: