vim: Implement named registers (#12895)

Release Notes:

- vim: Add support for register selection `"a`-`"z`, `"0`-`"9`, `"-`.
`"_` and `"%`
([#11511](https://github.com/zed-industries/zed/issues/11511))

---------

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
This commit is contained in:
Paul Eguisier 2024-06-12 18:40:27 +02:00 committed by GitHub
parent 3c3dad6830
commit 001f17c011
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 454 additions and 66 deletions

View file

@ -1,12 +1,13 @@
use std::time::Duration;
use editor::{ClipboardSelection, Editor};
use gpui::{ClipboardItem, ViewContext};
use gpui::ViewContext;
use language::{CharKind, Point};
use multi_buffer::MultiBufferRow;
use settings::Settings;
use crate::{state::Mode, UseSystemClipboard, Vim, VimSettings};
use crate::{state::Mode, Vim};
pub const SYSTEM_CLIPBOARD: char = '\0';
pub struct HighlightOnYank;
@ -102,21 +103,8 @@ fn copy_selections_content_internal(
}
}
let setting = VimSettings::get_global(cx).use_system_clipboard;
if setting == UseSystemClipboard::Always || setting == UseSystemClipboard::OnYank && is_yank {
cx.write_to_clipboard(ClipboardItem::new(text.clone()).with_metadata(clipboard_selections));
vim.workspace_state
.registers
.insert(".system.".to_string(), text.clone());
} else {
vim.workspace_state.registers.insert(
".system.".to_string(),
cx.read_from_clipboard()
.map(|item| item.text().clone())
.unwrap_or_default(),
);
}
vim.workspace_state.registers.insert("\"".to_string(), text);
vim.write_registers(is_yank, linewise, text, clipboard_selections, cx);
if !is_yank || vim.state().mode == Mode::Visual {
return;
}