我正在尝试在.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>
能够正常地作为命令工作。
任何帮助都会非常感激。
答案 0 :(得分:3)
如果您的Vim 不是构建的,并且支持剪贴板(:echo has('clipboard')
返回0
),那么请使用更好的Vim。
如果您的Vim 使用剪贴板支持构建(:echo has('clipboard')
返回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
答案 1 :(得分:0)
由于某种原因,<S-Insert>
和"*p
以及"+p
始终可以手动操作,但从不在我的任何地图中工作 - 尽管事实上我的&#34;原创&#34 ; vim没有剪贴板支持::echo has('clipboard')
返回0
。
我刚刚测试了gVim并遇到了同样的问题,虽然这个gVim有剪贴板支持::echo has('clipboard')
返回1
。
但是,我找到了一些解决方法来获得所需的行为:
nnoremap `v <ESC>:set paste<CR><ESC>:r!xclip -o<CR>:set nopaste<CR><ESC>
只需要安装xclip
,这是Manjaro,Arch,Debian&amp; Ubuntu宇宙。我想它也适用于许多其他发行版,但我刚刚用命名的发行版进行了测试。
此命令将vim设置为粘贴模式(停用自动缩进和填充,以便在粘贴时某些代码的格式不会搞砸),通过相应的xclip命令读取剪贴板缓冲区,并重置为正常:set nopaste
的缩进行为。