Skip to content

Commit

Permalink
vim: Maintain block cursor for navigating/non-modifying operators (#2…
Browse files Browse the repository at this point in the history
…1502)

The cursor shape now only changes to underline for operators that modify
text (like: delete, change, yank) while maintaining block shape for
navigation operators (like: find, till).

This better matches Vim/Nvim's behavior where the cursor only changes
shape when an operator that will modify text is pending.

Release Notes:

- vim: Improved cursor shape behavior to better match Vim
  • Loading branch information
5brian authored Dec 14, 2024
1 parent 901dbed commit 85c3aec
Showing 1 changed file with 16 additions and 3 deletions.
19 changes: 16 additions & 3 deletions crates/vim/src/vim.rs
Original file line number Diff line number Diff line change
Expand Up @@ -626,10 +626,23 @@ impl Vim {
pub fn cursor_shape(&self) -> CursorShape {
match self.mode {
Mode::Normal => {
if self.operator_stack.is_empty() {
CursorShape::Block
if let Some(operator) = self.operator_stack.last() {
match operator {
// Navigation operators -> Block cursor
Operator::FindForward { .. }
| Operator::FindBackward { .. }
| Operator::Mark
| Operator::Jump { .. }
| Operator::Register
| Operator::RecordRegister
| Operator::ReplayRegister => CursorShape::Block,

// All other operators -> Underline cursor
_ => CursorShape::Underline,
}
} else {
CursorShape::Underline
// No operator active -> Block cursor
CursorShape::Block
}
}
Mode::Replace => CursorShape::Underline,
Expand Down

0 comments on commit 85c3aec

Please sign in to comment.