- 書式
- commandline [OPTIONS] [CMD]
概要
commandline
コマンドは
現在のコマンドラインバッファの内容を
設定・取得します。
無引数で起動したときは、
現在のコマンドラインの内容を出力します。
CMD
を指定したとき、
現在のコマンドラインは消去され、
CMD
に置き換わります。
訳注:自分独自の補完を記述 したり、
コマンドラインエディタ 専用の
コマンドを作成するときに役立ちます。
オプション
以下のオプションがあります。
-C
/--cursor
-
コマンドラインの内容ではなくて、
カーソル位置を設定・取得する。
無引数のとき、
現在のカーソル位置が出力される。
引数が与えられると、
その位置にカーソルを移動する。
-f
/--function
-
リーダに行読み込みの関数を仕込む(FIXME)。
このオプションは
他のオプションとは組み合わせられない。
このオプション以降の引数は
行読み込み関数の引数として解釈される。
行読み込み関数はリーダに仕込まれる。
その結果、
新たな実際のキー操作が認識されるよりも
前にリーダから返ってくる。
訳注:特にエディタコマンドを自作して
bind でキーに割り当てるときには
commandline -f repaint
を実行する必要がある。
更新方法を変更する
以下のオプションは commandline
による
コマンドラインバッファの更新方法を変更します。
-a
/--append
- 現在のコマンドラインを削除せずに、
末尾に追記する。 -i
/--insert
- 現在のコマンドラインを削除せずに、
カーソル位置に指定された文字列を挿入する。 -r
/--replace
- 現在のコマンドラインを削除し、
指定された文字列に置き換える(デフォルト)
表示・更新する部分を変更する
以下のオプションは commandline
が
表示・更新する部分を変更します。(訳注:例は後述)
-b
/--current-buffer
- バッファ全体を選択する(デフォルト)
-j
/--current-job
- 現在のジョブを選択する。
-p
/--current-process
- 現在のプロセスを選択する。
-t
/--current-token
- 現在のトークンを選択する。
表示方法を変更する
以下のオプションは commandline
による
コマンドラインバッファの表示方法を変更します。
-c
/--cut-at-cursor
- 現在のカーソル位置までのみを表示する。
-o
/--tokenize
- 選択部分をトークン化し、
1行ごとにトークンを表示する。
コマンドラインが STRING
であるときの
補完候補を出力する complete -C STRING に
commandline
が含まれているとき、
commandline
は STRING
が
現在のコマンドラインの内容であるとみなします。
実行例
以下の例はカーソル位置のジョブを
コマンドライン履歴の3番目に置き換えます。
$ commandline -j $history[3]
たとえば、コマンドラインが
以下の状態であるとします。
> echo $flounder >&2 | less; and echo $catfish ^←(flounderのo)の位置にカーソルがあるとして
そのときの commandline
コマンドの
結果は以下のようになります。
# 現在のトークン > commandline -t $flounder # 現在のトークン、かつカーソル位置まで > commandline -ct $fl # コマンドライン全体。 commandlineと無引数でも可。 > commandline -b # or just commandline echo $flounder >&2 | less; and echo $catfish # 現在のプロセスの部分。 > commandline -p echo $flounder >&2 # 現在のジョブの部分。 > commandline -j echo $flounder >&2 | less
実際に試すには
以下の内容を打ち込んで、
Alt+Zを押せば
上記の例を確認できます。
キー割り当てにおいては
bind(和訳) コマンドを使います。
エディタコマンドですので、
最後に commandline -f repaint
を
呼び出す必要があります。
bind \ez commandline_test function commandline_test echo echo t = (commandline -t) echo tc = (commandline -t -c) echo b = (commandline) echo p = (commandline -p) echo j = (commandline -j) commandline -f repaint end
最後までお読みいただき、ありがとうございました。参考になれば嬉しいです。