![使用 SSH (通过 Cygwin) vim 写入本地文件](https://linux22.com/image/1413407/%E4%BD%BF%E7%94%A8%20SSH%20%EF%BC%88%E9%80%9A%E8%BF%87%20Cygwin%EF%BC%89%20vim%20%E5%86%99%E5%85%A5%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6.png)
好的,所以我正在尝试解决从 Vim 中的 SSH 会话中获取已提取寄存器的内容并将其发送到 Windows 剪贴板的问题。
场景如下:
- 通过 SSH 进入开发环境
- 使用 Vim 编辑服务器上的文件(而不是使用本地 Cygwin Vim)
- 提取文本
我想要做的是使用 Cygwin 的内置功能/dev/clipboard
来获取提取的内容,以便我可以开始在两者之间共享。
有一个 VimScript 可以在本地执行此操作(即,您可以直接访问/dev/clipboard
):
function! Putclip(type, ...) range
let sel_save = &selection
let &selection = "inclusive"
let reg_save = @@
if a:type == 'n'
silent exe a:firstline . "," . a:lastline . "y"
elseif a:type == 'c'
silent exe a:1 . "," . a:2 . "y"
else
silent exe "normal! `<" . a:type . "`>y"
endif
"call system('putclip', @@)
"As of Cygwin 1.7.13, the /dev/clipboard device was added to provide
"access to the native Windows clipboard. It provides the added benefit
"of supporting utf-8 characters which putclip currently does not. Based
"on a tip from John Beckett, use the following:
call writefile(split(@@,"\n"), '/dev/clipboard')
let &selection = sel_save
let @@ = reg_save
endfunction
vnoremap <silent> <leader>y :call Putclip(visualmode(), 1)<CR>
nnoremap <silent> <leader>y :call Putclip('n', 1)<CR>
http://vim.wikia.com/wiki/Using_the_Windows_clipboard_in_Cygwin_Vim
我想做的是看看是否有办法从这里与 Cygwin 对话,或者我是否可以访问scp
内容(或类似的东西)。我不能/不会存储密码/密码短语,理想情况下,我希望这尽可能“透明”。
另外,我正在通过 tmux 运行它,看看它是否在任何地方都可以访问。不确定这是否相关,因为我昨天才开始使用 tmux(可能有些我不知道的东西)。
有什么想法吗?
答案1
虽然这不能直接回答您的问题,但这是我针对相同场景(ssh/tmux/vim)使用的解决方案。
我推荐使用 mintty cygwin 控制台窗口,而不是标准窗口。这样可以复制和粘贴。在 mintty 中,用鼠标左键选择也可以复制,用鼠标中键选择可以粘贴。
如果 vim 有可见的行号,您要么必须暂时关闭它们,要么我所做的只是在新的 tmux 窗口中 cat 该文件。
答案2
这是我的解决方案:
function! WinCpy ()
let s:wincpy = exists('s:wincpy') ? !s:wincpy : 1
if !s:wincpy
:q
else
silent exec "normal \<C-w>S"
silent exec "normal \<C-w>T"
silent exec "set nonu"
silent exec "set wrap"
endif
endfunction
vnoremap <leader>y :call WinCpy()<CR>
nnoremap <leader>y :call WinCpy()<CR>
它可以很好地完成其功能:创建一个新选项卡、获取隐藏(展开)文本并保留缓冲区布局。