从终端中的 vim 粘贴到 Google Docs(Firefox + Vimperator)-需要了解

从终端中的 vim 粘贴到 Google Docs(Firefox + Vimperator)-需要了解

我在将文本从终端中的 vim 复制粘贴到 FF 浏览器(使用 Vimperator)中的 Google Docs(又名 Drive)文档(以下简称 GDd)时遇到了一些问题。

笔记:

  • 我在终端中使用 Vim 7.2 打开了一个文件
  • :version同时显示+clipboard+xterm-clipboard
  • 我使用的是 Ubuntu 10.04 LTS,所以我不认为这与 Unity 有关
  • 我想使用 Vim,而不是 GVim,也不是 gedit...
  • 我是无鼠标导航的狂热粉丝,所以使用鼠标的解决方案不是我想要的。
  • 我有解决方案,但我需要理解。

我尝试过的方法以及效果如下:

  • 通过以下方式提取整个文件文本:ggvGy允许我:
    • 通过粘贴鼠标中键,不与Ctrl+vShift+Insert
      1. 此处,在用于输入问题文本的文本区域中
      2. 在 gedit 中
      3. 但在我想要粘贴的 GDd 中却不行,即使我将 Vimperator 切换到直通模式Insert
    • 之后在 XClip 中不显示xclip -o
    • 从 gedit,我可以将文本复制粘贴到 GDd 中(不需要 Vimperator 的直通模式)。
  • :%! !xclip -i(或者:first, last
    1. 报告整个文件(准确地说是所有行)已过滤,但 shell 返回 1
    2. `xclip -o' 不返回任何内容(为空)或返回先前复制的值
    3. 2. 毫不奇怪,我根本无法粘贴到 GDd,也无法粘贴到 gedit 或这里
  • 将剪贴板(:set clipboard=unnamed)设置为未命名没有帮助
  • 使用"+y"*y对整个文件文本实际上可以解决问题

因此,问题是(实际上有三个,说“分裂”我就会):

  1. 为什么鼠标中键粘贴的内容与 Ctrl+v 粘贴的内容不同,以及如何知道每个按钮粘贴的内容是什么?
  2. 为什么仅使用鼠标进行拖动(不使用寄存器)就可以,而使用键盘/XClip 却不行?
  3. 为什么未命名的寄存器没有帮助?设置后应该unnamed*寄存器相同吗?

答案1

  1. Linux 有两个剪贴板(称为“主缓冲区”和“辅助缓冲区”)。一个用于鼠标复制/粘贴,另一个用于 Ctrl-C/Ctrl-V。因此,如果您选择某些内容(例如,为了删除它),使用 Ctrl-C 放入剪贴板的内容仍然完好无损。

  2. 如果您想复制而不拉动,请尝试选择要复制的文本,然后按 CTRL+SHIFT+C,然后按 CTRL+SHIFT+V 进行复制/粘贴

我希望这会有所帮助

答案2

默认情况下,只有当您进行视觉选择(使用 v,或者等效地使用鼠标)时,剪贴板才会被填充。(在下文中,我们讨论的是“旧”X 剪贴板,即主缓冲区)。要使用“y”影响剪贴板(即使没有视觉选择),您需要:set clipboard=unnamed。我不知道为什么在您的第一个示例中,xclip -o 没有显示任何内容;它应该显示。但是,我对此有一个假设,请参见下文。

我有 10.04。我启动 vim。

:set clipboard
clipboard=autoselect,exclude:cons\|linux

我随意输入了一些文字:

asd fa sdf
asdf

现在我明白了ggVGy。在另一个终端窗口中,我输入

xclip -o

xclip 正确地显示了文件的内容。我可以用鼠标中键将其粘贴到任何地方,例如这里:

asd fa sdf
asdf

如果我只是用“v”开始视觉选择,四处移动,然后用“y”拉出,结果也是一样。但是,如果我执行“yy”(拉出当前行,而不进行视觉选择),剪贴板不会更新。

好的,现在我知道了

:set clipboard=unnamed

我这样做了ggyy(转到第一行,不使用视觉选择,将其复制到未命名的寄存器)。现在 xclip -o 显示“asd fa sdf”,我可以用鼠标中键粘贴它;X 剪贴板已使用 yank 命令填充。

结论

无需修改 vimperator,它在我的系统上就能正常工作。请重复上述操作(不使用 vimperator,见下文)以确保执行此操作时ggVGy显示xclip -o内容(与您的示例不同)。

我的假设是,vimperator 由于某种原因重置了 X 剪贴板。尝试将常规 vim 会话与 vimperator 分开:

  1. 如果您使用鼠标(左键,不按 Ctrl-Shift-C)在终端中选择某个内容,您可以使用中键将其粘贴到 vimperator 中吗?

  2. 如果您使用 vi 直观地选择某些内容,您是否可以在 gedit 中使用鼠标中键粘贴它(显然您可以)用 可以看到它xclip -o(您说您看不到,但是我不相信 :-);否则,鼠标中键将不起作用)?

相关内容