转到vim中的行


14

我知道0到行的开头,$到行的结尾,但是中间有东西吗?

Answers:


11
:call cursor(0, len(getline('.'))/2)

4
如果将其映射,这将非常有用,例如::nnoremap gm:call cursor(0,len(getline('。'))/ 2)<cr>
Heptite 2010年

3
virtcol('$')/ 2就足够了。
卢克·赫米特

@Luc Hermitte:很好,但是当涉及到硬标签时,并不是最好的行为。
短暂

这就是为什么我使用virtcol而不是col的原因。:)。但是确实我们应该使用| 而不是cursor()。顺便说一句,len()不会给出任何更好的结果。此外,len还会为多字节字符带来其他麻烦。
卢克·赫米特

8

键入即可gm完成操作,但它会按屏幕行移动(请参阅参考资料:help gm)。为了使它与文本行一起使用,可以重新映射此命令:

map gm :call cursor(0, virtcol('$')/2)<CR>

gm似乎将光标移动到屏幕的中间,但是如果我的文本行短于屏幕的长度,则不会将我带到屏幕的中间。抱歉,无法澄清。
teggy 2010年

@teggy:我明白了。我修改了解决方案以将gm重新映射到文本行的中间。如您所见,它结合了ephemient和Luc Hermitte的解决方案。
JooMing 2010年

正如ephemient指出的那样,硬tarb仍然存在问题,因为cursor()会将它们视为一个字符。而且,它也不适合多字节字符。
卢克·赫米特

7

这是一个解决方案,将尊重硬标签和多字节字符。

:exe 'normal '.(virtcol('$')/2).'|'

1

是我找到的最佳解决方案。完全跳到该行的中间不是很实际。移至中间后,您很可能仍需要将光标移动几个位置。如果您可以跳到特定角色怎么办?许多人只是搜索角色,然后按“下一个”直到找到它。太慢了 Easy-motion插件提供了更好的解决方案。

<leader><leader>s然后,我最喜欢的是您要跳转到的角色。Easy Motion将所有匹配项替换为不同的字母,供您选择。请参阅教程。它是改变生活的插件...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.