刘志龙

8个月前
  • 900

    浏览
  • 0

    评论
  • 0

    收藏

Vim 初探

本文作者:imweb 刘志龙 原文出处:imweb社区 未经同意,禁止转载

都说Vim是编辑器之神,一直也觉得vim的编码非常酷炫~

但是作为一个编辑器之神, 却一直保持着一个非常高傲的姿态,不像打开一个记事本,一个智商正常的人瞬间就能明白记事本怎么用,但是打开vim就算是天才自己慢慢琢磨估计一会。

那么,vim学习曲线这么大,我们为啥还要用vim?

为啥要玩Vim

  • 酷!Vim的前身Vi的作者Bill Joy和Emacs的作者Richard Stallman 都是那个时代著名的黑客,想不想像黑客一样去编程?
  • 使用sublime或其他大时候有没有发现自己的右手花了大量时间在键盘和鼠标间移动,这个过程其实是非常浪费时间和容易让手疲惫的过程。
  • 领悟到Vim的精髓的时候会发现Vim非常高效,只有你想不到,没有Vim做不到。
  • 如果你用macbook,作为一个前端基本必备的两屏是:浏览器和终端。而Vim跟终端完美的融合了。

模式

  • 命令行模式:想想普通编辑器的复制粘贴,命令行模式可以理解为一个快速运行各种命令的模式,按esc键进入。
  • 插入模式:这是大家最熟悉的了,这时的Vim相当于普通编辑器,按i进入。
  • 选择模式:这个模式中,可以用光标键高亮选择文本,这篇文章先不细讲。
`ESC`  - 切换到命令模式
`i` - 切换到插入模式

普通编辑器的切换

看过一个简短的笑话:vi是个非常好用的编辑器,我已经用了两年了,因为我不知道如何退出它。

想想一个记事本的功能:输入文字,用鼠标上下滚动,复制/粘贴,删除,打开/关闭文件,保存文件。要在Vim存活,最起码能把它用成像记事本一样。

`i` - 进入插入模式,我们就可以输入文字了
`hjkl` - 上下左右移动
`ctrl+u, ctrl+d` - 上下翻半页,这个比较常用,最基础的替代鼠标上下滚动
`yy, p` - 复制当前行/粘贴
`dd` - 删除当前行
`vim a.js` - 打开a.js
`:wq, :q!` - 保存并退出,退出不保存

了解了上面的命令,最起码我们从不了解Vim之神到把它用成了一个记事本水平啦。

快速的跳跃

想想在普通浏览器用鼠标经常做到的一个事情应该就是用鼠标把光标定位到特定的位置。没有了鼠标,如何把光标快速定位到特定的地方呢。

0 - 数字零,到行头
^ - 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
$ - 到本行行尾
g_ → 到本行最后一个不是blank字符的位置。
gg - 到第一行
G - 到最后一行
:N - 到第N行
NG - 到第N行
w - 到下一个单词
b - 到上一个单词
fa - 到当前行到下一个字符a,其他字符类似
Fa - 到当前行到上一个字符a
t, - 到逗号前的第一个字符。逗号可以变成其它字符。
* - 到下一个当前光标所在单词
# - 到上一个当前光标所在单词
% - 匹配{ 的对应 } ,像单引号等其它成对存在的也一样
/pattern - 搜索 pattern 的字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个)

初看上面的命令可能觉得非常复杂和麻烦,但是上面这些命令是远离鼠标所必须会的,没有了快速的跳转在Vim中可能陷入一片迷茫。

一些规律

数字

Vim中的数字使用非常普通,基本场景都是代表重复多少次的意思。比如:

3yy - 复制3行
3p - 粘贴3次
3fa - 跳转到当前行第三个字符a

上面只是一些简单的例子,基本上了解了命令,很大部分命令都支持 数字 + 命令 的组合。

大小写

大小写在很多场景都是相反命令的意思,了解了小写命令的含义,很多场景相反的含义就是该命令的大写。比如:

fa - 到当前行到下一个字符a,其他字符类似
Fa - 到当前行到上一个字符a
t, - 到逗号前的第一个字符(光标后)。逗号可以变成其它字符
T, - 到逗号后的第一个字符(光标前)。逗号可以变成其它字符

选中

命令 + a + 字符 或者 命令 + i + 字符是很实用的一个组合。 其中快速选中正是一个用这个组合的例子。

复制coolshell.cn某大大的一段例子。 假设你有一个字符串 (map (+) ("foo")).而光标键在第一个 o 的位置。

vi" - 会选择 foo.
va" - 会选择 "foo".
vi) - 会选择 "foo".
va) - 会选择("foo").
v2i) - 会选择 map (+) ("foo")
v2a) - 会选择 (map (+) ("foo"))

好吧,这篇文章就先到这里了。Vim的强大远非一篇文章所能说完,这篇文章也是起一个抛砖引玉的作用,希望能给到Vim初学者一点小小的帮助~

0 条评论