Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions dict.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@ Unicode:
プログラマ:
- プログラマー

プロバイダ:
- プロバイダー

プロパティ:
- プロパティー

Expand Down
141 changes: 137 additions & 4 deletions doc/eval.jax
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
*eval.txt* For Vim バージョン 9.1. Last change: 2025 Sep 25
*eval.txt* For Vim バージョン 9.1. Last change: 2025 Oct 18


VIMリファレンスマニュアル by Bram Moolenaar
Expand Down Expand Up @@ -36,6 +36,7 @@ Note: 式の評価はコンパイル時に無効化できる。無効化され
12. サンドボックス |eval-sandbox|
13. テキストロック |textlock|
14. Vim script ライブラリ |vim-script-library|
15. クリップボードプロバイダ |clipboard-providers|

テストのサポートは |testing.txt| を参照。
プロファイリングは |profiling| に記録されている。
Expand Down Expand Up @@ -1829,7 +1830,7 @@ Vim script の式(|expr1| を参照)を含めることができる。任意の
&l:option ローカルオプション変数

例: >
echo "タブストップは " .. &tabstop .. " です"
echo "タブストップは " .. &tabstop
if &insertmode

ここにはあらゆるオプション名を使うことができる。|options|を参照。ローカル変数
Expand Down Expand Up @@ -2184,11 +2185,16 @@ v:clipmethod 現在使用されているクリップボードへのアクセス
wayland Wayland プロトコルが使用されている。
x11 X11 セレクションが使用されている。
gui GUI固有のメソッドが使用されている。
other 他のメソッドが使用されています
other 他のメソッドが使用されている
none クリップボード機能が無効または使用でき
ない。
詳細は 'clipmethod' を参照。

*v:clipproviders*
v:clipproviders
クリップボードプロバイダを含む辞書。詳細については
|clipboard-providers| を参照。

*v:cmdarg* *cmdarg-variable*
v:cmdarg 2つの目的のために使われる:
1. ファイルの読み書きコマンドに与えられる余分な引数。現在のと
Expand All @@ -2215,7 +2221,7 @@ v:collate 現在のロケール設定での実行環境の照合順序。これ
を使う。
|multi-lang| を参照。
*v:colornames*
v:colornames カラー名を16進数カラー文字列に対応付ける辞書。これらのカラー名
v:colornames カラー名を16進数カラー文字列に対応付ける辞書。これらのカラー名
は、|highlight-guifg|, |highlight-guibg|, |highlight-guisp| の
パラメーターで使用できる。

Expand Down Expand Up @@ -5107,5 +5113,132 @@ NOTE: <args> のエスケープはユーザーに任される
:call dist#vim9#Launch(<args>)
:Launch <app> <args>.
<
==============================================================================
15. クリップボードプロバイダ *clipboard-providers*

Vim が |+clipboard_provider| 機能 (|+eval| 機能を必要とする) 付きでコンパイル
されている場合、カスタムクリップボードの作成が可能になる。これらのプロバイダは
"+" および "*" レジスタを処理する。Note |+wayland_clipboard| または
|+xterm_clipboard| 機能がコンパイルされていない場合は、"+" レジスタは使用でき
ないことに注意。

プロバイダを追加するには、次の形式で |v:clipproviders| 辞書に新しいエントリを
追加する: >
let v:clipproviders["name"] = {
\ "available": function("Available"),
\ "paste": {
\ '+': function("Paste"), " For the + register
\ '*': function("Paste"), " For the * register
\ },
\ "copy": {
\ '+': function("Copy"), " Same thing as above
\ '*': function("Copy"),
\ },
\ }

キーは 'clipmethod' で使用するプロバイダ名である。例えば次の例では、これを使用
するために "name" を 'clipmethod' に追加する。 >
set clipmethod=name,wayland,x11,gui

各コールバックは、文字列内の関数名、|Funcref|、または |lambda| 式のいずれかに
なる。

note これらの辞書エントリはオプションであることに注意。例えば、"copy" 機能が必
要ない場合は、単に除外することができる。Vim が何かをヤンク/コピーする場合、何
も行われない。

