检测折叠线或增量搜索(?)

问题描述:

Okey,我同意 - 标题是无用的。事情是,我不知道如何把这个放入一个单一的班轮...检测折叠线或增量搜索(?)

我想要做的是映射空间键,使其作为:nohl映射,但在同时,当它在折叠线上时,在正常模式(打开/关闭折叠)下用作za

这可能吗?

我遇到的麻烦是两者之间的区别 - 有没有一种方法来“检测”光标下方的折叠线,或检测增量搜索“目前正在进行中”(如,有东西高亮显示)?

还是我以完全错误的方式解决这个问题?欢迎所有的建议!

Andy Rk重用的想法:

function! FoldSetWithNoHL() 
    set nohls 
    if (foldclosed(line('.')) >= 0) 
     exe "normal za" 
    endif 
endfunction 

map <space> :silent! call FoldSetWithNoHL()<cr> 
+1

这有一个不幸的副作用,完全关闭搜索突出显示,而不是仅仅清除当前的搜索突出显示。它也打开折叠但不关闭它们。 – codelahoma 2012-02-14 12:46:19

这可能是丑陋,但它的工作对我来说:上展开的线压空当

noremap <Space> :nohl<CR> za 

的缺点是错误发生的历史。

结合修复了我在以前的评论中列出的问题:那里似乎

function! ToggleFoldWithNoHL() 
    if foldlevel('.') 
    normal! za 
    endif 
endfunction 

nnoremap <silent> <space> :nohlsearch<cr>:call ToggleFoldWithNoHL()<cr> 

不是一个方法来检测存在活跃搜索突出显示,所以如果您在折叠内部有搜索活动,这将清除搜索,但也关闭折叠。在这种情况下,另一个空间应该让你回到你想要的位置。

+0

请注意,您不需要'执行'。 '正常za'本身(没有引号)的作品,虽然你可能想使用'正常!如果'z'或'za'被重映射到别的东西的话。 – 2012-02-14 16:44:30

+0

谢谢。我的意思是包括'!',但我仍然在学习'执行'等方面的知识。编辑合并。 – codelahoma 2012-02-15 02:59:48