仓库源文站点原文


title: "重学 Vim" date: 2019-10-08T22:48:00+08:00 tags: ["vim"] draft: false

toc: true

引言

2013 年的时候我才开始接触 Vim,简单学了一下,也没用起来,后来只记得普通模式以及怎么进入插入模式,然后就是保存退出这几个命令了。

直到最近买了一个 HHKB 键盘以及发现使用 Vim 编码效率要高很多,所以我决定重拾 Vim,为了加强自己的记忆,于是我就整理了这篇文章。

<!--more-->

模式

这个是 Vim 区别普通编辑器的最大差别。Vim 有好几种模式,在不同的模式下可以干不同的事情。

普通模式

这个是 Vim 的默认模式,在这种模式下,你可以通过键盘移动光标,可以删除文字。

方向键

这几个是最常用的方向键盘,怎么记呢?除了记住『j 长得有点像 ↓』之外就是勤加练习了。

其他

插入模式

专门用来插入文字的模式,你可以把其他编辑器的默认模式理解为 Vim 的插入模式。

如何从普通模式进入插入模式?

除了以上命令我们还可以使用 c 命令进入插入模式:

如何回到普通模式?

Esc 键最方便。

可视模式

可以理解为选中模式,通过一些命令选中字符、行、块,再针对选中区域做操作。

普通模式和可视模式可以这样互相切换

相关命令

实际场景示例

更多可以参考下图,来源《VIM 学习笔记 文本对象(Text Objects)》

命令行模式

进入命令行模式之后我们可以执行一些命令对文本进行操作。

进入命令行模式

一些常用的命令

一些示例

移动光标

这个是非常常用的功能,在普通模式下我们除了使用 hjkl 移动外,我们还可以:

上面的 wbe 都有对应的大写 WBE,区别就是大写范围更大。小写范围是单词(word),大写范围是字串(WORD),区别:

另外在使用 fFtT 命令的时候,要注意:

动作

动作是指再普通模式下执行的一些行为,需要跟其他指令一起使用。最常用的有这些:

以上这些动作都可以用数字或者其他指令组合,一些示例:

宏录制

Vim 的录制宏是一个非常强大的功能,当我们需要对一些重复的操作进行批量处理的时候,可以使用宏来完成。比方说,我们需要下面每行文字都用双引号包起来,并且在结尾加上逗号

972ea750-3ff7-48a0-b7b9-9e07532765e
97303b94-e378-4c70-9cfe-9a2d1781b67
973085e8-0c6a-487a-8e95-5f217f79b39
963b60c9-a441-44cf-a7f0-eecda25bb50
96d3a702-ff06-42d5-996e-ab0349f4d3b
9736e7da-aaa1-4368-8a27-90442a13da0
9739b00e-caa5-4628-a870-5e71e1eefd6
973d3fd4-7a2b-4d75-8ba8-596856a0e8c
963b6240-e78a-41bf-9e84-601f7218535
969df9b8-4d30-4ada-9c04-276a3e11aed
9747ade0-efc3-466d-84f8-6fc51c212a6
9747c63e-59b2-4232-8518-658bb339bc4
9747c73b-a341-4bcd-b474-205fe3b5255
9747c7b5-fc70-4532-ab6c-31193c84447
9747c817-bad5-43d6-95cd-b13243cfd2a
9747cc8a-e236-4ea6-b38e-a3effe1b90b
9747d202-3332-40e0-b7c5-46626df88a8
9747dccf-6ef7-4fe8-9e31-74d69e0b8b8
9747ddf8-a243-4c5d-adf4-ad1c0879244

不用 Vim 宏录制功能的话,我一般用 Sublime Text 的批量选中(按住 Option 然后按住鼠标往下拉就能批量选中),然后批量操作来完成。

要处理的行数比较少,这种方式还挺快的。但是遇到要处理几百甚至几千行,这种方式就不太适合了。这时候就可以用 Vim 的宏录制功能来完成了。

宏录制的功能你可以理解为记录一系列按键操作,然后批量「播放」执行。

宏录制步骤:

宏使用步骤:

普通模式下 @ + a,这里的 a 是你之前保存的宏的名字,100 行的话,按一下 100@a 就可以了,依次类推。

实战

上面的需求,我们可以用下面的宏来完成:

配置 Vim

插件

安装插件有几种方式,我是使用的是 pathogen.vim 的方式,方法:

mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
vim ~/.vimrc

然后插入:

execute pathogen#infect()
syntax on
filetype plugin indent on

下面推荐几个插件

vim-abolish

转换单词,示例:

安装

cd ~/.vim/bundle
git clone git://github.com/tpope/vim-abolish.git

ybian/smartim

自动切换输入法,保证回到普通模式的时候是英文输入法。

安装

cd ~/.vim/bundle
git clone git@github.com:ybian/smartim.git
im-select

如果不是 com.apple.keylayout.US 就要修改设置:

vim ~/.vimrc

添加这行

let g:smartim_default = 'com.apple.keylayout.ABC'

最后

Vim 要了解 Vim 的哲学,学 Vim 带来的收益我认为是指数增长的,但是绝对是值得的,虽然现在很少有人直接在终端用 Vim 写代码,但是几乎所有的编辑器都可以开启 Vim 模式了。

《Vim 实用技巧 第二版》这本书我还没看完,所以本篇文章会持续更新。

参考链接