在Vim中,为什么:随意腐蚀我的褶皱?
我有一个AltUp和AltDown的小映射,可以将文本上下移动一行.我决定将这些映射设置为“折叠感知”,以便将文本向上移动一行将使其移过闭合折叠.但是当我玩这些映射时,vim会破坏我的折叠.
映射: nnoremap <A-Down> :call MoveDown_n()<CR> nnoremap <A-Up> :call MoveUp_n()<CR> function! MoveUp_n() range let pos = getpos(".") normal k let line_pos = line(".") - 1 call setpos(".",pos) execute "m".line_pos endfunction function! MoveDown_n() range let pos = getpos(".") normal jj let line_pos = line(".") - 1 call setpos(".",pos) execute "m".line_pos endfunction 测试文件: vim: foldmethod=marker fold A {{{ some text here }}} fold B {{{ some text here }}} fold C {{{ some text here }}} fold D {{{ some text here }}} 问题: >褶皱开始变得未扩张(“腐败”),没有明显的原因. 有时会发生第一次运动,有时不会发生.我甚至有测试用例,其中折叠边界被错误地检测到而不是根本没有被检测到.例如,Vim认为的折叠以中间线文本开头. —编辑— 如果您将折叠A向上移动两次(参见注释1),它将损坏折叠B,C和D.如果您将折叠A向下移动一次(参见注释-2),它将损坏折叠B. (注释1)将光标放在折叠A(第5行)上,然后执行:move3,:move2或do:move-2,然后是kj,然后是:move-2. 我注意到的是,在任何:移动操作之后,光标位于折叠的最后一行的第一列.但执行命令:在折叠A上移动2次两次将损坏折叠B,C和D,即使您在执行第二个:move-2命令之前将光标重置为折叠A的第一行. 如果重要:在Windows上使用gvim 7.3 解决方法
您可以删除整行并粘贴它,并且开箱即用(并且可以识别折叠)
nnoremap <a-down> ddp nnoremap <a-up> ddkP 此外,版本不在文件的底部. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |