【问题标题】:vim copy and paste via a shared filevim 通过共享文件复制和粘贴
【发布时间】:2017-08-22 20:46:16
【问题描述】:

如何增加 vim 的 yank 和 paste,所以当我 yank 时,vim 会将内容写入文件。当我粘贴时,它使用文件中的内容。我想要一个系统范围的文件作为全局缓冲区。

上下文:我在远程服务器(通过 ssh)上以不同的 tmux 拆分运行 vim。我想在 tmux 拆分中的 vim 之间无缝复制和粘贴。我尝试了一堆插件,但没有一个有效,因此问题。

【问题讨论】:

  • 你到底卡在哪里了?应该可以编写一个范围命令来执行此操作,并覆盖y 和p。但我建议不要使用y 和p,因为您需要处理很多注册站点。
  • @DoktorOSwaldo 我试过那个答案stackoverflow.com/a/11052783/1082727。但是,复制/粘贴不稳定。有时它会复制有时它不会。我不知道如何诊断问题。 vim 如何写入和读取文件可能有些复杂。
  • 服务器有 X 服务器吗?那么X-Forwarding将是一种可能性。如果不使用 vim splits 而不是 tmux splits 值得考虑,但并不适合所有用例。使用 tmux 剪贴板应该可以工作。我真的无法进一步帮助你,只是暗示它必须是相同的 tmux 会话才能工作。将粘贴的文本写入文件是可以实现的,但是,如果您想使用普通的 vim 命令,这将是非常重要的,我不建议这样做。
  • 您无需写入文件即可执行此操作。只需修复您的剪贴板集成。我经常 ssh 到不同终端窗口中的两台不同服务器,并且可以拉入一个 vim 并粘贴到另一个 vim,无论我使用的是 Windows、MacOS 还是 Linux。如何做到这一点取决于您在每一侧使用的操作系统和终端,tmux 会使它复杂化(但仍然有效),因此您必须研究您的特定情况。

标签: vim vi


【解决方案1】:

我相信 vim 允许你这样做:

  1. 在文件 A 中拉出一些东西
  2. :wv 并回车
  3. 转到文件 B
  4. :rv 并回车
  5. 点击p 粘贴您(现在)全局剪贴板的内容

这应该适用于不同的 vim 会话,无论它们是否在不同的 tmux 窗格中运行。

【讨论】:

  • 别担心,这不会删除你的 .viminfo 它只是附加
【解决方案2】:

你想看看:

  • map-operator 因为y 是一个操作符:一个动作挂起的命令
  • readfile() 和 writefile() 导致 r 或 w 是命令,很好用,但不适用于脚本
  • visualmode() 获取选择

共享文件被硬编码/tmp/yank.txt:

function! Yank(type, ...)
  " Invoked from Visual mode, use gv command.
  if a:0
    silent exe "normal! gvy"
  elseif a:type == 'line'
    silent exe "normal! '[V']y"
  else
    silent exe "normal! `[v`]y"
  endif

  call writefile([@@], '/tmp/yank.txt')
endfunction


function! Paste(is_back)
  let @t = join(readfile('/tmp/yank.txt'), '')
  if a:is_back
    normal! "tP
  else
    normal! "tp
  endif
endfunction


nnoremap y :set opfunc=Yank<CR>g@
nmap Y Vy
vnoremap y :call Yank(visualmode(), 1)<CR>
vnoremap Y :call Yank(visualmode(), 1)<CR>


nnoremap p :call Paste(0)<CR>
nnoremap P :call Paste(1)<CR>

【讨论】:

    【解决方案3】:

    yankring 插件将 yanks 保存在一个文件中。然后,您可以粘贴之前由p&lt;C-n&gt; 或p&lt;C-p&gt; 复制的任何文本。

    如果这个不这样做,您至少可以尝试根据您的需要对其进行逆向工程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      相关资源
      最近更新 更多