粘贴Vim的快捷方式

时间:2016-07-31 10:39:45

标签: vim rc

我正在尝试在.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>能够正常地作为命令工作。

任何帮助都会非常感激。

2 个答案:

答案 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的缩进行为。