SirVer/ultisnipsは、Vim でスクリプトを作成するための非常に生産的なプラグインです。しかし、Gif に示すように、 Ultisnips が Vim でテキストを即座に変換する方法は誰でも知っています。この例の Ultisnips は、文字が入力された直後に、「This is the subject」というテキスト内のすべての文字をマイナス記号に変換しています。
2 に答える
1
それはどのようなものか
私が理解していることから、彼らは不正行為をしているように見えます ;) 基本的なアイデアを提供するためのヒントを次に示します。ステップ 1 では、テキストを入力します。
それからちょうどそして
yyp
あなたs/./_/g
は終わった
またはs/./-/g
:
どのように行われるか(まあ、おそらく)
したがって、基本的に各シンボル挿入を傍受しています。しかし、どのように?特定のイベント、つまり「カーソルが挿入モードで移動された後に」トリガーされるCursorMovedIに対して autocommand を使用しているようです。
ソースコードを見れば、autocommand バインディングを簡単に見つけることができます。
代替アプローチ
VIM はコンソール テキスト エディタであり、この種のテキスト フォーマットは端末で広くサポートされているものではありません。ただし、特別な utf-8 文字を使用するなど、いくつかの回避策があります (もちろん、テキストはそれに応じてエンコードする必要があります)。このアプローチに使用できるコード スニペットを次に示します。
" modify selected text using combining diacritics
command! -range -nargs=0 Overline call s:CombineSelection(<line1>, <line2>, '0305')
command! -range -nargs=0 Underline call s:CombineSelection(<line1>, <line2>, '0332')
command! -range -nargs=0 DoubleUnderline call s:CombineSelection(<line1>, <line2>, '0333')
command! -range -nargs=0 Strikethrough call s:CombineSelection(<line1>, <line2>, '0336')
function! s:CombineSelection(line1, line2, cp)
execute 'let char = "\u'.a:cp.'"'
execute a:line1.','.a:line2.'s/\%V[^[:cntrl:]]/&'.char.'/ge'
endfunction
しかし、ご覧のとおり、理想的ではありません。
于 2015-07-16T02:39:04.583 に答える
0