Skip to content

Conversation

@dinocosta
Copy link
Member

When using the end of line motion ($) while in temporary mode, the cursor would be placed in insert mode just before the last character instead of after, just like in NeoVim.

This happens because EndOfLine kind of assumes that we're in Normal mode and simply places the cursor in the last character instead of the newline character.

This commit moves the cursor one position to the right when exiting temporary mode and the motion used was Motion::EndOfLine

  • Update vim::normal::Vim.exit_temporary_normal to now accept a Option<&Motion> argument, in case callers want this new logic to potentially be applied

Closes #42278

Release Notes:

  • Fixed temporary mode exit when using $ to move to the end of the line
When using the end of line motion ($) while in temporary mode, the
cursor would be placed in insert mode just before the last character
instead of after, just like in NeoVim.

This happens because `EndOfLine` kind of assumes that we're in `Normal`
mode and simply places the cursor in the last character instead of the
newline character.

This commit moves the cursor one position to the right when exiting
temporary mode and the motion used was `Motion::EndOfLine`

- Update `vim::normal::Vim.exit_temporary_normal` to now accept a
  `Option<&Motion>` argument, in case callers want this new logic to
  potentially be applied
@cla-bot cla-bot bot added the cla-signed The user has signed the Contributor License Agreement label Nov 14, 2025
@dinocosta dinocosta self-assigned this Nov 14, 2025
@dinocosta dinocosta marked this pull request as ready for review November 17, 2025 10:43
@dinocosta dinocosta merged commit cdcc068 into main Nov 17, 2025
23 checks passed
@dinocosta dinocosta deleted the 42278-temporary-mode-end-of-line branch November 17, 2025 11:14
dinocosta added a commit that referenced this pull request Nov 17, 2025
The `Vim.exit_temporary_normal` method had been updated
(#42742) to expect and
`Option<&Motion>` that would then be used to determine whether to move
the cursor right in case the motion was `Some(EndOfLine { ..})`.
Unfortunately this meant that all callers now had to provide this
argument, even if just `None`.

After merging those changes I remember that we could probably play
around with `clip_at_line_ends` so this commit removes those intial
changes in favor of updating the `vim::normal::Vim.move_cursor` method
so that, if vim is in temporary mode and `EndOfLine` is used, it
disables clipping at line ends so that the newline character can be
selected.

Closes [#42278](#42278)

Release Notes:

- N/A
11happy pushed a commit to 11happy/zed that referenced this pull request Dec 1, 2025
When using the end of line motion ($) while in temporary mode, the
cursor would be placed in insert mode just before the last character
instead of after, just like in NeoVim.

This happens because `EndOfLine` kind of assumes that we're in `Normal`
mode and simply places the cursor in the last character instead of the
newline character.

This commit moves the cursor one position to the right when exiting
temporary mode and the motion used was `Motion::EndOfLine`

- Update `vim::normal::Vim.exit_temporary_normal` to now accept a
`Option<&Motion>` argument, in case callers want this new logic to
potentially be applied

Closes zed-industries#42278 

Release Notes:

- Fixed temporary mode exit when using `$` to move to the end of the
line
11happy pushed a commit to 11happy/zed that referenced this pull request Dec 1, 2025
…es#42894)

The `Vim.exit_temporary_normal` method had been updated
(zed-industries#42742) to expect and
`Option<&Motion>` that would then be used to determine whether to move
the cursor right in case the motion was `Some(EndOfLine { ..})`.
Unfortunately this meant that all callers now had to provide this
argument, even if just `None`.

After merging those changes I remember that we could probably play
around with `clip_at_line_ends` so this commit removes those intial
changes in favor of updating the `vim::normal::Vim.move_cursor` method
so that, if vim is in temporary mode and `EndOfLine` is used, it
disables clipping at line ends so that the newline character can be
selected.

Closes [zed-industries#42278](zed-industries#42278)

Release Notes:

- N/A
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The user has signed the Contributor License Agreement

2 participants