vim通过共享文件进行复制和粘贴

问题描述 投票:6回答:3

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

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

vim vi
3个回答
1
投票

我相信vim允许你这样做:

  1. 在文件A中放了一些东西
  2. :wv并点击进入
  3. 转到文件B.
  4. :rv并点击进入
  5. 点击p粘贴你(现在)全局剪贴板的内容

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


1
投票

你想看看:

  • map-operator因为y是一个运算符:一个运动待定命令
  • readfile()writefile()导致rw是命令,很好用但不适用于脚本
  • 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>

0
投票

yankring插件将yanks保存在文件中。然后,您可以粘贴由p<C-n>p<C-p>复制的任何先前文本。

如果这个没有这样做,你至少可以尝试对它进行逆向工程以满足你的需求。

© www.soinside.com 2019 - 2024. All rights reserved.