Vim 真的那么难吗?

如果玩过知乎都会被那些大 V 洗脑说 Vim 好用,Vim 牛逼,也是因为这个原因才开始用 Vim 的,也想着总有一天会变成 Vim 高级玩家。

那这篇文章会教你怎么用 Vim 么?会,但是我不想像官方手册去说,只想提供一个学习 Vim 的学习方法和基本的指令。我更希望这篇文章做到的是 “授人以渔”。我不想写这种像 Vim 官方手册那种文章,因为复制粘贴所有指令过来,你也不会记多少的,更不会记住。

使用场景

在说基本指令前,我想说下我现在是怎么用 Vim 的。现在网上有很多文章都是教你怎么配置好一个好看的 Vim 环境,装各种 Plugin,主题,配色什么的。我在 Mac 上也装过,像下面这样的。

有高亮么?有。有自动补全么?有。好用么?不好用,难用得一B。当然如果用 SSH 你可以在服务器搞成这个样子,毕竟服务器只能用命令行嘛。

所以现在我的编程环境都是 JetBarins IDE + Vim Emulator。

可以在 Tool 下可以打开 Vim 模拟器。

我希望入门 Vim 的人,除非你在服务器上工作,否则不要用命令行或者 Vim 的编辑器,因为舒服地开发才是王道。那 Vim 不舒服呀,不,有了 Vim 再加上 JetBrains 的提供的 IDE 会让效率更快,可以基本不怎么用触控板了。

模式

Vim 模拟器开启后你可能会遇到下面几种模式:

Normal 模式:开启 Vim 模拟器后立马进入的模式。在这个模式下我们可以输入指令(后面会说)来插入,删除,移动,或者做其它操作。

Insert 模式:Normal 模式下按 i 就可以进入 Insert 模式,也就是没有 Vim 模拟器时候的样子,一般这个模式下就是纯写代码啦。

Visual 模式:Normal 模式下按 v 或者 V 就可以进入 Visual 模式,这个时候可以让你选中代码。

为什么会有这么多的模式呢?直接写代码,或者说只要 Insert 模式不就好了?想象一下,如果你没有鼠标,你怎么去选中代码块呢?所以有了 Visual 模式,然后正常的想法应该是我按某个键就可以通过按上下左右来选中了吧?但是如果只有 Insert 模式,你按这个键只是相当于在写代码,所以要一个 Normal 模式来告诉 Vim 现在我不是在写代码,我在做别的事(选中,删除等)。

基本指令

这些指令都是常用的,不常用的一般用不到,用到了再查就好了,不用去纠结要不要学完所有指令,背好再去用。因为,等你背好了你还是不会用,而且发现直接用上的人早就玩顺那些基本指令了。

上下左右

Normal, Visual 模式下

上:j
下:k
左:h
右:l

怎么记:

左右容易记,因为 h 在最左边,l 在最右边。

上下也容易记,因为 j 键下面有个突出的地方用来标记键盘位置的,而这个突出的东西是在下面的,所以向下,那么 k 就是向上了。然后每次将手指放在 j 键上的时候直接放在突出的地方,而放在 k 键上的手指可以稍微往上一点,这样就可以暗示自己哪个键是上,哪个键是下了。

不过用多了就记住了。

这里要说的是有些人会教你 3j 是向上 3 行,4h 就是向左移 4 个字符,但是我觉得真实情况用的不多,留个印象就好了。

快速移动

Normal,Visual 模式下,假如现在有句子,"I love you",现在光标在 o 上。

a: 在该字符后面 append,"o" 光标移到 o 后面并进入 Insert 模式
i:在该字符前面 insert,"o" 光标移动 o 前面并进入 Insert 模式
A: 在该行最后面 append,光标移动到 "u" 后面并进入 Insert 模式
I: 在该行最前面 insert,光标移动到 "I" 前面并进入 Insert 模式
w: 指的是跳过一个单词,光标移动到下一个单词开头的位置,这里会移动到 "y"
b: 指的是跳到该单词最前面,这里会移动到 "l"
G: 跳到整个文件的最后一行
gg: 跳到整个文件的最开始一行

