Fix . repeat for remapping surrounds/exchange actions (#26101)
Closes #ISSUE cc @thomasheartman Release Notes: - vim: Fixes `.` repeat for remapped surrounds/exchange actions
This commit is contained in:
parent
47f8f891c8
commit
ec4719146a
2 changed files with 40 additions and 19 deletions
|
@ -561,4 +561,41 @@ impl Operator {
|
||||||
| Operator::ToggleComments => false,
|
| Operator::ToggleComments => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn starts_dot_recording(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
Operator::Change
|
||||||
|
| Operator::Delete
|
||||||
|
| Operator::Replace
|
||||||
|
| Operator::Indent
|
||||||
|
| Operator::Outdent
|
||||||
|
| Operator::AutoIndent
|
||||||
|
| Operator::Lowercase
|
||||||
|
| Operator::Uppercase
|
||||||
|
| Operator::OppositeCase
|
||||||
|
| Operator::ToggleComments
|
||||||
|
| Operator::ReplaceWithRegister
|
||||||
|
| Operator::Rewrap
|
||||||
|
| Operator::ShellCommand
|
||||||
|
| Operator::AddSurrounds { target: None }
|
||||||
|
| Operator::ChangeSurrounds { target: None }
|
||||||
|
| Operator::DeleteSurrounds
|
||||||
|
| Operator::Exchange => true,
|
||||||
|
Operator::Yank
|
||||||
|
| Operator::Object { .. }
|
||||||
|
| Operator::FindForward { .. }
|
||||||
|
| Operator::FindBackward { .. }
|
||||||
|
| Operator::Sneak { .. }
|
||||||
|
| Operator::SneakBackward { .. }
|
||||||
|
| Operator::Mark
|
||||||
|
| Operator::Digraph { .. }
|
||||||
|
| Operator::Literal { .. }
|
||||||
|
| Operator::AddSurrounds { .. }
|
||||||
|
| Operator::ChangeSurrounds { .. }
|
||||||
|
| Operator::Jump { .. }
|
||||||
|
| Operator::Register
|
||||||
|
| Operator::RecordRegister
|
||||||
|
| Operator::ReplayRegister => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -827,22 +827,9 @@ impl Vim {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn push_operator(&mut self, operator: Operator, window: &mut Window, cx: &mut Context<Self>) {
|
fn push_operator(&mut self, operator: Operator, window: &mut Window, cx: &mut Context<Self>) {
|
||||||
if matches!(
|
if operator.starts_dot_recording() {
|
||||||
operator,
|
self.start_recording(cx);
|
||||||
Operator::Change
|
}
|
||||||
| Operator::Delete
|
|
||||||
| Operator::Replace
|
|
||||||
| Operator::Indent
|
|
||||||
| Operator::Outdent
|
|
||||||
| Operator::AutoIndent
|
|
||||||
| Operator::Lowercase
|
|
||||||
| Operator::Uppercase
|
|
||||||
| Operator::OppositeCase
|
|
||||||
| Operator::ToggleComments
|
|
||||||
| Operator::ReplaceWithRegister
|
|
||||||
) {
|
|
||||||
self.start_recording(cx)
|
|
||||||
};
|
|
||||||
// Since these operations can only be entered with pre-operators,
|
// Since these operations can only be entered with pre-operators,
|
||||||
// we need to clear the previous operators when pushing,
|
// we need to clear the previous operators when pushing,
|
||||||
// so that the current stack is the most correct
|
// so that the current stack is the most correct
|
||||||
|
@ -853,9 +840,6 @@ impl Vim {
|
||||||
| Operator::DeleteSurrounds
|
| Operator::DeleteSurrounds
|
||||||
) {
|
) {
|
||||||
self.operator_stack.clear();
|
self.operator_stack.clear();
|
||||||
if let Operator::AddSurrounds { target: None } = operator {
|
|
||||||
self.start_recording(cx);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
self.operator_stack.push(operator);
|
self.operator_stack.push(operator);
|
||||||
self.sync_vim_settings(window, cx);
|
self.sync_vim_settings(window, cx);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue