SSH miał (przez Cygwin) vim do zapisu do lokalnego pliku


1

Dobrze, więc próbuję rozwiązać problem pobierania zawartości szarpanego rejestru z sesji SSH w Vimie, aby przejść do schowka Windows.

Oto scenariusz:

  • SSH w środowisku programistycznym
  • Użyj Vima do edycji plików na serwerze (nie z lokalnym Cygwinem Vimem)
  • Yank tekst

Chcę użyć wbudowanego /dev/clipboard w Cygwin, aby uzyskać szarpaną zawartość, dzięki czemu mogę zacząć dzielić się między nimi.

Jest VimScript do zrobienia tego lokalnie (tzn. Masz bezpośredni dostęp do /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

Chciałbym się dowiedzieć, czy mogę w jakiś sposób porozmawiać z Cygwinem, czy mogę scp zawartość (lub coś podobnego). Nie mogę / nie przechowuję haseł / haseł, a najlepiej, aby było to jak najbardziej „przezroczyste”.

Ponadto uruchamiam to przez tmux, jeśli otwiera to dostęp w dowolnym miejscu. Nie jestem pewien, czy to jest istotne, ponieważ właśnie zacząłem grać wczoraj z tmux (może być coś, czego nie znam).

Myśli?


Czy próbowałeś X forwarding, $ ssh -X hostname?
romainl

Niestety nie mamy zainstalowanego X11 na serwerze. Mamy jednak pynotify. Tak więc, jako ćwiczenie nerwowości, mogę sprawić, żeby oglądał plik, który jest zapisywany, gdy wykonywany jest specjalnie zmapowany yank, a następnie będzie rsyncował zawartość od tego do / dev / clipboard na moim lokalnym komputerze, co powinno dać mi dostęp . Uzgadnianie TCP może zająć sekundę lub dwie, ale ... zobaczymy, jak to działa.
Tim

Odpowiedzi:


0

Chociaż nie odpowiada to bezpośrednio na twoje pytanie, jest to rozwiązanie, którego używam dla tego samego scenariusza (ssh / tmux / vim).

Polecam okno mennicy cygwin zamiast standardowego. Pozwala to na kopiowanie i wklejanie. W miętowej, zaznaczając lewą myszą również kopie i środkowe myszy.

Jeśli vim ma widoczne numery linii, albo musisz je tymczasowo wyłączyć, albo to, co robię, to po prostu plik cat w nowym oknie tmux.

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


Myślę, że jest to dobre rozwiązanie w wielu sytuacjach (: set nonu), ale gdy linie wykraczają poza to, co jest widoczne, nie jest najlepsze. To głównie sytuacja, którą próbuję rozwiązać. Przypuszczam, że mógłbym wykonać akcję, która włącza zawijanie i włącza liczby. Zastanawiam się, czy istnieje sposób monitorowania pliku i rsync go, gdy zmienia wartości. To też może zadziałać i może usunąć problem z Vima i dostarczyć go do CLI, gdzie dostępnych jest więcej narzędzi.
Tim

@Tim Do monitorowania i automatycznego rsync znalazłem dropbox jako dobre rozwiązanie dla mojego osobistego użytku.
Jarvin

Dzięki (: szukam inotify, aby sprawdzić, czy jest to przyzwoite rozwiązanie. Wydaje się pełen nadziei (nawet jeśli może wystąpić drugie opóźnienie).
Tim

Jeśli jesteś zainteresowany, sprawdź moje rozwiązanie. Myślę, że działa dobrze i daje dostęp do wszystkiego, jeśli jest zapakowany.
Tim

Jestem za miętą, rozumiem, że lepiej jest dla obsługi Unicode, ale piszesz, że polecasz „okno mennicy cygwin zamiast standardowego. Pozwala to na kopiowanie i wklejanie” wklej bardzo łatwo. jeśli uruchamiasz cmd.exe i uruchamiasz cygwin.bat, reguły kopiowania / wklejania są standardowe dla cmd. przejdź do właściwości w lewym górnym menu (alt-space menu) i zakładkę opcji i włącz tryb quickedit. następnie highlgiht i push enter, to copy. a prawym przyciskiem myszy jest wklej.
barlop

0

Oto moje rozwiązanie:

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>

Działa dobrze w tym, co robi: tworzy nową kartę, pobiera ukryty (nieopakowany) tekst i zachowuje układ bufora.


Hej, to jest dokładnie to samo pytanie, ale korzystanie z twojego rozwiązania nie działa na mnie. Powiedz mi, czy to nie jest sposób, w jaki powinienem używać: W vim, naciskam v i podświetl kilka linii, a następnie naciśnij \y i wydaje się, że uruchamia polecenie, ale kiedy próbuję wkleić, nie ma go w schowku
rasen58
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.