使用 SSH (通过 Cygwin) vim 写入本地文件

使用 SSH (通过 Cygwin) vim 写入本地文件

好的,所以我正在尝试解决从 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 该文件。

http://cygwin.com/faq/faq.html#faq.using.copy-and-paste

答案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>

它可以很好地完成其功能:创建一个新选项卡、获取隐藏(展开)文本并保留缓冲区布局。

相关内容