我刚刚开始用 lua 配置替换我的 vim 配置,我尝试制作一个简单的复制/粘贴到剪贴板键映射,以便我可以选择带有“v”的文本,然后单击 Ctrl+c 和 Ctrl+v 但我不能让它发挥作用。
我想做一个“+y”和“+p”
我尝试过这个,但它不起作用:
local keymap = vim.api.nvim_set_keymap
keymap("n", "<C-c>", '"+y', opts)
keymap("n", "<C-v>", '<ESC>"+pa', opts)
有什么想法吗?
试试这个:
vim.api.nvim_set_keymap("n", "<c-c>", '"*y :let @+=@*<CR>', {noremap=true, silent=true})
vim.api.nvim_set_keymap("n", "<c-v>", '"+p', {noremap=true, silent=true})
将 i,v,x... 添加到其他模式的第一个引号中。
我看到你正在做一些额外的事情,比如转义和附加,所以也许它并不适合你的工作流程 - 但这应该能让你继续下去。
我有一个地图助手功能:
-- ~/.config/nvim/lua/mappings.lua
-- in your init.lua use: require('mappings')
local function map(mode, lhs, rhs, opts)
local options = { noremap = true }
if opts then
options = vim.tbl_extend("force", options, opts)
end
vim.api.nvim_set_keymap(mode, lhs, rhs, options)
end
默认使用 options,以防万一您使用任何选项,这些选项会与选项合并。
现在您可以像这样创建映射:
-- Update Plugins
map("n", "<Leader>u", ":PackerSync<CR>")
我建议保留/使用默认的“从系统剪贴板粘贴”键盘快捷键
Ctrl
+Shift
+v
,它可以在许多(如果不是全部)终端和基于终端的应用程序中使用 - 这有两个主要好处†:
假设您同意上述内容,则可以使用以下映射分别使用
Ctrl
+c
和 Ctrl
+v
来处理 Neovim 中普通模式和可视模式下的复制和剪切:
-- Copying to system clipboard
-- From current cursor position to EOL (normal mode)
vim.keymap.set({'n'}, '<C-c>', '"+y$')
-- Current selection (visual mode)
vim.keymap.set({'v'}, '<C-c>', '"+y')
-- Cutting to system clipboard
-- From current cursor position to EOL (normal mode)
vim.keymap.set({'n'}, '<C-x>', '"+d$')
-- Current selection (visual mode)
vim.keymap.set({'v'}, '<C-x>', '"+d')
现在,每当您使用
Ctrl
+c
、Ctrl
+x
和 Ctrl
+Shift
+v
》时,您就知道您始终在与系统剪贴板进行交互。我发现从当前光标位置到行尾 (EOL) 映射的复制/剪切非常有用,因为它很好地补充了传统的基于选择的复制/剪切映射。
† 我知道可以使用相同的逻辑来证明使用默认的
Ctrl
+Shift
+c
命令进行复制也是合理的。但是,与 Ctrl
+v
不同,Ctrl
+c
和 Ctrl
+x
默认情况下不会映射到任何有用的内容,并且,进一步到上面的第 2 点,将它们用作复制/剪切正在利用大多数人已经存在的肌肉记忆。