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

相关文章

来自专栏一个会写诗的程序员的博客

前端布局单位选择之 rem

进行布局的话建议用less去写,因为less中可以用变量,这样我们可以省去频繁用计算器的时间了。

891
来自专栏工作积累

Android获取QQ和微信的聊天记录,并保存到数据库

(该方法只适用于监控自己拥有的微信或者QQ ,无法监控或者盗取其他人的聊天记录。本文只写了如何获取聊天记录,服务器落地程序并不复杂,不做赘述。写的仓促,有错别字...

3.8K12
来自专栏ThoughtWorks

秒懂ReactJS | TW洞见

今日洞见 文章作者/配图来自ThoughtWorks:贾朝阳。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网...

35410
来自专栏Python攻城狮

Spider与OpenPyXL的结合1.OpenPyXL基础操作操作数据保存到文件2.爬虫与OpenPyXL的结合(爬取前程无忧网站招聘数据,存储Excel表格中)使用同样的分析方法爬取智联招聘岗位信

通过上述的语句,将返回在A4处的单元格,如果不存在将在A4新建一个。 单元格的值也可以直接赋值

1651
来自专栏肖蕾的博客

第七章:游戏音效Audio接口简介Sound类及使用方法Music类以及使用方法

1.LibGdx提供的音频方式,有三种,但是游戏中主要使用两种,Sound Music 2.枪声,按键声,这些短促,播放频率高的可以使用Sound实现。 3...

1142
来自专栏前端桃园

30分钟精通React今年最劲爆的新特性——React Hooks

你还在为该使用无状态组件(Function)还是有状态组件(Class)而烦恼吗? ——拥有了hooks,你再也不需要写Class了,你的所有组件都将是Func...

662
来自专栏CRPER折腾记

CSS-Next : CSS预处理器简单写法的替代者, 想了解下么?

借助相关的插件我们可以把新的特性降级到 css3乃至一些特性降级到css2.1...无缝过渡

952
来自专栏IMWeb前端团队

Object.observe简介

Object.observe 是一个提供数据监视的API,在chrome中已经可以使用。是 ECMAScript 7 的一个提案规范,官方建议的是...

1957
来自专栏闰土大叔

如何解释vue的生命周期才能令面试官满意?

当面试官问:“谈谈你对vue的生命周期的理解”,听到这句话你是不是心里暗自窃喜:这也太容易了吧,不就是beforeCreate、created、beforeMo...

3295
来自专栏叁金大数据

自学Python七 爬虫实战一

  此文承接上文,让我们写一个简简单单的爬虫,循序而渐进不是吗?此次进行的练习是爬取前5页什么值得买网站中的白菜价包邮信息。包括名称,价格,推荐人,时间。

1151

扫码关注云+社区