Vim 初探

都说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 条评论
登录 后参与评论

相关文章

来自专栏大数据学习笔记

sed命令实例

sed命令行格式为: sed [-nefri] 'command 输入文本 常用选项: - -n∶使用安静(silent)模式。在一般 sed 的用法中,...

1819
来自专栏生信技能树

【直播】我的基因组70:比对文件并不能完美的还原出测序文件

前面我们说到过可以用软件或者自己写脚本从已经比对到参考基因组的sam/bam格式文件提取出原始的测序fastq文件。 但是我在IGV里面检查bam文件的时候发现...

3217
来自专栏北京马哥教育

Python在自动化运维时经常会用到的方法

本文由马哥教育Python自动化实战班6期学员推荐,转载自互联网,作者为seed,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛苦贡献与付出。 随着信...

3288
来自专栏我的博客

C文件输入与输出

1.fopen版本 FILE *fin,*fout; fin = fopen(“Joyous.in”, “rb”); fout = fopen(“Joyou...

2594
来自专栏北京马哥教育

经典!Python运维中常用的几十个Python运维脚本

本文由马哥教育Python自动化实战班4期学员推荐,转载自互联网,作者为mark,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛苦贡献与付出。 fil...

3024
来自专栏kalifaの日々

前端绘图:js-sequence-diagrams安装及入门

1.js-sequence-diagrams的作用 将简单的文本行绘制成手绘风(或是简单的直线条)的流程图。优点是不需要复杂的数据结构。 ---- 这次做一个数...

3409
来自专栏容器云生态

shell脚本实例

'使用sed 去除以空格开头的行,第一个sort进行整理输出,uniq -c进行统计,sort -rn进行从大到小排列 # cat cat.ip | awk -...

2226
来自专栏猿人谷

使用bash编写Linux shell脚本--复合命令

除了最简单的脚本,你很少想要执行每一个命令。执行一组命令或者重复执行一组命令若干次比执行单个命令更加有助。复合命令是将命令封装在一组其他命令中。 从可读性来说,...

27310
来自专栏深度学习之tensorflow实战篇

交互式使用 R题(shell)

交互式使用 R 交互式shell是一种很方便的环境,可以进行各种尝试,随时调整过程。与Python、Ruby等语言一样,R也提供了shell环境。本文开始的例子...

2995
来自专栏小樱的经验随笔

GMP大法教你重新做人(从入门到实战)

一、引言   GMP(The GNU Multiple Precision Arithmetic Library)又叫GNU多精度算术库,是一个提供了很多操作高...

2546

扫码关注云+社区