タスク

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: spawntask: 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_FILEZED_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}

これらの環境変数は、タスクの cwdargs、および 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 ファイルを介して、インラインの実行可能インジケーターのデフォルトアクションを、次の優先順位でオーバーライドすることをサポートしています。

  1. ワークスペースの tasks.json
  2. グローバルな tasks.json
  3. 言語が提供するタグバインディング(デフォルト)。

タスクにタグを付けるには、タスクテンプレートの tags フィールドに実行可能タグ名を追加します。

{
  "label": "echo current file's path",
  "command": "echo $ZED_FILE",
  "tags": ["rust-test"]
}

そうすることで、実行可能インジケーターに表示されるタスクを変更できます。