3 个 Vim 命令,助您在括号间实现极速导航 ⚡
程序文件中经常会有很多括号。因此,高效地在括号间导航对于整体开发效率至关重要。我将向您介绍三种命令,它们可以让您在括号间快速导航!
1.%
我们先来看一个例子(箭头指向光标位置):
( example )
↑
按%:
( example )
↑
%再次按下:
( example )
↑
这表明它会%在匹配的括号之间跳转。然而,实际行为远不止于此。它会找到光标之后或光标下方的%下一项,并跳转到与其匹配的项。
%它不仅适用于(),也适用于:
- 配对:
()或[]或{}(可通过选项更改'matchpairs') - C 风格的注释:
/* */。 - HTML标签:
<div></div>
需要特别注意的是,重点在于光标之后或光标之下,这意味着即使括号不在光标之下,你也可以使用它。
例子:
some text (( example )) some text
↑
假设你想去最后一个地方。你最初可能会想到按以下步骤)操作:f(%
按f(:
some text (( example )) some text
↑
按%:
some text (( example )) some text
↑
然而,这f(是不必要的。您只需使用即可实现相同的导航效果%。
这是因为%底层运行着类似这样的程序:
- 查找光标之后或光标下的第一个数字对
(。 - 跳转到它的匹配项,即
)。
当括号不在光标下方时,使用起来可能不太直观%,但熟悉之后,你就能用它实现一些神奇的操作!
2.[(和[{
[(跳回第一个未匹配项。([{跳回第一个未匹配项。{
例子:
{
example
text
↑
}
按[{:
{
↑
example
text
}
除了[(和 之外[{,还有])和]}:
])跃升至无与伦比)]}跃升至无与伦比}
我们来看一个实际例子。假设你正在一个大型函数内部进行导航:
function example() {
const sum = 0;
↑
for (let i = 0; i < 10; i++) {
sum += i;
}
// some other operation, which takes many lines
// ...
return sum;
}
假设你想跳转到}该函数的结束位置。有几种方法可以做到这一点:
-
使用相对跳转(例如直接
12j跳转到目标位置)可以有效解决这个问题}:
这种方法适用于较小的函数。但是,在本例中,由于函数过大,最后一行代码超出了屏幕范围,因此这种方法行不通。 -
用于
/}搜索}:
如果函数内部没有其他元素,这可能有效}。但是,在示例中,还有其他元素},您需要n多次按 键才能找到最后一个元素}。 -
使用方法
]}:
最有效的方法是使用]},它可以直接带你到函数的结尾,}而无需计算行数或重复搜索。
3.][和[]
][:跳转到}第一列中的下一个。[]:向后跳转到}第一列中的下一个。
例子:
{
↑ example
}
{
{
example
}
}
{
example
}
按][:
{
example
}
↑
{
{
example
}
}
{
example
}
][再次按下:
{
example
}
{
{
example
}
}
↑
{
example
}
][再次按下:
{
example
}
{
{
example
}
}
{
example
}
↑
这在处理包含多个函数的文档时非常有用。在大多数编程语言中,函数的结尾位于}行首(第一列)。您可以使用 `\ ][n` 跳转到下一个函数的结尾,[]使用 `\n` 跳转到上一个函数的结尾。
还有:
]]:跳转到{第一列的下一个。[[:向后跳转到{第一列的下一个。
虽然实际上{第一列的字符并不常用。我个人也很少遇到需要用到它们的情况。如果您能想到哪些场景]]会[[特别需要它们,请在下方评论区分享!
结论
总之,掌握 Vim 命令,例如%`\t`、 `\t` [(、[{`\t`、` ][\t` 和[]`\t`,可以显著提高在编程文件中导航的效率。每个命令在不同的情况下都有其独特的优势,使我们能够精准、轻松地浏览代码!