Neovim lua 复制并粘贴按键映射

问题描述 投票:0回答:3

我刚刚开始用 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)

有什么想法吗?

lua neovim
3个回答
4
投票

试试这个:

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... 添加到其他模式的第一个引号中。

我看到你正在做一些额外的事情,比如转义和附加,所以也许它并不适合你的工作流程 - 但这应该能让你继续下去。


1
投票

我有一个地图助手功能:

-- ~/.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>")

0
投票

我建议保留/使用默认的“从系统剪贴板粘贴”键盘快捷键

Ctrl
+
Shift
+
v
,它可以在许多(如果不是全部)终端和基于终端的应用程序中使用 - 这有两个主要好处

  1. 您保留 Neovim 视觉块选择模式的默认键盘映射。
  2. 它训练肌肉记忆,找到一条在终端环境中几乎普遍有效的捷径(导致在行动之前更少的心理检查,从而导致更快的半自主输出)。

假设您同意上述内容,则可以使用以下映射分别使用

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 点,将它们用作复制/剪切正在利用大多数人已经存在的肌肉记忆。

© www.soinside.com 2019 - 2024. All rights reserved.