从剪贴板粘贴的Vim命令插入命令而不是执行它们

3

为了快速执行一些命令,我想先在某个地方输入它们,然后将它们粘贴到vim中执行。以前(几年或10年前),这种方法是可行的。现在,vim会进入插入模式并将我的命令插入到文件中。我知道我可以使用宏来实现,但对于快速重复某些命令,这非常有用。找不到任何相关信息,因为当询问vim和粘贴时,只会出现与:set paste等相关的答案。以下是粘贴文本的示例:

/foo
yy?bar
p/foo
j

当在命令模式下粘贴时,应搜索下一个“foo”,复制该行,向后搜索下一个“bar”,然后粘贴复制的“foo”行,然后移到该“foo”行后面。 再次强调:我不想知道任何解决方法(宏、脚本等),我想知道如何临时禁用vim区分键盘输入和粘贴文本。


这可能更适合 https://vi.stackexchange.com/ - 也可能取决于您使用的操作系统,因此可能值得提一下。 - SpoonMeiser
3个回答

4
这是“括号粘贴模式”的结果。请参阅:help xterm-bracketed-paste
通过清除't_BE'来禁用“括号粘贴模式”:
set t_BE=

只是提一下:至少在我的环境(openSUSE 42.3)中,在执行 set t_BE= 命令之前复制到剪贴板的文本仍然会被插入,但是当在执行命令后再次复制到剪贴板时就可以正常工作了。 - pbhd
@pbhd请重新查看Hauleth的答案并检查。那个看起来更聪明。 - Ralf

2
如果你的Vim已经编译支持剪贴板,那么你可以保留't_BE'不变,而是通过@*@+将剪贴板作为寄存器执行,这可能是更加“惯用”的处理方法。
有关更多信息,请参见:h @

不知道啊,谢谢。嗯,我知道宏的工作原理,所以我本来也可以自己知道的 :-) - Ralf
对我来说也可以。但是,“set t_BE=”方法更加聪明,因为我只需在终端上用鼠标右键点击。 - pbhd
我认为这是在削弱你的 Vim,因为括号粘贴模式是让 Vim 像其他编辑器一样工作,使得粘贴“只是起作用”。但无论什么对你有效就好。 - Hauleth

1
我有同样的问题... 我有大文件的vim命令,用于批量重新格式化数百个纯文本文件。也就是说,我会:粘贴命令,下一个文件,粘贴命令,下一个文件,在此过程中使用给定的vim命令编辑数百个文件,只需要一两分钟...
然后突然停止工作,因为添加了括号粘贴模式...(我相信这是补丁8.0.0238的一部分)。
但是,我仍然喜欢在插入模式下粘贴文本的功能,并且不希望失去这个功能使vim自动缩进混乱插入的文本...
我的解决方案是,在正常或命令模式下禁用粘贴功能,同时保留插入模式下的括号粘贴...
  nmap <PasteStart> <NOP>
  nmap <PasteEnd>   <NOP>
  cmap <PasteStart> <NOP>
  cmap <PasteEnd>   <NOP>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接