@@ -36,6 +36,7 @@ Note: 式の評価はコンパイル時に無効化できる。無効化され
363612. サンドボックス | eval-sandbox |
373713. テキストロック | textlock |
383814. Vim script ライブラリ | vim-script-library |
39+ 15. クリップボードプロバイダ | clipboard-providers |
3940
4041テストのサポートは | testing.txt | を参照。
4142プロファイリングは | profiling | に記録されている。
@@ -1829,7 +1830,7 @@ Vim script の式(|expr1| を参照)を含めることができる。任意の
18291830&l:option ローカルオプション変数
18301831
18311832例: >
1832- echo "タブストップは " .. &tabstop .. " です"
1833+ echo "タブストップは " .. &tabstop
18331834 if &insertmode
18341835
18351836 ここにはあらゆるオプション名を使うことができる。| options | を参照。ローカル変数
@@ -2184,11 +2185,16 @@ v:clipmethod 現在使用されているクリップボードへのアクセス
21842185 wayland Wayland プロトコルが使用されている。
21852186 x11 X11 セレクションが使用されている。
21862187 gui GUI固有のメソッドが使用されている。
2187- other 他のメソッドが使用されています 。
2188+ other 他のメソッドが使用されている 。
21882189 none クリップボード機能が無効または使用でき
21892190 ない。
21902191 詳細は 'clipmethod' を参照。
21912192
2193+ *v:clipproviders*
2194+ v:clipproviders
2195+ クリップボードプロバイダを含む辞書。詳細については
2196+ | clipboard-providers | を参照。
2197+
21922198 *v:cmdarg* *cmdarg-variable*
21932199v:cmdarg 2つの目的のために使われる:
21942200 1. ファイルの読み書きコマンドに与えられる余分な引数。現在のと
@@ -2215,7 +2221,7 @@ v:collate 現在のロケール設定での実行環境の照合順序。これ
22152221 を使う。
22162222 | multi-lang | を参照。
22172223 *v:colornames*
2218- v:colornames カラー名を16進数カラー文字列に対応付ける辞書。これらのカラー名
2224+ v:colornames カラー名を16進数カラー文字列に対応付ける辞書。これらのカラー名
22192225 は、| highlight-guifg | , | highlight-guibg | , | highlight-guisp | の
22202226 パラメーターで使用できる。
22212227
@@ -5107,5 +5113,132 @@ NOTE: <args> のエスケープはユーザーに任される
51075113 :call dist#vim9#Launch(<args> )
51085114 :Launch <app> <args> .
51095115<
5116+ ==============================================================================
5117+ 15. クリップボードプロバイダ *clipboard-providers*
5118+
5119+ Vim が | +clipboard_provider | 機能 (| +eval | 機能を必要とする) 付きでコンパイル
5120+ されている場合、カスタムクリップボードの作成が可能になる。これらのプロバイダは
5121+ "+" および "*" レジスタを処理する。Note | +wayland_clipboard | または
5122+ | +xterm_clipboard | 機能がコンパイルされていない場合は、"+" レジスタは使用でき
5123+ ないことに注意。
5124+
5125+ プロバイダを追加するには、次の形式で | v:clipproviders | 辞書に新しいエントリを
5126+ 追加する: >
5127+ let v:clipproviders["name"] = {
5128+ \ "available": function("Available"),
5129+ \ "paste": {
5130+ \ '+': function("Paste"), " For the + register
5131+ \ '*': function("Paste"), " For the * register
5132+ \ },
5133+ \ "copy": {
5134+ \ '+': function("Copy"), " Same thing as above
5135+ \ '*': function("Copy"),
5136+ \ },
5137+ \ }
5138+
5139+ キーは 'clipmethod' で使用するプロバイダ名である。例えば次の例では、これを使用
5140+ するために "name" を 'clipmethod' に追加する。 >
5141+ set clipmethod=name,wayland,x11,gui
5142+
5143+ 各コールバックは、文字列内の関数名、| Funcref | 、または | lambda | 式のいずれかに
5144+ なる。
5145+
5146+ note これらの辞書エントリはオプションであることに注意。例えば、"copy" 機能が必
5147+ 要ない場合は、単に除外することができる。Vim が何かをヤンク/コピーする場合、何
5148+ も行われない。
5149+
5150+ *clipboard-provider-available*
5151+ "available" コールバックは、使用可能なクリップボードレジスタを含む文字列を返す
5152+ 必要がある。例えば、"+" レジスタのみが使用可能な場合は関数は "+" を返し、"+"
5153+ と "*" の両方が使用可能な場合は "+*" を返す。
5154+
5155+ *clipboard-provider-paste*
5156+ "paste" コールバックは、最初の引数としてペーストするレジスタ (文字列) を、2 番
5157+ 目の引数としてアクセスの種類 (文字列) を受け取る。タプル/リスト、または文字列
5158+ のいずれかを返す。タプル/リストを返す場合は、以下の 2 つの要素を持つ必要がある:
5159+ - | setreg() | に準拠したレジスタのタイプ。
5160+ - 文字列のリスト
5161+ レジスタのタイプが空文字列の場合、型は自動的に選択される。| setreg() | を参照。
5162+ 文字列が返される場合は、"clear" または "previous" のいずれかになる。"clear" は
5163+ レジスタをクリアし、"previous" はレジスタの前の (または現在の) 内容を使用する
5164+ (表示方法によって異なる)。
5165+
5166+ 2 番目の引数であるアクセスタイプは、"explicit" または "implicit" のいずれかに
5167+ なる。"explicit" とは、テキストを挿入したり、| getreg() | を呼び出したりなど、
5168+ ユーザーがクリップボードに直接アクセスしていることを意味する。"implicit" と
5169+ は、| :registers | が呼び出されたときや、無関係な操作によって Vim がクリップボー
5170+ ドにアクセスしたときなど、クリップボードが間接的にアクセスされていることを意味
5171+ する。
51105172
5173+ Vim の一部の操作は暗黙的にクリップボードに間接的にアクセスするため、これは便利
5174+ である。例えば、OSC52 コマンド (エスケープコードを介してクリップボードにアクセ
5175+ スする) のプロバイダを作成する場合などである。多くの端末では、Vim がクリップ
5176+ ボードにアクセスするかどうか確認メッセージが表示される。これは、バックグラウン
5177+ ドでクリップボードにアクセスする操作を行うたびに端末が許可を求めるため、非常に
5178+ 煩わしい場合がある。暗黙的なアクセスを処理する良い方法は、レジスタの内容を変更
5179+ せずに "previous" を返すことである。
5180+
5181+ *clipboard-provider-copy*
5182+ "copy" コールバックは何も返さず、指定された引数を順番に受け取る:
5183+ - 操作対象のレジスタ
5184+ - | getregtype() | に準拠したレジスタの型。
5185+ - コピーする文字列のリスト
5186+
5187+ プロバイダは与えられた情報を使って自由に操作できる。この関数は、クリップボード
5188+ レジスタ(群)を変更するリクエストごとに呼び出される。
5189+
5190+ *clipboard-provider-textlock*
5191+ "paste" および "copy" コールバックの両方で、バッファのテキストを変更することは
5192+ できない。| textlock | を参照。
5193+
5194+ *clipboard-provider-example*
5195+ 以下は、OSC52 コマンドを通じてクリップボードプロバイダ機能を使用するスクリプト
5196+ の例: >vim
5197+
5198+ func Available()
5199+ return "*"
5200+ endfunc
5201+
5202+ func Paste(reg, type)
5203+ " 暗黙的なアクセスの場合は何もしない
5204+ if a:type == "implicit"
5205+ return "previous"
5206+ endif
5207+
5208+ augroup OSC
5209+ autocmd!
5210+ autocmd TermResponseAll osc ++once call feedkeys("\<F30> ", '!')
5211+ augroup END
5212+
5213+ " コマンドを送信
5214+ call echoraw("\<Esc> ]52;;?\<Esc> \\")
5215+
5216+ " 自動コマンドがトリガーされるまで待つ
5217+ while getchar(-1) != "\<F30> "
5218+ endwhile
5219+
5220+ autocmd! OSC
5221+
5222+ " base64 データを取り出す
5223+ let l:stuff = matchstr(v:termosc, '52;.\+;\zs[A-Za-z0-9+/=]\+')
5224+
5225+ return ("", blob2str(base64_decode(l:stuff)))
5226+ endfunc
5227+
5228+ func Copy(reg, type, lines)
5229+ call echoraw("\<Esc> ]52;c;" ..
5230+ \ base64_encode(str2blob(a:lines)) .. "\<Esc> \\")
5231+ endfunc
5232+ let v:clipproviders["myosc"] = {
5233+ \ "available": function("Available"),
5234+ \ "paste": {
5235+ \ '*': function("Paste")
5236+ \ },
5237+ \ "copy": {
5238+ \ '*': function("Copy")
5239+ \ },
5240+ \ }
5241+ set clipmethod=myosc
5242+
5243+ <
51115244 vim:tw=78:ts=8:noet:ft=help:norl:
0 commit comments