Support relative line number on wrapped lines (#39268)
**Problem:** Current relative line numbering creates a mismatch with vim-style navigation when soft wrap is enabled. Users must mentally calculate whether target lines are wrapped segments or logical lines, making `<n>j/k` navigation unreliable and cognitively demanding. **How things work today:** - Real line navigation (`j/k` moves by logical lines): Requires determining if visible lines are wrapped segments before jumping. Can't jump to wrapped lines directly. - Display line navigation (`j/k` moves by display rows): Line numbers don't correspond to actual row distances for multi-line jumps. **Proposed solution:** Count and number each display line (including wrapped segments) for relative numbering. This creates direct visual-to-navigational correspondence where the relative number shown always matches the `<n>j/k` distance needed. **Benefits:** - Eliminates mental overhead of distinguishing wrapped vs. logical lines - Makes relative line numbers consistently actionable regardless of wrap state - Preserves intuitive "what you see is what you navigate" principle - Maintains vim workflow efficiency in narrow window scenarios Also explained an discussed in https://github.com/zed-industries/zed/discussions/25733. Release Notes: Release Notes: - Added support for counting wrapped lines as relative lines and for displaying line numbers for wrapped segments. Changes `relative_line_numbers` from a boolean to an enum: `enabled`, `disabled`, or `wrapped`. --------- Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
This commit is contained in:
co-authored by
Conrad Irwin
parent
1c4923e1c8
commit
d5e297147f
+2
-2
@@ -606,7 +606,7 @@ Here are a few general Zed settings that can help you fine-tune your Vim experie
|
||||
| Property | Description | Default Value |
|
||||
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- |
|
||||
| cursor_blink | If `true`, the cursor blinks. | `true` |
|
||||
| relative_line_numbers | If `true`, line numbers in the left gutter are relative to the cursor. | `false` |
|
||||
| relative_line_numbers | If `"enabled"`, line numbers in the left gutter are relative to the cursor. If `"wrapped"`, they also display for wrapped lines. | `"disabled"` |
|
||||
| scrollbar | Object that controls the scrollbar display. Set to `{ "show": "never" }` to hide the scroll bar. | `{ "show": "auto" }` |
|
||||
| scroll_beyond_last_line | If set to `"one_page"`, allows scrolling up to one page beyond the last line. Set to `"off"` to prevent this behavior. | `"one_page"` |
|
||||
| vertical_scroll_margin | The number of lines to keep above or below the cursor when scrolling. Set to `0` to allow the cursor to go up to the edges of the screen vertically. | `3` |
|
||||
@@ -620,7 +620,7 @@ Here's an example of these settings changed:
|
||||
// Disable cursor blink
|
||||
"cursor_blink": false,
|
||||
// Use relative line numbers
|
||||
"relative_line_numbers": true,
|
||||
"relative_line_numbers": "enabled",
|
||||
// Hide the scroll bar
|
||||
"scrollbar": { "show": "never" },
|
||||
// Prevent the buffer from scrolling beyond the last line
|
||||
|
||||
@@ -204,7 +204,7 @@ TBD: Centered layout related settings
|
||||
"folds": true, // Show/hide show fold buttons in the gutter.
|
||||
"min_line_number_digits": 4 // Reserve space for N digit line numbers
|
||||
},
|
||||
"relative_line_numbers": false, // Show relative line numbers in gutter
|
||||
"relative_line_numbers": "enabled", // Show relative line numbers in gutter
|
||||
|
||||
// Indent guides
|
||||
"indent_guides": {
|
||||
|
||||
Reference in New Issue
Block a user