从剪贴板粘贴时自动切换到粘贴模式

从剪贴板粘贴时自动切换到粘贴模式

据我所知,复制和粘贴没有 autocmd 事件。所以我很好奇是否可以编写一个脚本,当使用剪贴板进行粘贴时切换粘贴模式。如果它可以处理Shift+InsertCtrl+Shift+v和鼠标中键,甚至是内部脚本,那就太棒了,但我主要想用键盘快捷键解决这个问题。我的 vim 有-clipboard属性。

答案1

当您使用 GVIM 或使用p/i_CTRL-R命令以及寄存器"*或进行粘贴"+时,Vim 会识别粘贴,并且一切都应该正常工作。您所指的可能是设置'pastetoggle',它用于在通过终端粘贴时切换“粘贴”模式(例如使用鼠标中键或终端快捷方式)。模式和切换映射存在的原因正是 Vim不是能够检测文本是否来自用户输入或粘贴。

您只能以某种方式教会您的终端'pastetoggle'在粘贴之前和之后发送 Vim 的键(当 Vim 当前正在运行时);这无法单独在 Vim 中解决。

答案2

我的问题实际上是有缺陷的,因为它没有准确反映我想要的,但现在我得到了我想要的。至少在我的设置中(设置了 、 、 ),set nopasteset autoindent得到copyindentsmarttab粘贴样式粘贴与pP不粘贴在插入模式下使用 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 上进行测试。

相关内容