2009-11-05 9 views
9

\bitと書くことができ、それをvimのものに展開したいと思っています。しかし、どのようにして略語の左側にバックスラッシュをエンコードするのですか?vimの略語にバックスラッシュを使用する

私はこれらのすべて試してみました:

:iab \bit replacement_text 
:iab <Bslash>bit replacement_text 
:iab <bs>bit replacement_text 

のが、これらのすべてのためのE474: Invalid argumentを得ました。

map_backslashヘルプトピックには<Bslash>と表示されていますが、これは機能していないようです。あなたは、多くの場合、あなたのコードでそれらをあなたが(私のためのタブの上)ラグのように `バッククォートのような代替リーダーをいけない場合も

inoremap \bit replacementtext 

:iab `f foobar 

使用していないことができれば

+0

Aaarrgghh!それはクラッカーです。私が学んだあなたのは、{rhs}ものです。 {lhs}では、 "\ b"(引用符なし)は動作しますが、2番目の文字に "\ bi"が追加されたときにE474があります。 "\\"と "\\ b"は受け入れられますが、 "\\ bi"は受け入れられません。 '\ bit "(外側のシングルクォートを除く)は動作しますが、ダブルクォートはabの一部です。私が言ったように、 "Aaarrghghh!" +1 –

+0

あなたがこれを回答@Ewanに貼り付けると、これを投票することができ、引用符を見やすくなります。これは興味深いものです... – Peter

答えて

9

"bit"で省略形を定義し、その前に "\"があるかどうかをテストし、そうであれば新しいテキストを返すか、そうでない場合は "bit"をテストできます。

function! s:Expr(default, repl) 
    if getline('.')[col('.')-2]=='\' 
    return "\<bs>".a:repl 
    else 
    return a:default 
    endif 
endfunction 

:inoreab bit <c-r>=<sid>Expr('bit', 'foobar')<cr> 

これは私がMapNoContext()で使用した種類のトリックです。

EDIT::h abbreviationsを参照してください。あなたが尋ねたものが直接達成できない理由があります。

EDIT2:それは簡単にこの方法をカプセル化することができます。

function! s:DefIab(nore, ...) 
    let opt = '' 
    let i = 0 
    while i != len(a:000) 
    let arg = a:000[i] 
    if arg !~? '<buffer>\|<silent>' 
     break 
    endif 
    let opt .= ' '.arg 
    let i += 1 
    endwhile 

    if i+2 != len(a:000) 
    throw "Invalid number of arguments" 
    endif 
    let lhs = a:000[i] 
    let rhs = a:000[i+1] 

    exe 'i'.a:nore.'ab'.opt.' '.lhs.' <c-r>=<sid>Expr('.string(lhs).', '.string(rhs).')<cr>' 
endfunction 

command! -nargs=+ InoreabBSlash call s:DefIab('nore', <f-args>) 

とシンプルで使用:

InoreabBSlash <buffer> locbit foobar 

または

InoreabBSlash bit foobar 
1

+0

これは動作しますが、まったく同じ方法ではありません。 \それの残りの部分を待つごとに迷惑な一時停止があります。私はそれについての方法をかなり見ていない。 – sykora

+0

ええ、私はこれを自分自身で試してみました。それは好きではありませんでした。 – Peter

+0

私はいくつかのimapのために( =いくつかの関数処理のために)あなたが一時停止を乗り越える(それは速く入力するだけです:) – michael

0

あなただけのようにバックスラッシュを使用することができますそれに続く文字が1文字しかない場合は省略形の接頭辞ですので、:iab \b replacementtext働くでしょう。

2

私は両側にバックスラッシュを使用することをお勧めし、Vimはそのように満足している:あなたは再帰を意図していない場合、私は明確にし、より良い、略称の「NORE」バージョンを使用しています

inoreabbr \bit\ replacement_text 

注意拡張。私は長い間以下の略語を使用しており、彼らは素晴らしい仕事をしています:

inoreabbr \time\ <C-R>=strftime("%d-%b-%Y @ %H:%M")<CR> 
inoreabbr \date\ <C-R>=strftime("%d-%b-%Y")<CR> 
+0

クリエイティブな選択肢。末尾のバックスラッシュは、これを_non-id_の許された許容文字列に変換します。 –

関連する問題