タスク
Zedは、統合ターミナルを使用してコマンドを生成(および再実行)し、結果を出力する方法をサポートしています。これらのコマンドは、現在編集中のファイルへのパスや選択されたテキストなど、Zedの状態の限られたサブセットを読み取ることができます。
[
{
"label": "Example task",
"command": "for i in {1..5}; do echo \"Hello $i/5\"; sleep 1; done",
//"args": [],
// Env overrides for the command, will be appended to the terminal's environment from the settings.
"env": { "foo": "bar" },
// Current working directory to spawn the command into, defaults to current project root.
//"cwd": "/path/to/working/directory",
// Whether to use a new terminal tab or reuse the existing one to spawn the process, defaults to `false`.
"use_new_terminal": false,
// Whether to allow multiple instances of the same task to be run, or rather wait for the existing ones to finish, defaults to `false`.
"allow_concurrent_runs": false,
// What to do with the terminal pane and tab, after the command was started:
// * `always` — always show the terminal pane, add and focus the corresponding task's tab in it (default)
// * `never` — avoid changing current terminal pane focus, but still add/reuse the task's tab there
"reveal": "always"
}
]
タスクの使用ワークフローを駆動するアクションは2つあります:task: spawn
と task: rerun
です。 task: spawn
は、現在のファイルで使用可能なすべてのタスクを含むモーダルを開きます。task: rerun
は、最後に生成されたタスクを再実行します。タスクモーダルからタスクを再実行することもできます。
タスクテンプレート
タスクは次のように定義できます。
- グローバルな
tasks.json
ファイル内。このようなタスクは、作業するすべてのZedプロジェクトで使用できます。このファイルは通常、~/.config/zed/tasks.json
にあります。zed: open tasks
アクションを使用して編集できます。 - ワークツリー固有(ローカル)の
.zed/tasks.json
ファイル内。このようなタスクは、そのワークツリーを含むプロジェクトで作業する場合にのみ使用できます。zed: open local tasks
を使用してワークツリー固有のタスクを編集できます。 - ワンショットタスクを使ってその場で。これらのタスクはプロジェクト固有であり、セクションをまたいで永続化されません。
- 言語拡張機能による。
変数
Zedタスクは、シェルと同じように機能します。つまり、sh形式の $VAR_NAME
構文で環境変数を参照できます。便宜のために、いくつかの追加の環境変数が設定されています。これらの変数を使用すると、現在のエディターから情報を取得し、タスクで使用できます。次の変数が使用可能です。
ZED_COLUMN
:現在の行の列ZED_ROW
:現在の行の行ZED_FILE
:現在開いているファイルの絶対パス(例:/Users/my-user/path/to/project/src/main.rs
)ZED_FILENAME
:現在開いているファイルのファイル名(例:main.rs
)ZED_DIRNAME
:ファイル名が削除された、現在開いているファイルの絶対パス(例:/Users/my-user/path/to/project/src
)ZED_RELATIVE_FILE
:ZED_WORKTREE_ROOT
を基準とした、現在開いているファイルのパス(例:src/main.rs
)ZED_STEM
:現在開いているファイルのステム(拡張子なしのファイル名)(例:main
)ZED_SYMBOL
:現在選択されているシンボル。シンボルブレッドクラムに表示される最後のシンボルと一致する必要があります(例:mod tests > fn test_task_contexts
)ZED_SELECTED_TEXT
:現在選択されているテキストZED_WORKTREE_ROOT
:現在のワークツリーのルートへの絶対パス。(例:/Users/my-user/path/to/project
)ZED_CUSTOM_RUST_PACKAGE
:(Rust固有)$ZED_FILEソースファイルの親パッケージの名前。
タスクで変数を使用するには、ドル記号($
)を接頭辞として付けます。
{
"label": "echo current file's path",
"command": "echo $ZED_FILE"
}
特定の変数が使用できない場合にデフォルトを指定できる詳細構文を使用することもできます:${ZED_FILE:default_value}
これらの環境変数は、タスクの cwd
、args
、および label
フィールドでも使用できます。
ワンショットタスク
task: spawn
で開かれる同じタスクモーダルは、任意の bash ライクなコマンド実行をサポートしています。モーダルテキストフィールドにコマンドを入力し、opt-enter
を使用して生成します。
タスクモーダルは、現在のZedセッションのそれらのコマンドのリストを保持します。task: rerun
も、最後に生成されたコマンドである場合は、そのようなタスクを再実行します。
また、モーダルで現在選択されているタスクを調整することもできます(opt-e
はデフォルトのキーバインドです)。そうすると、そのコマンドがプロンプトに表示され、ワンショットタスクとして編集および生成できます。
一時的なタスク
モーダルを介してタスクを生成するときに cmd 修飾子を使用できます。このようにして生成されたタスクは、使用回数が増加しません(したがって、task: rerun
で再生成されず、タスクモーダルでのランクが高くなりません)。一時的なタスクの意図された用途は、継続的な task: rerun
使用でフローを維持することです。
タスクのカスタムキーバインド
task::Spawn
への追加引数を介して、タスクに独自のキーバインドを定義できます。前述の echo current file's path
タスクを alt-g
にバインドしたい場合は、keymap.json
ファイルに次のスニペットを追加します。
{
"context": "Workspace",
"bindings": {
"alt-g": ["task::Spawn", { "task_name": "echo current file's path" }]
}
}
実行可能なタグをタスクテンプレートにバインドする
Zedは、ワークスペースローカルおよびグローバルな tasks.json
ファイルを介して、インラインの実行可能インジケーターのデフォルトアクションを、次の優先順位でオーバーライドすることをサポートしています。
- ワークスペースの
tasks.json
- グローバルな
tasks.json
- 言語が提供するタグバインディング(デフォルト)。
タスクにタグを付けるには、タスクテンプレートの tags
フィールドに実行可能タグ名を追加します。
{
"label": "echo current file's path",
"command": "echo $ZED_FILE",
"tags": ["rust-test"]
}
そうすることで、実行可能インジケーターに表示されるタスクを変更できます。