go_to_definition_scroll_strategy とは
go_to_definition_scroll_strategy は、定義へジャンプしたときにエディタがどのようにスクロールするかを制御する設定です。
Zed 1.2.0 時点で選択できる値は以下の4つです。
| 値 | 説明 |
|---|---|
center |
定義行をビューポートの中央に表示する(デフォルト) |
minimum |
定義行が見えるように最小限だけスクロールする |
top |
定義行をビューポートの上部付近に表示する |
preserve |
ジャンプ前のカーソル位置(縦オフセット)を維持する |
今回追加された preserve は、ジャンプ前にカーソルが画面の上から3行目にあれば、ジャンプ後の定義行も画面の上から3行目の位置に表示されるようになります。
設定方法
Zed の設定ファイル(settings.json)に以下のように追記します。
{
"go_to_definition_scroll_strategy": "preserve"
}
settings.json を開く方法
コマンドパレット(Cmd+Shift+P / Ctrl+Shift+P)を開き、「open settings」と入力して zed: open settings を実行すると設定ファイルが開きます。
preserve の動作詳細
カーソルが画面内にあるとき
ジャンプ元のカーソルが画面内に表示されている場合、そのカーソルのビューポート内での縦オフセット(上端から何行目か)を記憶し、ジャンプ先でも同じオフセットを再現します。
たとえばカーソルが画面上から1.5行分の位置にあった場合、定義元のファイルでも定義行がビューポート上から1.5行分の位置になるようにスクロールされます。
マウスホイールなどでスクロールした場合の小数行単位の位置(フラクショナルオフセット)も正確に保持されます。
カーソルが画面外にあるとき
定義へジャンプしようとした時点でカーソルが画面外にある場合は、フォールバックとして center と同じ挙動になります。つまり、定義行がビューポートの中央に表示されます。これにより、カーソルが見えない状態で位置を保持しようとして定義行も画面外に飛んでしまう事態を防いでいます。
他のストラテジーとの比較
コードリーディング中に頻繁に定義ジャンプを繰り返す場合、毎回スクロール位置がリセットされると文脈を追いにくくなります。preserve を使うと画面内のどの位置を見ていたかが一定に保たれるため、視線の移動が少なくなり読みやすくなります。
一方、特定の行を目立つ位置で確認したい場合は center や top の方が適しています。用途に応じて使い分けてください。
参考