ctrl + d: 向下翻半页
ctrl + u: 向上翻半页

当然还有翻整页的,但是我觉得用不到,因为真实翻页会翻得头都晕了。这也是我为什么推荐 IDE 的原因,因为翻页的时候图形界面才是有优势的。但是代码之间的移动键盘才是有优势的,因为不用鼠标去精准定位。

删除

dd: 删除一行
D: 从光标的地方直接删掉整行,现在就会剩下 "I l","o" 之后包括 "o" 都会删掉。

dit: 上面的 Hello 会被删掉,这个指令的意思就是删除标签里的东西
di什么东西: 意思就是 delete in 什么东西,比如 "Hello",这里 di" 就表示删除在 " 里的东西,再如 {Hello}di{ 就表示删除在 {} 里的东西。所以这个指令可以对很多种括号进行组合。

  • di<
  • di"
  • di'
  • di{
  • di(
    ...

dt什么东西:意思就是 delete to 什么东西,从光标这个位置一直删除到指定的那个字符,如上面可以 dt< 就表示从 "l" 开始删除,直到遇到 "<" 字符。

将上面的 d 换成 c 也是可以的,不同的是做完删除操作后会进入 Insert 模式。

选中

v: 选中这个字符,然后可以通过 hjkl (前面的上下左右),来扩大选中区域。
V: 选中当前行,然后可以通过 hjkl (前面的上下左右),来扩大选中区域。

复制粘贴

y: 复制选中的代码
p: 粘贴最后一次删除后或者复制后的代码

Tips

别的指令呢

别的操作完全可以用 IDE 来完成,比如搜索,撤销等。因为我觉得用 JetBrains IDE 的话这些功能比 Vim 强大得太多了,完全没必要去用 Vim。

上下左右好烦

是的,会很烦,但是用熟了会快。注意这里的快是相对的,比如你要找文件中间的某一行就一直 jkhl 来跳转到那吧。所以,我一般的做法是先触控板翻到大概的位置,再用快速移动的指令去往要修改的地方。这里的快是因为不用触控板去精准定位,用键盘来精准定位会快些,仅此而已。

就这些指令

对,就这些就够了,等入门了之后用到了别的指令再去查就是了,先用起来再说,不要总想着学好了,背好了再去用。不功利地学习都不是学习,记住也很快会忘。

NeoVim, SpaceVim, Emacs

学 Vim 就学 Vim,不要去管别的,学那么多不如熟悉一个有用。

一些想法

上面都是我学 Vim 的时候走过的一些弯路,以前总喜欢折腾各种编辑器,IDE,像 Sublime, VS Code, Atom, WebStorm, notepad++ 等等。最终还是回归 JetBarins 全家桶,再配上 Vim 模拟器。

折腾过后其实才发现知乎上面说的,JetBrains 市场如何,VSCode 要打败哪个编辑器什么的都很幼稚,都是为了装 B 而已。没有一款最好用的 IDE 或者编辑器,只有一款最合适自己的。不同场合下应该用不一样的,而不是总想着去找编辑器里的 “银弹”。

对于我的话,写项目一般用 WebStorm,简单的代码小操作就用 VSCode。其实最后还是觉得要那么酷炫的主题都没用,一个好的代码提示和代码分析器真的可以让你不用操那么多的心,所以这也是为什么我推荐用 JetBrains 的原因。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 自我总结篇: 对文件的操作技巧: vim文件一个有三种状态:命令(浏览/输入命令转变末行模式),文本(添加/编辑/...
    小知大知阅读 771评论 0 0
  • 在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可...
    三十儿阅读 399评论 0 1
  • 本文摘自https://www.cnblogs.com/yangjig/p/6014198.html 感谢原作者的...
    荣子3507阅读 309评论 1 0
  • 光标移动 h 光标左移,同 <Left> 键j ...
    guanguans阅读 1,806评论 0 16
  • https://www.cnblogs.com/qiumingcheng/p/6275510.html ctrl ...
    shuff1e阅读 5,350评论 0 3