由于需要我当前正在编写的脚本,我试图以最快的方式获得当前段落开始/结束的行号。
起初,我使用的是line("'{")
和line("'}")
,但是在这种情况下实际上不起作用:
1. this is a
2. paragraph
3.
4.
5. this is another paragraph
6. that is below the first one
的确,当光标位于第4行时,line("'{")
返回1
,而line("'}")
返回6
,当我希望它类似于{{ 1}}或1/2
我不愿意移动光标来获得想要的结果,因为每次用户更改段落时都会执行这些操作,并且移动光标有点慢。
如果有人知道一种始终如一地获取当前段落开始和结束行号的方法,我将很高兴听到它!
希望我的问题很清楚!
答案 0 :(得分:0)
段落的定义主要基于空行,尽管:help paragraph
也提到了一些(相当模糊并且继承自vi的) nroff 宏,它们可以定义段落。
pacman
循环和:while
来检查空行,从而自己检测段落。此显式迭代完全避免了光标移动,但是如果段落很大(跨越数百行),则可能会很慢。empty(getline(lnum))
。normal! {
内部,屏幕更新仅按需发生(通过:function
)。您需要保存和还原当前视图,以使用户不会注意到::redraw
如果在动作前加上let l:save_view = winsaveview()
" Code that jumps around here.
call winrestview(l:save_view)
(或暂时设置:help 'eventignore'
),则可以避免触发插件动作(这可能比Vim内部光标移动的代价高得多)(在{ {1}}事件。
有几种选择;哪个适合您,取决于您的典型数据和用例。