Monologo indekso » komputilo » ĉi tie
Enŝovi meta-karaktrojn \(\)
2012-05-13 02:54

Ĉe skribi ":substitute"-komandon en komando-linio de Vim, karaktroj \(" kaj \) ofte utilas.

Laŭorde literoj krampitaj per \(\) en substitu-modelo {pat}, ili estas konsultebla en post-substituo-literoj {sub} kiel \1\2\3....

Ekzemple, la literoj "foo-hoge-bar" substituos laŭ "s/\(foo\)-hoge-\(bar\)/\1=\2/" al literoj "foo=bar".


Ĉiufoja eskapi estas konsumema, tial mi klavas momente la krampojn per skripto.

Mi konkretigos tion jene: Unue difini la funkcion, kiel kiam kompari la numerojn de litero \( kaj \(\) en kuranta komando-linio, se numeroj estas egalaj respondi literon \(, alie literon \). Due retistri la funkcion al iu klavo per ":map <expr>" por enŝovi la respondo.

cnoremap <expr> <C-o> EscapedEnclose()
function! EscapedEnclose()
    let cmdline = getcmdline()
    let str = '\\('
    for n in range(2)
        let i = 0
        while match (cmdline, str, 0, i + 1) != -1
            let i += 1
        endwhile
        if n == 0
            let str = '\\)'
            let j = i
        else
            if i == j
                return '\('
            else
                return '\)'
            endif
        endif
    endfor
endfunction

Laŭ tiu ĉi ekzemplo, "o" kun reĝimklavo enŝovos "\(" kaj "\)" sola.

« reen
inserted by FC2 system