据我所知,复制和粘贴没有 autocmd 事件。所以我很好奇是否可以编写一个脚本,当使用剪贴板进行粘贴时切换粘贴模式。如果它可以处理Shift+Insert、Ctrl+Shift+v和鼠标中键,甚至是内部脚本,那就太棒了,但我主要想用键盘快捷键解决这个问题。我的 vim 有-clipboard
属性。
答案1
当您使用 GVIM 或使用p
/i_CTRL-R
命令以及寄存器"*
或进行粘贴"+
时,Vim 会识别粘贴,并且一切都应该正常工作。您所指的可能是设置'pastetoggle'
,它用于在通过终端粘贴时切换“粘贴”模式(例如使用鼠标中键或终端快捷方式)。模式和切换映射存在的原因正是 Vim不是能够检测文本是否来自用户输入或粘贴。
您只能以某种方式教会您的终端'pastetoggle'
在粘贴之前和之后发送 Vim 的键(当 Vim 当前正在运行时);这无法单独在 Vim 中解决。
答案2
我的问题实际上是有缺陷的,因为它没有准确反映我想要的,但现在我得到了我想要的。至少在我的设置中(设置了 、 、 ),set nopaste
我set autoindent
得到copyindent
了smarttab
粘贴样式粘贴与p或P和不粘贴在插入模式下使用 style paste Ctrl-Shift-v。如果我在正常模式下使用 paste Ctrl-Shift-v,会出现奇怪的行为。
我的设置可能与pastetoggle
设置不完全相同,并且它没有回答标题中的问题,但它解决了我遇到的问题。我在 mintty 和 terminator 中都测试过了。
答案3
我map
在 vim 中进行了以下设置:
set mouse=inv
noremap <MiddleMouse> :set paste<CR>"*p:set nopaste<CR>
~/.vimrc
您可以在您的或中添加此行~/.exrc
。
我认为,这很简单,不需要太多解释。
(重新)映射鼠标中键以设置粘贴模式,然后粘贴*
寄存器的内容,然后取消设置粘贴模式。
您需要鼠标支持为了这。
注意:正如问题评论中提到的,这不是在 vim 中粘贴文本的正确方法。但我们现在已经习惯在 Linux 上用 粘贴。因此,这种映射很方便。
通过 putty+xming 在 gnome-terminal 上的 vim 7.4 上进行测试。