在VIM中,如何移动到同一列中具有非空格字符的下一行?

6

由于源代码通常是缩进的,如果我可以移动到与同一列中有非空白字符的下一个/上一个行,则可以快速导航源代码。以下面的代码片段为例,光标在最后一个}上,有没有办法将光标导航到以if开头的i处?

if (condition) {
    //  some code
}

2
相关内容:在 Vi SE 上的 如何向上垂直移动直到达到非空白字符? - kenorb
4个回答

7

要搜索相同的屏幕列,可以使用特殊的/\%v原子;当前列可以使用virtcol('.')查询。在该位置断言非空白字符(\S),并触发向后的search():

:call search('\%' . virtcol('.') . 'v\S', 'bW')

您可以轻松将其转换为正常模式映射。

1
谢谢。已经为Control-k进行了映射::map <C-k> :call search('\%' . virtcol('.') . 'v\S', 'bW')<CR>,以及Control-j::map <C-j> :call search('\%' . virtcol('.') . 'v\S', 'wW')<CR> - kenorb

2
我现在已经在我的JumpToVerticalOccurrence插件中实现了这个动作;默认映射到]| / [|。还有其他相关的映射,比如一个]V{char}映射,它的工作方式就像f,但是垂直方向上。

所以如果你不介意安装插件(以及依赖项),这将更加健壮和功能强大(它也支持[count])。


你觉得将它们映射到 <C-j><C-k>,这样更容易按和理解吗? - Thomson
你可以重新映射它们;对于我个人来说,<C-j/k> 对于这种我很少使用的动作来说太有价值了。 - Ingo Karkat

1
如果你的代码有定义好的缩进系统,jeetsukumaran/vim-indentwise 可以很好地用于在缩进块之间进行相对、绝对或块作用域移动。

1

虽然不完全符合您的要求,但如果您从}开始,然后按下%,光标将移动到匹配的{


谢谢。是的,使用“%”然后“^”可能可以解决这个问题,但它只适用于块代码,并且需要额外的按键操作。如果有通用的快捷方式就太好了。 - Thomson
“但它将仅限于块代码”,这是什么意思?这个答案做了你在问题中描述的事情(使用那个例子)。而且,是的,“%0”或“%^”只需要两个按键。 - Kent
1
@Kent,我的意思是代码可能没有“{”和“}”来阻止代码,但代码仍然有缩进。 - Thomson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接