vim中的隐藏功能仍然让我移动到所有角色

pli*_*ter 3 vim

这就是我所做的
:syntax match conceal Test +[A-Z0-9]\{6}+
:set conceallevel=2
:set concealcursor=nvi
所以当我123456在vim中写作时,我希望它没有任何东西.但是当我移动到那个区域时实际发生的事情是我必须朝着我想要移动的方向移动6次以使光标通过该区域.

有办法解决这个问题吗?我希望vim看到它好像什么都没有,当我移动到那个区域时,它就像那里什么都没有.但我仍然希望能够搜索并删除它.

ZyX*_*ZyX 9

目前没有内置的方法来做到这一点.您可以使用它synconcealed()来确定光标下是否有隐藏字符以及它隐藏的内容,并重新映射所有移动键以尊重它:像这样:

function! ForwardSkipConceal(count)
    let cnt=a:count
    let mvcnt=0
    let c=col('.')
    let l=line('.')
    let lc=col('$')
    let line=getline('.')
    while cnt
        if c>=lc
            let mvcnt+=cnt
            break
        endif
        if stridx(&concealcursor, 'n')==-1
            let isconcealed=0
        else
            let [isconcealed, cchar, group]=synconcealed(l, c)
        endif
        if isconcealed
            let cnt-=strchars(cchar)
            let oldc=c
            let c+=1
            while c<lc && synconcealed(l, c)[2]==group | let c+=1 | endwhile
            let mvcnt+=strchars(line[oldc-1:c-2])
        else
            let cnt-=1
            let mvcnt+=1
            let c+=len(matchstr(line[c-1:], '.'))
        endif
    endwhile
    return ":\<C-u>\e".mvcnt.'l'
endfunction
nnoremap <expr> l ForwardSkipConceal(v:count1)
Run Code Online (Sandbox Code Playgroud)

.注意:这可以用于单个运动(l)和正常模式,只是为了显示它可以完成的方式.