SSH'd (via Cygwin) vim para gravar no arquivo local

1

Ok, estou tentando resolver o problema de obter o conteúdo de um registro de uma sessão do SSH no Vim, para ir para a área de transferência do Windows.

Este é o cenário:

  • SSH no ambiente de desenvolvimento
  • Use o Vim para editar arquivos no servidor (não com o Cygwin Vim local)
  • texto ianque

O que eu quero fazer é usar o /dev/clipboard embutido no Cygwin para obter o conteúdo do yanked para que eu possa começar a compartilhar entre os dois.

Há um VimScript para fazer isso localmente (ou seja, você tem acesso direto a /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>

link

O que eu gostaria de fazer é ver se há uma maneira de falar com o Cygwin a partir daqui, ou se posso scp do conteúdo (ou algo assim). Não consigo / não posso armazenar senhas / senhas e, idealmente, quero que isso seja o mais "transparente" possível.

Além disso, estou executando isso através do tmux, se isso abrir o acesso em qualquer lugar. Não tenho certeza se isso é relevante, pois acabei de começar a jogar com o tmux ontem (pode haver algo que eu desconheço).

Pensamentos?

    
por Tim 25.06.2014 / 19:05

2 respostas

0

Aqui está minha solução:

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>

Funciona bem para o que faz: cria uma nova aba, obtém texto oculto (sem invólucro) e preserva o layout do buffer.

    
por 08.07.2014 / 21:55
0

Enquanto isso não responde diretamente a sua pergunta, é a solução que eu uso para o mesmo cenário (ssh / tmux / vim).

Eu recomendo a janela do console cygwin da casa da moeda em vez da janela padrão. Isso permite copiar e colar. Na casa da moeda, a seleção com o mouse esquerdo também copia e as pastas do meio do mouse.

Se o vim tiver números de linha visíveis, você terá que desativá-los temporariamente, ou o que eu faço é apenas colocar o arquivo em uma nova janela do tmux.

link

    
por 25.06.2014 / 19:24