粘贴 Vim 的快捷方式

Paste shortcut for Vim

我正在尝试在 .vimrc 中设置粘贴快捷方式。

到目前为止,我已经尝试重新映射 Shift+Insert:

noremap <S-Insert> <ESC>:paste<CR><S-Insert><ESC>:nopaste<CR>

...没有用。我也试过映射系统剪贴板粘贴:

noremap ´v <ESC>:set paste<CR>"*p<ESC>:set nopaste<CR>

...但它也没有用。反引号 ` 是我用于几个自定义映射的个人领导键。我有一个德语键盘,这个东西很容易访问。

我做错了什么?我认为 "*p 用于粘贴系统的剪贴板...我希望 <S-Insert> 作为命令正常工作。

任何帮助将不胜感激。

如果您的 Vim 没有 内置剪贴板支持 (:echo has('clipboard') returns 0),获得更好的 Vim.

如果您的 Vim 内置的剪贴板支持 (:echo has('clipboard') returns 1),请使用 "+p"*p 您不需要 set paste.

如果 "+{command}"*{command} 对您来说太多了,您可以将未命名寄存器与 * 寄存器同步:

set clipboard^=unnamed

或使用 * 注册:

set clipboard^=unnamedplus

或两个寄存器都具有:

set clipboard^=unnamed,unnamedplus

并简单地使用 p.

如果您仍然想要自定义映射:

nnoremap <key> "*p
nnoremap <key> "*P
xnoremap <key> "*p
xnoremap <key> "*P

出于某种原因 <S-Insert>"*p 以及 "+p 总是手动工作,但对我来说从来没有在任何映射中工作 - 尽管我的 "original" vim 没有剪贴板支持::echo has('clipboard') returns 0.

我刚刚测试了 gVim 并遇到了同样的问题,尽管这个 gVim 支持剪贴板::echo has('clipboard') returns 1.

但是,我找到了一些解决方法来获得所需的行为:

nnoremap `v <ESC>:set paste<CR><ESC>:r!xclip -o<CR>:set nopaste<CR><ESC>

只需安装 xclip,一个存在于 Manjaro、Arch、Debian 和 Ubuntu 宇宙中的剪贴板实用程序。我想它也适用于许多其他发行版,但我刚刚用命名的发行版测试了它。

此命令将 vim 设置为粘贴模式(禁用自动缩进和其他东西,以便粘贴时某些代码的格式不会弄乱),通过相应的 xclip 命令读取剪贴板缓冲区,并重置:set nopaste.

的正常缩进行为