Vim里面的g关键字的简单运用

2022年09月29号 22:53 — Written by Z1206
#Vim

最近鼓捣了不少Vim,假装业余爱好。既然一口吃不成胖子,先记一下简单的操作。发现g用处挺多,稍微总结一下几个觉得值得记录的。

g命令表示什么意思?

一开始我以为是go的缩写,但是读过API之后发现它其实想表达的意思是global的意思,也就是“全局”的意思。很多时候Vim的命令都很有英文的flow的感觉,但是有几个例子我想不出来想表达什么,比如下面要介绍的第一个。

我们需要在normal模式下面先按下g键,再继续按下后续的motion进行操作。

g0

如果Vim里面已经设置了自动换行,一个很长的段落有可能只是一行内容换行显示出来的,如果我们用常规的光标上下移动就会跳到下一行,也就是下一段落里面去了。我们需要一个“视角窗口移动”。

g0的意思就是跳转到跳转到视窗角度显现的行首。与其对应的我们常用的0的意思为跳转到实际意义上的行首。

前面提到过g表示global,所以g后面再接一个0就比较耐人寻味——它明明连一个行都没跳过,只是在行内跳转啊。

上面的就不细究了,举一反三,我们也可以进行如下操作:

  • gj or gk 视窗行内上下移动
  • g^ or g$ 视窗行内移到行首或行尾

gq

自动折叠长的行。

gu or gU + 文本对象

uU意思为小写或大写,顾名思义,是转换文本大小写的。比如:

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大写!这操作会让后面一行并入前一行。和没有gJ操作不同的是它不会添加一个空格。

g&

这个有点让我捉摸不透,g&表示运行前面运行过的一个替换命令(:s/之类)到整个文件

g<

对我这种短期记忆稀烂只有七秒记忆的人来说是个福音,它会打印出来前一个命令输出内容(为何我总是会忘掉几秒前刚刚发生过的事情)。

gD

我自己的配置这个键位被某插件用了,源生里面还没试过。它的意思是跳转到光标下文字的定义声明处(go to the definition of the word)。

Vim这玩意确实可以鼓捣很多很多年,学习曲线太特么陡峭了,鼓捣个三五年可能才算刚刚入门。继续多学吧。

Created by Z1206 © 2020