3

これが私がしていることです。ですから、vimで
:syntax match conceal Test +[A-Z0-9]\{6}+
:set conceallevel=2
:set concealcursor=nvi
書くとき、そこには何もないと思います。123456しかし、実際にその領域を移動すると、カーソルがその領域を通過するには、移動したい方向に 6 回移動する必要があります。

これを回避する方法はありますか? そこに何もないかのようにvimに見てもらいたいのですが、その領域に移動すると、そこには何もないように見えます。しかし、私はまだそれを検索して削除できるようにしたいと考えています。

4

2 に答える 2

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)

。注:これは、1つのモーション(l)に対して、通常モードで実行される方法を示すために実行されます。

于 2012-09-13T04:43:12.457 に答える