Ĉ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.