vim 从嫌弃到依赖(13)——motion 进阶
在最开始的时候我们介绍了一些vim中的motion
包括如何在字符间、单词间、行间以及多行间移动。·但是motion
中的内容可远不止我们介绍的这些,平时用到的也远不止之间介绍的那些。
之所以没有一次介绍完,主要是不想搞那么复杂,一次性全都介绍完那么篇幅会显得很长,而且显的很复杂。vim入门最重要的一步就是用起来,如果初学者因为看到入门类的文章出现一堆不知道什么意思的操作命令,肯定会被吓跑的,也就无法体会到vim的魅力了。像这种进阶类的内容我想将它们放到后面,等各位小伙伴能熟练使用vim完成编辑任务之后再来考虑通过进阶内容进一步提高使用效率。
vim屏幕行与实际行
vim中有一个wrap
设置,表示一行文本超过多少行就会自动折行,这样就不会出现在一个屏幕上显示不全的问题了。在最开始配置neovim
的基础配置的时候已经展示过该如何启用wrap
设置,这里就不再演示了
在启用自动折行的设置后,如果一行文本字符数超过设置的值会自动折行。在屏幕上显示为多行。当我们开启了显示行号的设置之后很容易区分。实际行在vim中只显示一个行号,而在屏幕上会显示多行。
我们知道行间移动使用的是j、k
, 他们是在实际行之间移动,如果想要在屏幕行间移动,可以使用 gj、gk
。一般针对行相关的操作,只需要在前面加上g
就可以改成在屏幕行之间的操作。例如g0
是移动光标到屏幕行行首。g$
移动到屏幕行行尾。他们与普通的行移动motion
用法类似,即可以配合数字表示重复,也可以配合operator
来执行相应的操作。
单词与字串
在vim中一个单词由字母、数字、下划线或者其他非空白字符组成,单词间以空白字符分割。而字串是由非空白字符序列组成。这个感觉可能很抽象,但是多多联系和尝试应该就很容易明白了。
字串间的移动使用大写的W
, B
。下面来看一个例子
e.g. there's a nvim config file in "~/.config/nvim/init.lua"
我自己总结如下:
- 区别单词应该以字母、数字、其他非空白字符进行分类
- 字串仅仅以空白字符为区分
- 同一类型的字符序列组成的部分作为一个单词。
例如上述句子由字母、空白字符和其他非空白字符(. ' ~ /
)组成, e.g.
后面是一个空白字符,因此它被划分为一个字串,而它自身经历了字母、非空字符、字母、非空字符的序列,所以vim将他们划分为了4个单词。
如果这样比较麻烦,那就简单的记住:字串比单词要长,不需要细粒度的移动,可以用字串间移动。
本次就说到这里了,各位可以配合一下最开始的几篇文章,配合使用,巩固一下motion相关使用。