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

时间:2012-02-14 03:05:18

标签: vim

哦,我同意 - 标题没用。问题是,我不知道如何将它放入一个班轮......

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

这甚至可能吗?

我遇到的问题是区分两者 - 有没有办法“检测”光标下方的折叠线,或检测“正在进行中”的增量搜索(如有,突出显示) ?

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

3 个答案:

答案 0 :(得分:2)

这可能很难看,但它对我有用:

noremap <Space> :nohl<CR> za

缺点是在展开的线条上按空格时会发生错误。

答案 1 :(得分:2)

重用Andy Rk的想法:

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

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

答案 2 :(得分:1)

将修复程序纳入我之前评论中列出的问题:

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

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

似乎没有办法检测到有活跃的搜索突出显示,因此如果您在折叠中有活动的搜索,这将清除搜索但也关闭折叠。在这种情况下,另一个空间应该让你回到你想要的地方。