1

SirVer/ultisnipsは、Vim でスクリプトを作成するための非常に生産的なプラグインです。しかし、Gif に示すように、 Ultisnips が Vim でテキストを即座に変換する方法は誰でも知っています。この例の Ultisnips は、文字が入力された直後に、「This is the subject」というテキスト内のすべての文字をマイナス記号に変換しています。

究極の変身

4

2 に答える 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

次のようなultisnipsを使用できます。

snippet ssec "Subsection" b
${1:${VISUAL:Subsection name}}
`!p snip.rv = rst_char_len(t[1])*'-'`

上記のコードrst.snippetsはサブセクション「ssec」で機能しますが、入力している文字列の長さを提供する関数「rst_char_len」が同じファイルで定義されているため、コード全体を表示する必要があります。このスタントを実行できるようにするグローバル定義は、ここで読むことができます。

于 2017-01-03T20:45:53.630 に答える