我正在尝试将一大段代码(保留缩进)从一个 vim 终端复制到另一个 vim 终端。我想知道是否有一种直接的方法可以做到这一点?
这会被视为 vim 功能还是终端的属性?
答案1
您的问题遗漏了很多内容:您使用哪个终端仿真器?在哪个平台上?Vim 是否编译了剪贴板支持?
我在 Ubuntu 上运行 Vim 7.3,并在 Gnome Terminal 中使用剪贴板支持,所以 YMMV。
我可以V
在一个终端窗口的一个 Vim 实例中选择一个代码块,然后只需单击鼠标中键即可将其放入另一个终端窗口的另一个 Vim 实例中。无需鼠标,我可以在第一个窗口中将所选内容拖放到系统剪贴板中,然后在第二个窗口中将"*y
其放入。"*p
您可能需要:set paste
在粘贴代码块之前和:set nopaste
之后执行一些操作。
另外,当 Vim 具有内置分割窗口时,为什么要在两个不同的终端窗口中使用两个不同的 Vim 实例?
答案2
您应该能够从一个终端复制,Shift
同时用鼠标标记,然后使用鼠标中键单击或 粘贴到另一个终端Shift+insert
。
答案3
如果您使用的是标准终端(例如 GNOME Terminal 或 xterm)和正确配置的 Vim,那么这应该可以正常工作。也就是说,您应该能够使用鼠标选择要复制的文本,然后在目标 Vim 中单击鼠标中键,文本就会被粘贴。
如果块太大,无法用鼠标轻松选择,您可以改为从键盘选择文本。将光标移动到块的第一行,输入V
,将光标移动到块的底部并输入"*y
。然后,您可以像以前一样使用鼠标粘贴该文本,或者通过输入"*p
或执行
:put *
如果这不起作用,最可能的原因是您在终端中使用的 Vim 未编译为支持 X,因此无法与 X 服务器通信。您可以通过执行以下命令来查找此问题
:echo has("x11") has("xterm_clipboard")
如果你的 Vim 是使用这两个功能进行编译的,结果将为“ 1 1
”。
如果你的 Vim 没有这些功能,但你安装了 gvim,一个解决方案是在终端模式下运行 gvim,如下所示
gvim -v
答案4
这个难题有几个部分必须协同工作才能使复制/粘贴工作。
首先,“终端”必须有一种方法来从一个会话交换数据到另一个会话...大多数时候,这是由某种 GUI 管理器处理的...(XORG/Windows/etc...)它实现了某种“剪贴板”功能。
其次,“终端”应用程序本身必须能够与现有的任何剪贴板界面进行交互......以保持所有“终端”同步......
第三,shell(bash/ash/dash/csh/etc...)需要能够访问终端的剪贴板 API...
第四,VIM 需要使用其运行的 shell 提供的剪贴板 API。
任何一个故障都可能意味着您的应用程序无法在终端之间使用任何类型的剪贴板。
话虽这么说......剪贴板有一些“标准化”的 API 调用......所以假设每个位都正确完成了它的工作,它就应该可以工作。
现在...有一些方便的技巧可以让您轻松完成工作,而不必担心所有剪贴板垃圾......这可能就是您开始想要的......
VIM 允许您复制文本并将其导出到文件,然后在另一个控制台上从该文件导入文本,操作方法如下:
首先:确保您未处于“编辑”模式...(按 Esc 键)并将光标移动到要开始复制的位置,然后按下 键v
。转到要选择的内容的末尾...然后按y
。
如果此时您想在同一文档中粘贴副本...只需将光标移动到任意位置并按下p
...但由于我们要复制到另一个终端,因此我们需要在其他地方打开一个新文件进行粘贴...如下所示:
:e ~/temp-file
然后按p
粘贴文本...:w
进行编写。然后关闭:bp
该临时文件并返回到您正在处理的文件...
现在,在另一个终端上,只需转到文件中要粘贴的位置(不在编辑模式中)...然后执行:r ~/temp-file
将该文件的内容读入当前文档。完成后...请确保删除临时文件。