0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Zed】定義へ移動した際にスクロール位置を維持する方法

0
Posted at

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 を使うと画面内のどの位置を見ていたかが一定に保たれるため、視線の移動が少なくなり読みやすくなります。

一方、特定の行を目立つ位置で確認したい場合は centertop の方が適しています。用途に応じて使い分けてください。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?