代码之家  ›  专栏  ›  技术社区  ›  Eashwar Gadanchi

搜索一个模式并折叠gvim中的匹配行

  •  0
  • Eashwar Gadanchi  · 技术社区  · 7 年前

    你好,

    我想在搜索后折叠一组行,如下所示:

    鼠标还可以通过以下步骤打开和关闭折叠:

    • 单击“+”打开此行的闭合折叠。

    • 单击任何其他非空白字符关闭此行的打开折叠

    我想搜索 点击 折叠所有匹配的行。

    鼠标还可以通过以下步骤打开和关闭折叠:

    +

    有一种方法可以折叠VIM中不匹配的模式,在搜索完一个模式后,我们可以使用“z”键折叠不匹配的模式。

    nnoremap \z :setlocal foldexpr=(getline(v:lnum)=~@/)?0:(getline(v:lnum-1)=~@/)\\|\\|(getline(v:lnum+1)=~@/)?1:2 foldmethod=expr foldlevel=0 foldcolumn=2<CR> 有没有相反的选择?找到一个模式然后崩溃?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Eashwar Gadanchi    7 年前

    我从RedditVim论坛的Reddit用户那里得到了这个问题的答案。

    https://www.reddit.com/r/vim/comments/91qz90/search_a_pattern_and_fold_the_matching_lines_in/

    function! FoldSearchPattern() abort
        if !exists('w:foldpatterns')
            let w:foldpatterns=[]
            setlocal foldmethod=expr foldlevel=0 foldcolumn=2
        endif
        if index(w:foldpatterns, @/) == -1
            call add(w:foldpatterns, @/)
            setlocal foldexpr=SetFolds(v:lnum)
        endif
    endfunction
    
    function! SetFolds(lnum) abort
        for pattern in w:foldpatterns
            if getline(a:lnum) =~ pattern
                if getline(a:lnum + 1) !~ pattern
                    return 's1'
                else
                    return 1
                endif
            endif
        endfor
    endfunction
    
    nnoremap \z :call FoldSearchPattern()<CR>
    

    希望能有所帮助。

    推荐文章