*if_mzsch.txt* For Vim バージョン 8.1. Last change: 2019 Jul 21 VIMリファレンスマニュアル by Sergey Khorev
Vim の MzScheme インターフェイス
1. コマンド | |mzscheme-commands| |
2. 例 | |mzscheme-examples| |
3. スレッド | |mzscheme-threads| |
4. MzScheme から Vim にアクセスする | |mzscheme-vim| |
5. mzeval() Vim 函數 | |mzscheme-mzeval| |
6. 函數參照を使ふ | |mzscheme-funcref| |
7. 動的ローディング | |mzscheme-dynamic| |
8. MzScheme のセットアップ | |mzscheme-setup| |
{Vim が |+mzscheme| 機能付きでコンパイルされたときのみ利用できます}
Brent Fulgham の作業にもとづいてゐます。
動的ローディングは Sergey Khorev によつて追加されました。
MzScheme と PLT Scheme は Racket といふ名前になりました。詳しいことは http://racket-lang.org を見てください。
Racket 5.x (5.3.1も含む) の futures と places は Vim から作成されたプロセスでは機能しません。簡單な解決法はそれらの機能を無效にした Racket を自分でビルドすることです:
./configure --disable-futures --disable-places --prefix=your-install-prefix
プロセスを高速化するには、‘--disable-gracket’ と ‘--disable-docs’ も指定するといいかもしれません。
MzScheme のステートメント {stmt} を實行します。
MzScheme のスクリプト {script} を實行します。
Note:
このコマンドは MzScheme 用の機能を含めてコンパイルされてゐないときは機能しません。エラーを抑制するには |script-here| を參照してください。
{script} 以降の {endmarker} の前には空白を入れることはできません。
"<<" の後の [endmarker] を省略した場合は |:append| や |:insert| コマンドのやうにドット ’.’ で {script} を閉ぢます。
{file} 內の MzScheme スクリプトを實行します。
これらのコマンドは、本質的には同じことを行ひます - つまり、MzScheme のコードを、與へられた "現在の範圍" に對して實行します。
:mzscheme の場合は、實行するコードはコマンドラインから與へます。:mzfile の場合は、實行するコードは指定したファイルから讀み込まれます。
MzScheme インターフェイスは、exn から派生した例外 exn:vim を定義します。Vim の樣々なエラーを通知するために、この例外が投げられます。
コンパイルの實行中に、その時點の MzScheme コレクションのパスが記錄されます。もし他にもパスを指定したい場合は、パラメーター ’current-library-collection-paths’ を使つてください。例: ユーザーごとのコレクションパスを追加するには:
:mz << EOF (current-library-collection-paths (cons (build-path (find-system-path 'addon-dir) (version) "collects") (current-library-collection-paths))) EOF
すべての機能は vimext モジュールを通して提供されます。
exn:vim は明示的なインポートをしなくても利用可能です。
モジュールを require するときは、MzScheme との衝突を避けるため、プリフィックスを使ふことも考へてください。例:
:mzscheme (require (prefix vim- vimext))
本マニュアル中、以降のすべての例は、このプリフィックスを使つてゐます。
サンドボックス |sandbox| の中で實行されてゐるときは、ファイルシステムへのアクセスや Vim インターフェイスプロシージャの實行は制限されてゐます。
:mzscheme (display "Hello") :mz (display (string-append "Using MzScheme version " (version))) :mzscheme (require (prefix vim- vimext)) ; MzScheme < 4.x 用 :mzscheme (require (prefix-in vim- 'vimext)) ; MzScheme 4.x 用 :mzscheme (vim-set-buff-line 10 "This is line #10")
使つてゐる MzScheme のバージョンを見るには:
:mzscheme (display (version))
インラインスクリプトの例:
function! <SID>SetFirstLine() :mz << EOF (display "!!!") (require (prefix vim- vimext)) ; ↑新しいバージョンでは (require (prefix-in vim- 'vimext)) (vim-set-buff-line 1 "This is line #1") (vim-beep) EOF endfunction nmap <F9> :call <SID>SetFirstLine() <CR>
ファイルの實行:
:mzfile supascript.scm
例外制禦:
:mz << EOF (require (prefix vim- vimext)) ; ↑新しいバージョンでは (require (prefix-in vim- 'vimext)) (with-handlers ([exn:vim? (lambda (e) (display (exn-message e)))]) (vim-eval "nonsense-string")) EOF
vimext モジュールの自動インスタンス化 (|vimrc| に書くことができます):
function! MzRequire() :redir => l:mzversion :mz (version) :redir END if strpart(l:mzversion, 1, 1) < "4" " MzScheme versions < 4.x では: :mz (require (prefix vim- vimext)) else " それ以降のバージョンでは :mz (require (prefix-in vim- 'vimext)) endif endfunction if has("mzscheme") silent call MzRequire() endif
MzScheme インターフェイスはスレッドをサポートしてゐます。これは OS のスレッドとは獨立してをり、よつてスケジューリングが必要になります。オプション ’mzquantum’ によつて、Vim がどれだけの時閒閒隔で MzScheme スレッドに切り替へるかが決定されます。
Note:
コンソール版 Vim のスレッドスケジューリングは GUI 版よりやや信賴性が低くなります。
’vimext’ モジュールは MzScheme インターフェイスで定義されたプロシージャへのアクセスを提供します。
Vim の Ex コマンドを實行する。
Vim の式を評價し、對應する MzScheme のオブジェクトに變換する。リスト (|Lists|) はScheme のリスト、辭書 (|Dictionaries|) ははハッシュテーブル、函數參照 (|Funcref|) は函數になる。(|mzscheme-funcref| も參照)
Note:
MzScheme の eval と名前が衝突してゐるので、呼び出すにはモジュール限定子を使つてください。
Scheme コマンドに渡された範圍の開始行を取得
Scheme コマンドに渡された範圍の終了行を取得
ビープを鳴らす
Vim の (ローカルまたはグローバルな) オプションの値を取得する。
Vim のオプションをセットする。{string} はオプション設定形式 (optname=optvalue や optname+=optval など) になつてゐなければならない。{buffer} または {window} を指定した場合、そのバッファまたはウィンドウにローカルなオプションがセットされる。{buffer-or-window} としてシンボル ’global を渡すと |:setglobal| と同じになる。
オブジェクトがバッファであるか?
オブジェクトが有效なバッファであるか?(實際に Vim のバッファに對應してゐるか)
バッファから行を取得する
バッファの {linenr} 行目を {string} にする。{string} が #f ならその行は削除される。引數 [buffer] は省略可能。省略された場合はカレントバッファが對象となる。
バッファ內の行のリストを取得する。{start} と {end} は 1 から始まる。{start} 行目と {end} 行目は含まれる。
バッファに行のリストをセットする。{string-list} が #f または null の場合、その行は削除される。リストの長さが {end} - {start} 以下である場合、足りない分の行は削除される。
バッファの名前を取得する
バッファ番號を取得する
バッファの行數を取得する
{linenr} 行目の後ろに行を插入する。{linenr} が 0 の場合、バッファの先頭に插入される。
カレントバッファ(オブジェクト)を取得する。バッファを變更するには他の MzScheme インターフェイス手續きを使ふ。
バッファの總數を取得する。
次のバッファを取得する
前のバッファを取得する。それ以上前が存在しないときは #f を返す。
{filename} といふ名前で新規バッファを開く
バッファ名を指定してバッファオブジェクトを取得する。見つからなければ #f を返す。
バッファ番號を指定してバッファオブジェクトを取得する。見つからなければ #f を返す。
オブジェクトはウィンドウか?
オブジェクトは有效なウィンドウであるか?(實際に Vim のウィンドウに對應してゐるか)
カレントウィンドウ (オブジェクト) を取得する
ウィンドウの個數を取得する
ウィンドウ番號を取得する
番號を指定してウィンドウを取得する
指定したウィンドウ內のバッファを取得する
ウィンドウの高さを取得する
ウィンドウの高さをセットする
ウィンドウの幅を取得する
ウィンドウの幅をセットする
バッファを表示してゐるウィンドウのリスト
ウィンドウ內のカーソル位置をペア (linenr . column) として取得する
カーソル位置をセットする
相互接續を容易にするために |mzeval()| 函數が提供されてゐます。この函數は MzScheme の式を評價してその結果を Vim script の値に變換したものを返します。
MzScheme インターフェイスでは函數參照 (|Funcref|) が使へます。Vim の函數を Scheme から直接呼び出せます。例:
function! MyAdd2(arg) return a:arg + 2 endfunction mz (define f2 (vim-eval "function(\"MyAdd2\")")) mz (f2 7)
または:
:mz (define indent (vim-eval "function('indent')")) " return Vim indent for line 12 :mz (indent 12)
MS-Windows では MzScheme ライブラリを動的に讀み込むことが可能です。これを行ふと |:version| の出力に |+mzscheme/dyn| が含まれるやうになります。
この場合、Vim は必要なときだけ MzScheme の DLL ファイルを檢索するやうになります。MzScheme インターフェイスを使はないときは DLL を必要としないので、DLL なしで Vim を使ふことができます。
Note:
比較的新しいバージョンの MzScheme (Racket) は scheme_main_setup によるトランポリンを用いた事前初期化處理を必要とします。そのために Vim は可能であれば常に MzScheme の DLL を初期化時に讀み込みます。これは Vim の起動を遲くするかもしれません。
MzScheme インターフェイスを使ふには MzScheme の DLL が檢索パス內に存在しなければなりません。コンソールウィンドウで "path" とタイプすると、どのディレクトリが檢索パスとなるか表示できます。
MS-Windows では、’mzschemedll’ および ’mzschemegcdll’ オプションが讀み込むライブラリの名前として使用されます。初期値はビルド時に指定されます。
DLL のバージョンは Vim をコンパイルした時の MzScheme のバージョンと一致しなければなりません。MzScheme 209 用ならば "libmzsch209_000.dll" と "libmzgc209_000.dll" となるでせう。確認するには ":version" コマンドの出力を見て、コンパイル情報から -DDYNAMIC_MZSCH_DLL="なんらか" と -DDYNAMIC_MZGC_DLL="なんらか" を探してください。
例へば、MzScheme (Racket) が C:\Racket63 にインストールされてゐる場合、次のやうに環境變數を設定する必要があるかもしれません:
PATH=%PATH%;C:\Racket63\lib PLTCOLLECTS=C:\Racket63\collects PLTCONFIGDIR=C:\Racket63\etc
Vim は if_mzsch のコアモジュールとして "racket/base" (もし存在しなければ "scheme/base" にフォールバックします) を、テストのために "r5rs" モジュールを、そして Vim のビルド時に必要な "raco ctool" コマンドを要求します。MzScheme がそれらを持つてゐなかつた場合は MzScheme の raco コマンドで次のやうにインストールできます:
raco pkg install scheme-lib # scheme/base module raco pkg install r5rs-lib # r5rs module raco pkg install cext-lib # raco ctool command