为了满足我目前正在编写的脚本的需要,我试图以最快的方式获得当前段落开头/结尾的行号。
一开始我使用的是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/2或5/6
为了获得想要的结果,我不愿意移动游标,因为每次用户更改段落时都会执行这些操作,而移动游标的速度有点慢。
如果有人知道如何不断地获得当前段落开头和结尾的行号,我将很高兴听到它!
希望我的问题足够清楚!
发布于 2018-12-06 11:17:09
段落的定义主要是基于空行,尽管:help paragraph还提到了一些可以定义段落的nroff宏(相当晦涩,并且继承自vi)。
:while循环和empty(getline(lnum))检查空行,从而自己检测段落。这种显式迭代完全避免了游标的移动,但如果有非常大的段落(跨越数百行),则可能会很慢。normal! {。:function中,屏幕更新只在需要时(通过:redraw)进行。您需要保存和还原当前视图,以便用户不会注意到:let l:save_view = winsaveview()
" Code that jumps around here.
call winrestview(l:save_view)如果使用:noautocmd (或临时设置:help 'eventignore')作为运动的前缀,则可以避免触发插件操作(这比Vim的内部游标移动成本要高得多)(在CursorMoved事件上)。
摘要
有几种选择;哪一种适合您,取决于您的典型数据和用例。
https://stackoverflow.com/questions/53649588
复制相似问题