Vim里面的g关键字的简单运用
最近鼓捣了不少Vim,假装业余爱好。既然一口吃不成胖子,先记一下简单的操作。发现g
用处挺多,稍微总结一下几个觉得值得记录的。
g
命令表示什么意思?
一开始我以为是go的缩写,但是读过API之后发现它其实想表达的意思是global的意思,也就是“全局”的意思。很多时候Vim的命令都很有英文的flow的感觉,但是有几个例子我想不出来想表达什么,比如下面要介绍的第一个。
我们需要在normal模式下面先按下g
键,再继续按下后续的motion进行操作。
g0
如果Vim里面已经设置了自动换行,一个很长的段落有可能只是一行内容换行显示出来的,如果我们用常规的光标上下移动就会跳到下一行,也就是下一段落里面去了。我们需要一个“视角窗口移动”。
g0
的意思就是跳转到跳转到视窗角度显现的行首。与其对应的我们常用的0
的意思为跳转到实际意义上的行首。
前面提到过g
表示global,所以g
后面再接一个0
就比较耐人寻味——它明明连一个行都没跳过,只是在行内跳转啊。
上面的就不细究了,举一反三,我们也可以进行如下操作:
gj
orgk
视窗行内上下移动g^
org$
视窗行内移到行首或行尾
gq
自动折叠长的行。
gu
or gU
+ 文本对象
u
或U
意思为小写或大写,顾名思义,是转换文本大小写的。比如:
gU3w
表示后面的三个字换成大写。英文flow就是"global to upper case for next 3 words."
gUfl
表示后面转换大写一直到发现一个字母l
(包括l
)。英文flow就是"global to upper case until finds a 'l'."(英语母语的人学这个肯定会少费劲很多)
guu
- 和dd
, yy
等等思路一样,guu
会把一行全部转换成小写。
g~
这个其实和上面的很类似,但还是单独拿出来吧。~
是切换光标下的字母大小写的(大写变小写,小写变大写),应该还算冷门的东西。
使用方法和上面的完全一样,g~3w
表示后面三个字颠倒大小写。
gf
如果光标在一个路径或者文件名上面,那么就会跳转到这个文件。我猜很多菜鸟如我不小心按到过这个键,不知道怎么返回——C-6
或^
会让你从哪来回哪去。
gv
跳回曾经选择的文本并切换成visual模式。
gJ
J
大写!这操作会让后面一行并入前一行。和没有g
的J
操作不同的是它不会添加一个空格。
g&
这个有点让我捉摸不透,g&
表示运行前面运行过的一个替换命令(:s/之类)到整个文件
g<
对我这种短期记忆稀烂只有七秒记忆的人来说是个福音,它会打印出来前一个命令输出内容(为何我总是会忘掉几秒前刚刚发生过的事情)。
gD
我自己的配置这个键位被某插件用了,源生里面还没试过。它的意思是跳转到光标下文字的定义声明处(go to the definition of the word)。
Vim这玩意确实可以鼓捣很多很多年,学习曲线太特么陡峭了,鼓捣个三五年可能才算刚刚入门。继续多学吧。