Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 搜索图案并在gvim中折叠匹配线_Search_Vim_Collapse_Code Folding - Fatal编程技术网

Search 搜索图案并在gvim中折叠匹配线

Search 搜索图案并在gvim中折叠匹配线,search,vim,collapse,code-folding,Search,Vim,Collapse,Code Folding,嗨 我想在搜索后折叠一组行,如下所示 还可以通过以下步骤使用鼠标打开和关闭折叠: 单击“+”打开此行的闭合折叠 单击任何其他非空字符以关闭此行打开的折叠 我要搜索,单击并折叠所有匹配的行 还可以通过以下步骤使用鼠标打开和关闭折叠: +- 有一种方法可以折叠vim中不匹配的模式,在搜索模式后,我们可以通过\z键折叠不匹配的模式 nnoremap\z:setlocal foldexpr=getlinev:lnum=~@/?0:getlinev:lnum-1=~@/\\\\\\\\\\\\\\\\;g

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

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

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

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

我要搜索,单击并折叠所有匹配的行

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

+-

有一种方法可以折叠vim中不匹配的模式,在搜索模式后,我们可以通过\z键折叠不匹配的模式

nnoremap\z:setlocal foldexpr=getlinev:lnum=~@/?0:getlinev:lnum-1=~@/\\\\\\\\\\\\\\\\;getlinev:lnum+1=~@/?1:2 foldmethod=expr foldlevel=0 foldcolumn=2
有没有相反的选择?找到一个模式并崩溃?

我从reddit vim论坛上的reddit用户那里得到了这个问题的答案


希望对您有所帮助。

我正在使用neovim的以下配置,我认为它也应该适用于常规vim:

\z:上次搜索中的折叠匹配表达式 \Z:折叠与上次搜索不匹配的任何内容

当我想看到所有评论或根本没有评论时,它非常有用, 首先执行\并搜索“^”,如果这是您的语言的注释开始符号,请点击回车键,然后按上述步骤进行折叠

编辑:如果需要,您可能需要添加以下内容以将折叠重置回手动:
nnoremap\F:setLocalFoldMethod=manual

sdkks这一个很简单。当我在vimrc中在您的2个命令之后设置foldmethod=manual命令时,我无法展开它。如果我想打开,是否每次都需要在vim窗口中手动重新设置?。折叠仅限于一次搜索,我们是否可以将其扩展到多个搜索模式。@EashwarGadanchi在将method设置为manual with\F后,您可以使用zE展开所有内容。如果我没弄错的话,你每次都想用不同的搜索来累积折叠,恐怕用这个简单的方法是不可能的,因为command是根据特定的表达式来搜索和折叠所有的东西。我会为那个高级用例寻找一个插件。我还没试过。
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>
nnoremap \Z :setlocal foldexpr=(getline(v:lnum)=~@/)?0:1 foldmethod=expr foldlevel=0 foldcolumn=2 foldminlines=0<CR><CR>
nnoremap \z :setlocal foldexpr=(getline(v:lnum)=~@/)?1:0 foldmethod=expr foldlevel=0 foldcolumn=2 foldminlines=0<CR><CR>