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.