无标题文章

学前须知

vim 是什么?

  1. vim 是人类目前已知的最好 [1]文本编辑器
  2. vim 是价值60亿美元的 文本编辑器
  3. vim 会成为你最后一个 文本编辑器,因为它是最好的

vim 的宗旨:

更好,
更强,
更快。

学习 vim 的建议步骤:

  1. 活下来
  2. 感到舒适
  3. 感到自己更好、更强、并且更快
  4. 成为 vim 超人

敬告学习者:

  1. 学习 vim 的过程是很痛苦的,但用起来棒极了
  2. 你先要学习最基本的生存技能,然后一点点地去探索奇技淫巧
  3. 就像学习乐器一样,你学习的最开始阶段会很痛苦
  4. 别指望在3天之内, ^in 3 days 把 vim 玩的比其它编辑器更好

开始学习

第一,活下来

  1. 安装 vim 下载地址 [2]
  2. 打开 vim
  3. 往下读

一个标准的编辑器应该具备这样的特点:在键盘上打点什么,然后屏幕上就出现什么。但是现在的 vim 不行,它还处于普通(Normal)模式。你需要按下字母 i 来进入插入(Insert)模式。
现在你应该感觉好多了,折腾半天,总算用上了 记事本 (还tm是没有保存、编辑的阉割版)。既然你这么想,请按下 ESC 键,让我们回到普通模式。
然后,你需要知道这几个东西:

  • i : 进入插入模式; ESC 返回普通模式
  • x : 删除当前(光标闪烁处)字符
  • :wq :保存并退出(:w 保存, :q 退出)
  • dd : 剪切当前行
  • p : 粘贴

这就是 vim 的最基本内容,不过你还是应该知道:

  • hjkl : 移动光标,等同于插入模式下的 ←↓↑→ [^j down]
  • :help <command> : <command> 的帮助文档,比如 :help i:help 收获完整帮助文档)

[^j down]: 为了记住这鬼东西,你要告诉自己 j 有点像

现在,你已经知道了最基本的生存技能,大概能顺利活着了。
什么时候你掌握好了(把这几个命令用得很自然,就像吃喝拉撒一般),就可以进入第二阶段了。(估计得费上几天功夫)

对了,得说几句帮助你理解普通模式:
你一定知道 Ctrl-c复制 ,这跟字母 c 本身几乎毫无关系(你非得说 c for copy 我也没办法)。这就好像一用了 Ctrl ,就改变这整个世界的原本意思。 vim 的普通模式,就相当于一直按着 Ctrl (或其它某些 非打印字符 键)进行各种处理。

最后还有点事儿:

  • <xxx> : 应依情景被替换的内容(内容类别由 xxx 指定),比如 <command> 就意味着此处应输入某命令, <text> 则代表文本
  • 所有以 : 开头的命令,结尾都默认要按下 Enter 键,比如 :q 其实意味着你要按下 :qEnter 3个键
  • 命令都要用 西文 输入,要 : 不要
  • : 打头的命令,你是看不见(它们的显示)的

第二,感到舒适

既然你活下来了,就有必要提高点生活质量,而非像一条狗 [3] 那样无奈、痛苦。

这里是更多的技巧 ^more skills ,值得记下来并进行尝试 [4]

1、进入插入模式的替换方案:
  • a : 在光标后的位置开始插入
  • o : 在光标后的一行开始插入
  • O : 在光标前的一行开始插入
  • cw : 把光标闪烁处到单词结尾处的东西删掉,然后插入

为进一步说明,假设现在处于普通模式,屏幕上有文本 word ,光标在 r 处闪烁,想输入 <text> 。[^new line]

为得到的效果 应选用的插入模式进入命令
wo<text>rd i
wor<text>d a
word\n<text> o
<text>\nword O
wo<text> cw

[^new line]: 你应该知道 \n代表换行(new line)

