VimScriptで、カーソルが離れたときにテキストを変更するための最良のテクニックは何ですか?
私はvimscriptを初めて使用します。vimwikiやvim-noteのようなプラグインが表示されているテキストをどのように再フォーマットするかを理解しようとしています。
構文ハイライトを使用して、強調表示、太字、下線、取り消し線などを作成する方法を知っています。
ただし、これらのプラグインは、カーソルが行から離れると、表示されるテキストを変更します。カーソルがその行に戻ると、入力された内容を示すためにテキストが再レンダリングされます。
これが例(vimwiki)*bold*
です。カーソルを離すと太字になり、カーソルを再レンダリングされる行に戻すと入力できます*bold*
。
この手法はどのように達成されますか。私はvimwikiソース(非常に複雑です)を調べましたが、vim-noteも調べましたが、どこで切り替えを行うのかわかりませんでした(のマッピングがあると思いました<CR>
)。
1つは表示、もう1つは非表示の2つのバッファーを保持していますか?
vim-ノート、彼らはこの技術を実現するためにvimscriptアンドゥを使用していますか?もしそうなら、それはどのように機能しますか?
回答
これらのプラグインは、Vimの構文隠蔽機能を使用しています。
Vimのシンタックスハイライトは通常、テキストの色(または下線や太字などの他のいくつかの属性)を変更するために使用されますが、隠蔽機能を使用すると、一致するアイテムを完全に非表示にするか、単一の文字に置き換えることができます。
'concealcursor'設定によっては、アイテムを含む行にカーソルを移動すると、実際のテキストが完全に表示されます。この'conceallevel'設定を使用conceal
して、完全に無効にしたり、アイテムを非表示にするか置換するかを変更することもできます。
あなたの具体的な例について、vimwikiはおそらく使用しているconcealendsために、引数を:syntax
隠すために*
大胆な構文領域の両端に。