在 vim 中搜索一个模式并折叠匹配的行
Search a pattern and fold the matching lines in gvim
嗨,
我想在搜索后折叠一组线,
The mouse can also be used to open and close folds by following steps:
Click on a '+' to open the closed fold at this row.
Click on any other non-blank character to close the open fold at this row
我要搜索 单击 并折叠所有匹配行。
The mouse can also be used to open and close folds by followingsteps:
+--
在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>
有没有相反的选择?随便找个规律就崩溃?
我从 reddit vim 论坛上的 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>
希望对您有所帮助。
我将以下配置与 neovim
一起使用我认为也应该与常规 vim
一起使用:
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>
\z
: 折叠上次搜索的匹配表达式
\Z
:折叠与上次搜索
匹配的任何 NOT
当我想看到所有评论或根本没有评论时,它非常有用,
首先执行 \
并搜索 ^#
(如果这是您的语言的注释开始符号)点击 return,然后按上述方式折叠。
编辑:如果需要,您可能想在下面添加以将折叠重置为手动:
nnoremap \F :setlocal foldmethod=manual<CR><CR>
嗨,
我想在搜索后折叠一组线,
The mouse can also be used to open and close folds by following steps:
Click on a '+' to open the closed fold at this row.
Click on any other non-blank character to close the open fold at this row
我要搜索 单击 并折叠所有匹配行。
The mouse can also be used to open and close folds by followingsteps:
+--
在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>
有没有相反的选择?随便找个规律就崩溃?
我从 reddit vim 论坛上的 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>
希望对您有所帮助。
我将以下配置与 neovim
一起使用我认为也应该与常规 vim
一起使用:
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>
\z
: 折叠上次搜索的匹配表达式
\Z
:折叠与上次搜索
NOT
当我想看到所有评论或根本没有评论时,它非常有用,
首先执行 \
并搜索 ^#
(如果这是您的语言的注释开始符号)点击 return,然后按上述方式折叠。
编辑:如果需要,您可能想在下面添加以将折叠重置为手动:
nnoremap \F :setlocal foldmethod=manual<CR><CR>