Support relative line number on wrapped lines (rework) (#41805)
## Add relative line numbers on wrapped lines, take 2 This is a rework of https://github.com/zed-industries/zed/pull/39268 that excludes https://github.com/zed-industries/zed/pull/39268/commits/e7096d27a6463f6eb7c2a821637c5773b2460c10. This commit introduced some line number rendering issues as described in https://github.com/zed-industries/zed/issues/41422. While @ConradIrwin suggested we try to pass in the buffer rows from the calling method instead of the snapshot, that appears to have had unintended consequences and I don't think the two calculations were intended to do the same thing. Hence, this PR has removed those changes. This PR also includes the migration fix originally done by @MrSubidubi in https://github.com/zed-industries/zed/pull/41351. ## Original PR description and release notes. **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 and discussed in https://github.com/zed-industries/zed/discussions/25733. 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`.
This commit is contained in:
@@ -2994,11 +2994,33 @@ List of `string` glob patterns
|
||||
|
||||
- Description: Whether to show relative line numbers in the gutter
|
||||
- Setting: `relative_line_numbers`
|
||||
- Default: `false`
|
||||
- Default: `"disabled"`
|
||||
|
||||
**Options**
|
||||
|
||||
`boolean` values
|
||||
1. Show relative line numbers in the gutter whilst counting wrapped lines as one line:
|
||||
|
||||
```json [settings]
|
||||
{
|
||||
"relative_line_numbers": "enabled"
|
||||
}
|
||||
```
|
||||
|
||||
2. Show relative line numbers in the gutter, including wrapped lines in the counting:
|
||||
|
||||
```json [settings]
|
||||
{
|
||||
"relative_line_numbers": "wrapped"
|
||||
}
|
||||
```
|
||||
|
||||
2. Do not use relative line numbers:
|
||||
|
||||
```json [settings]
|
||||
{
|
||||
"relative_line_numbers": "disabled"
|
||||
}
|
||||
```
|
||||
|
||||
## Remove Trailing Whitespace On Save
|
||||
|
||||
|
||||
Reference in New Issue
Block a user