SSH'd (через Cygwin) vim для записи в локальный файл
Итак, я пытаюсь решить проблему получения содержимого дерганного регистра из сеанса SSH в Vim для перехода в буфер обмена Windows.
Вот сценарий:
- SSH в среду разработки
- Используйте Vim для редактирования файлов на сервере (не с локальным Cygwin Vim)
- Текст янки
Что я хочу сделать, это использовать встроенный /dev/clipboard
в Cygwin, чтобы получить вырванное содержимое, чтобы я мог начать делиться между ними.
Есть 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 вчера (возможно, я чего-то не знаю).
Мысли?
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>
Он хорошо работает для того, что делает: создает новую вкладку, получает скрытый (развернутый) текст и сохраняет макет буфера.
Хотя это не дает прямого ответа на ваш вопрос, это решение, которое я использую для того же сценария (ssh / tmux / vim).
Я рекомендую консольное окно Mintty Cygwin вместо стандартного. Это позволяет копировать и вставлять. В mintty, выделение левой кнопкой мыши также копирует и вставляет среднюю мышь.
Если у vim есть видимые номера строк, вам придется либо временно их отключить, либо я просто делаю cat файл в новом окне tmux.