on master help sign in
commands: Add replace with yanked as `R`
commitc65b4dea099abc7512720e8407b53a3742083039 authorWojciech Kępka <wojtek.kepka@protonmail.com> dateMon 7 Jun 2021, 20:13 (5 years ago) parent6fc0e0b
2 files changed+21
helix-term/src/commands.rs+20 helix-term/src/keymap.rs+1
helix-term/src/commands.rs+20
@@ -1948,6 +1948,26 @@ fn _paste(reg: char, doc: &mut Document, view: &View, action: Paste) -> Option<T
19481948 None
19491949}
19501950
1951+pub fn replace_with_yanked(cx: &mut Context) {
1952+ let reg = cx.register.name();
1953+
1954+ if let Some(values) = register::get(reg) {
1955+ let (view, doc) = cx.current();
1956+
1957+ if let Some(yank) = values.first() {
1958+ let transaction =
1959+ Transaction::change_by_selection(doc.text(), doc.selection(view.id), |range| {
1960+ let max_to = doc.text().len_chars().saturating_sub(1);
1961+ let to = std::cmp::min(max_to, range.to());
1962+ (range.from(), to, Some(yank.as_str().into()))
1963+ });
1964+
1965+ doc.apply(&transaction, view.id);
1966+ doc.append_changes_to_history(view.id);
1967+ }
1968+ }
1969+}
1970+
19511971// alt-p => paste every yanked selection after selected text
19521972// alt-P => paste every yanked selection before selected text
19531973// R => replace selected text with yanked text
helix-term/src/keymap.rs+1
@@ -156,6 +156,7 @@ pub fn default() -> Keymaps {
156156 // and matching set for select mode (extend)
157157 //
158158 key!('r') => commands::replace,
159+ key!('R') => commands::replace_with_yanked,
159160
160161 KeyEvent {
161162 code: KeyCode::Home,