如何增强vim的复制和粘贴功能,使得当我复制时,vim会将内容写入文件。当我粘贴时,它会使用文件中的内容。我希望有一个全局缓冲区文件可以在系统中使用。
背景:我在远程服务器上的不同tmux分屏中运行vim(通过ssh连接)。我想在不同的tmux分屏中无缝地复制和粘贴。我尝试了很多插件,但都没有起作用,因此提出了这个问题。
:wv
并按Enter键:rv
并按Enter键p
将(现在)全局剪贴板的内容粘贴您想查看:
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>
yankring插件可以将复制的内容保存到文件中。然后,您可以通过p<C-n>
或p<C-p>
粘贴之前复制的任何文本。
如果这个插件不能满足您的需求,您至少可以尝试对其进行逆向工程。
y
和p
。但我建议不要使用y
和p
,因为你需要处理很多寄存器。 - Doktor OSwaldo