gpt4 book ai didi

vim - 当您将光标放在 Vim 折叠上时,有没有办法自动展开它?

转载 作者:行者123 更新时间:2023-12-04 07:27:58 24 4
gpt4 key购买 nike

你可以让 Vim 在光标接触时自动展开折叠吗?

最佳答案

foldopen选项。它控制哪些命令组将导致
如果光标移动到关闭的折叠中,则打开折叠。

但是请注意,垂直移动不会打开闭合的折叠。而且,foldopen中没有设置启用此行为。当hor项目是
设置在 foldopen选项,打开折叠可以使用h , l或其他
水平移动命令。如果自动打开至关重要
对接触它的任何光标移动进行折叠,可以解决这个问题
通过重新映射垂直移动命令的一些子集,如下所示。

nnoremap <silent> j :<c-u>call MoveUpDown('j', +1, 1)<cr>
nnoremap <silent> k :<c-u>call MoveUpDown('k', -1, 1)<cr>
nnoremap <silent> gj :<c-u>call MoveUpDown('gj', +1, 1)<cr>
nnoremap <silent> gk :<c-u>call MoveUpDown('gk', -1, 1)<cr>
nnoremap <silent> <c-d> :<c-u>call MoveUpDown("\<lt>c-d>", +1, '&l:scroll')<cr>
nnoremap <silent> <c-u> :<c-u>call MoveUpDown("\<lt>c-u>", -1, '&l:scroll')<cr>
nnoremap <silent> <c-f> :<c-u>call MoveUpDown("\<lt>c-f>", +1, 'winheight("%")')<cr>
nnoremap <silent> <c-b> :<c-u>call MoveUpDown("\<lt>c-b>", -1, 'winheight("%")')<cr>
function! MoveUpDown(cmd, dir, ndef)
let n = v:count == 0 ? eval(a:ndef) : v:count
let l = line('.') + a:dir * n
silent! execute l . 'foldopen!'
execute 'norm! ' . n . a:cmd
endfunction

一个劣质但有点节俭的解决方案是在每个
光标移动。
autocmd CursorMoved,CursorMovedI * silent! foldopen

不幸的是,这个解决方案不是通用的。下折后
光标打开时,光标位于该折叠的第一行。如果
这种行为是不可取的,可以按照垂直方向
一个移动,当光标移动到折叠的最后一行时,将光标放在折叠的最后一行
正在自下而上移动。
autocmd CursorMoved,CursorMovedI * call OnCursorMove()
function! OnCursorMove()
let l = line('.')
silent! foldopen
if exists('b:last_line') && l < b:last_line
norm! ]z
endif
let b:last_line = l
endfunction

但是,如果运动跳过折叠,则折叠不会被打开。为了
例如, 2j在折叠正上方的行上将光标放在该行上
就在那次折叠之后,而不是其中的第二行。

关于vim - 当您将光标放在 Vim 折叠上时,有没有办法自动展开它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7034215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com