2、基本移动
  • 0 : 到达当前行的开头(相当于 Home 键)
  • ^ : 到达当前行开头第一个非空白类字符
  • $ : 到达当前行的结尾(相当于 End
  • g_ : 到达当前行结尾最后一个非空白类字符
  • /<pattern> : 查找 <pattern>,比如 /word 就是在查找 word 这个单词
3、复制粘贴
  • P : 在光标闪烁处之前粘贴( p 则是在之后)
  • yy : 复制当前行(相当于 ddpddP —— 剪切并粘贴)
4、撤销和重做
  • u : 撤销
  • Ctrl-r : 重做
5、打开、保存、退出和文档切换
  • :e <path/to/file> : 打开某路径下的文档
  • :w : 保存
  • :saveas <path/to/file> : 把当前文本保存到某路径下
  • :x / ZZ / :wq : 保存并退出当前文档
  • :q! : 退出并不保存当前文档( :qa! 退出所有打开的文档并不保存)
  • :bn / :bp :切换到下一个/上一个打开的文档

第三,感到自己更好、更强、并且更快

祝贺你走到了这里!现在要开始一些有趣的东西了。 [5]

首先,更好

来看看 vim 怎么体现机器的自我修养吧。 [6]

  1. . : 重复上一条指令
  2. N<command> : 重复做N次<command>

来看一些例子:

  • 2dd : 剪切当前2行(光标闪烁行及下一行)
  • 3p : 粘贴3次剪切板的文本

假设现在屏幕上显示:

line1
line2

而光标在 line1 那行,那么在普通模式下输入 2dd3p (注意你看不见这些非 : 开头的命令,别慌),文本就会变成:

line1
line2
line1
line2
line1
line2
  • 100iword <ESC> : 效果如下,千万别忘了最后按下 ESC 键,也别忘了那个空格
    word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

  • . :重复上面的命令,这里的话,就是再写100个 word

  • 3. : 再写3个 word(而非300个,多聪明的 vim 命令)

其次,更强

vim 一大优点就是,它能让你更有效地穿梭于文本之间。别跳过这节。

行间移动:
  1. NG : 到第N行
  2. gg : 到文本开头(相当于 1G
  3. G : 到文本结尾行
词间移动:
  1. w : 到下一个单词开头
  2. e : 到当前单词结尾
  3. W : 跳过最近的空白区,到下一个非空白字符
  4. E : 到最近空白区前的那个非空白字符

假设现在处于普通模式,屏幕上有文本:

The quick-brown* fox jumps over the lazy dog.

而光标在 u 上。那么:

输入的命令 光标会到达的位置
w -
e k
W f
E *
码农的“凌波微波”
  • % : 到达开括号处,适用于大中小三种括号
    比如普通模式下, 有文本 printf("foo"); ,光标位于 "foo") 的任意位置,按下 %, 都可以立马到达 ( 处。
  • * / # : 到当前单词出现的下一个/上一个位置

如果你不觉得 %*# 特别有用,只能说你不是码农,或者不是资深码农。

最后,更快

还记得上一阶段提到的基本移动吗?学习它的原因是,你会写大量的 <start position><command><end position> 样式的指令。
比如 0y$ 的作用是,从当前行的第一个字符,复制到这行的结尾; ye , 从光标处复制到这个单词结束; y2/word 复制了光标所在处和 word 第2次出现中间的文本。
能用于复制命令 y 的,自然也能用于剪切命令 d ,虚拟选择命令 v ,大写命令 gU , 小写命令 gu ,……这需要你去不断探索。

第四,成为 vim 超人

你现在应该能很爽地用 vim 了。不过接下来,才是 vim 真正的杀手锏。

1、 行内移动

你只需要小手一按,就能:

  • 0 : 到第0列去
  • ^ : 到第1个字符去
  • $ : 到-1列去
  • g_ : 到第-1个字符去
  • f<char> : 到光标后寻找某字符
  • , / ; : 到该字符出现的上一处/下一处去
  • Nf<char> : 到光标后某字符出现的第N处去
  • t<char> : 到光标后某字符前面的那个字符去
  • FT :和 ft 差不多,不过都是向找光标前找

假设在普通模式下,屏幕上有文本 x = fib(6 + 7); #this is a comment. ,光标在 b 处,那么:

命令 光标会到的位置
0 x 前的那个
^ x
$ . 再之后的那个
g_ .
fi this 的那个 i
2fi is 的那个 i
ti h
Fi fib 的那个 i
Ti b

结合这节和之前的东西,你会发现 dt<char> 能把从光标处到某字符之前的东西都剪切走。

tbc……


  1. emacs 笑哭

  2. 这基本是对 Windows 用户说的,类 Unix 系统一般自带 vi/vim

  3. 乍看起来,很多狗活得比人舒服。不过这里就当是借用了《大话西游》的那句“他好像一条狗”的意思吧

  4. 这可能会花上几天时间,而你的收获只是,学会了不用鼠标操作“记事本”。但不要着急,看看下一个阶段,然后你就会知道为什么 vim 值得你这样做

  5. 不过只涉及老 vi 编辑器已有的一些命令

  6. 那些大量的重复工作,就应该让机器做

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

推荐阅读更多精彩内容

  • [TOC] ##Assoc 显示或修改文件扩展名关联 Assoc [.Ext[=[Filetype]]] .Ex...
    btijjj阅读 336评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,219评论 0 4
  • 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。 启动vim 在命令...
    im蚂蚁阅读 30,735评论 3 48
  • vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下: v 从...
    壹首簡單的歌阅读 881评论 0 7
  • 饭后,爷爷给外公递上一支烟,两个人坐在桌角处闲话起来。我痴痴地坐在另一边,听他们讲人世浮沉,从小时候躲避土匪...
    PhilXiang阅读 232评论 0 1