04 Vim 移动、跳转与缩进
在上一节 “Vim 的模式中” 我们知道了在 Vim 中如何移动光标。其实除了 h,l,j,k 键之外还有两种操作可以让我们移动光标:
键 | 含义 |
---|---|
h | 左移 |
l | 右移 |
j | 下移 |
k | 上移 |
^/0 | 移动到行首 |
$ | 移动到行尾 |
以上就是Vim中光标移动最基础的快捷键。但是初学者可能会觉得很别扭。因为现在大家更加习惯于键盘上的上下左右键,这更符合现在人的思维。这里需要对此做个解释,便于大家更加能够理解 Vim。
1. Vim 的起源
Vim 布局起源:Vim 最初的作者 Bill Joy 使用的机器是 ADM-3A 终端机。这款机器相较于现在普遍 PC 来说就是个古董。如下图:
图片来源互联网既然是个古董,那么它的键盘布局也就自然不同于如今的 PC 了。可以看下它的具体键盘布局图如下:
图片来源互联网Tips:可以明显看到键盘上的上下左右键箭头所对应的是 H J K L 四个字母键,而不是像如今的键盘上的单独上下左右键。这里大家就应该理解为什么Vim光变移动使用的 H J K L 键了把。
2. Vim 基于字符移动
快捷键 | 含义 | 速记 |
---|---|---|
w/W | 正向移动到下一个词首 | word |
b/B | 反向移动到上一个词首 | back |
e/E | 正向移动到下一个词尾 | word end |
ge | 反向移动到上一个词尾 |
如果有些懵的话,可以看下图中的具体效果:
3. Vim 跳转
有时我们使用 Vim 打开某一个文件时只需要阅读某一特定位置就行,这个时候可以使用 Vim 的跳转快捷键来帮我们快速的定位需要阅读的位置:
Vim 跳转快捷方式:
快捷方式 | 功能 |
---|---|
ctrl+f/F | 跳转到下一页 |
ctrl+b/B | 跳转到上一页 |
ctrl+d/u | 向上或向下跳转半页 |
gg | 跳转到文件第一行 |
G | 跳转到文件最后一行 |
<行数>gg/G | 跳转到指定行数,例如 12gg或者12G 代表跳转到 12 行 |
{g}+Ctrl-g/G | 查看文件信息。 |
4. Vim 缩进
每种语言开发中都会又缩进的硬性(Python)或者软性要求。一般来说通过 Vimrc 写到配置中,这样不必要每次手动缩进。但是有时候可能需要非常规的缩进。这时候就需要手动操作缩进了,可以针对单行或者多行甚至块。
快捷键 | 含义 |
---|---|
>> / :> | 向右缩进 |
m,n> / :m>(n-m+1) | m到n行缩进 |
m>n | m行开始共n行缩进 |
5. Vim 移动高级特性——组合
以上的移动方式相对比较单一,但是 Vim 组合的思想和特性给予了 Vim 更加高效的方式。关于 Vim 的组合思想有一个公式:[count]+operator+[count]+motion
count:次数的意思,用于重复;
operator :操作方式就是增删改之类的。例如复制(y),删除(d)等;
motion :Vim help 中会有相应的解释。简单来说就是operator的操作对象。比如一个单词、句子或者移动的方向等。
Vim 中可以通过 help 帮助来查看 Vim 的功能说明,相当于一个说明书和Linux 中man一样。
可以看到 motion 意思就是移动光标的命令包括本文提到的单词移动或者光标移动都算是 motion 的一种。
那么我们还可以看到会有一个 count,这个是用于重复移动的次数的。应该是很容易理解比如:
快捷键 | |
---|---|
2w | 正向移动两个单词词首 |
2k | 向上移动两行 |
6. 小结
以上就是 Vim 移动跳转等内容的操作方式。尤其理解了 Vim motion 组合方式之后,会发现还是比较简单的。具体需要大家多加练习,熟能生巧即可。