*clipboard-provider-available*
"available" コールバックは、使用可能なクリップボードレジスタを含む文字列を返す
必要がある。例えば、"+" レジスタのみが使用可能な場合は関数は "+" を返し、"+"
と "*" の両方が使用可能な場合は "+*" を返す。

*clipboard-provider-paste*
"paste" コールバックは、最初の引数としてペーストするレジスタ (文字列) を、2 番
目の引数としてアクセスの種類 (文字列) を受け取る。タプル/リスト、または文字列
のいずれかを返す。タプル/リストを返す場合は、以下の 2 つの要素を持つ必要がある:
- |setreg()| に準拠したレジスタのタイプ。
- 文字列のリスト
レジスタのタイプが空文字列の場合、型は自動的に選択される。|setreg()| を参照。
文字列が返される場合は、"clear" または "previous" のいずれかになる。"clear" は
レジスタをクリアし、"previous" はレジスタの前の (または現在の) 内容を使用する
(表示方法によって異なる)。

2 番目の引数であるアクセスタイプは、"explicit" または "implicit" のいずれかに
なる。"explicit" とは、テキストを挿入したり、|getreg()| を呼び出したりなど、
ユーザーがクリップボードに直接アクセスしていることを意味する。"implicit" と
は、|:registers| が呼び出されたときや、無関係な操作によって Vim がクリップボー
ドにアクセスしたときなど、クリップボードが間接的にアクセスされていることを意味
する。

Vim の一部の操作は暗黙的にクリップボードに間接的にアクセスするため、これは便利
である。例えば、OSC52 コマンド (エスケープコードを介してクリップボードにアクセ
スする) のプロバイダを作成する場合などである。多くの端末では、Vim がクリップ
ボードにアクセスするかどうか確認メッセージが表示される。これは、バックグラウン
ドでクリップボードにアクセスする操作を行うたびに端末が許可を求めるため、非常に
煩わしい場合がある。暗黙的なアクセスを処理する良い方法は、レジスタの内容を変更
せずに "previous" を返すことである。

*clipboard-provider-copy*
"copy" コールバックは何も返さず、指定された引数を順番に受け取る:
- 操作対象のレジスタ
- |getregtype()| に準拠したレジスタの型。
- コピーする文字列のリスト

プロバイダは与えられた情報を使って自由に操作できる。この関数は、クリップボード
レジスタ(群)を変更するリクエストごとに呼び出される。

*clipboard-provider-textlock*
"paste" および "copy" コールバックの両方で、バッファのテキストを変更することは
できない。|textlock| を参照。

*clipboard-provider-example*
以下は、OSC52 コマンドを通じてクリップボードプロバイダ機能を使用するスクリプト
の例: >vim

func Available()
return "*"
endfunc

func Paste(reg, type)
" 暗黙的なアクセスの場合は何もしない
if a:type == "implicit"
return "previous"
endif

augroup OSC
autocmd!
autocmd TermResponseAll osc ++once call feedkeys("\<F30>", '!')
augroup END

" コマンドを送信
call echoraw("\<Esc>]52;;?\<Esc>\\")

" 自動コマンドがトリガーされるまで待つ
while getchar(-1) != "\<F30>"
endwhile

autocmd! OSC

" base64 データを取り出す
let l:stuff = matchstr(v:termosc, '52;.\+;\zs[A-Za-z0-9+/=]\+')

return ("", blob2str(base64_decode(l:stuff)))
endfunc

func Copy(reg, type, lines)
call echoraw("\<Esc>]52;c;" ..
\ base64_encode(str2blob(a:lines)) .. "\<Esc>\\")
endfunc
let v:clipproviders["myosc"] = {
\ "available": function("Available"),
\ "paste": {
\ '*': function("Paste")
\ },
\ "copy": {
\ '*': function("Copy")
\ },
\ }
set clipmethod=myosc

<
vim:tw=78:ts=8:noet:ft=help:norl:
Loading