Прозрачное редактирование удаленных файлов в Windows с помощью ssh / Putty и netrw - PullRequest
7 голосов
/ 23 августа 2010

Хорошо, ребята, возможно, об этом уже спрашивали, но я искал и бегал, ничего не бросил, так что я рискую здесь.

Я использую последний vim (gvim 7.3), наWindows 7 64bit.

У меня есть несколько удаленных файлов, которые я хочу редактировать напрямую с помощью vim, используя netrw.

Прямо сейчас, у меня есть полностью работающая прозрачная ssh-связь с моимудаленные хосты, благодаря Putty, Pageant и открытым / закрытым ключам.

Я успешно настроил доступ на чтение / запись к удаленным файлам с помощью следующих исправлений:

#### .vimrc ####
let g:netrw_cygwin= 0
let g:netrw_scp_cmd = 'c:\"Program Files (x86)"\PuTTY\pscp.exe -q -batch'
let g:netrw_sftp_cmd= '"c:\"Program Files (x86)"\PuTTY\psftp.exe'

Затем я могу получить доступфайл с:

:e scp:\\user@host:port\\home\me\some-file.txt

И каждый раз, когда я обращаюсь к удаленному файлу, Vim запускает приглашение Windows (cmd.exe):

C:\Windows\system32\cmd.exe /c c:\"Program Files (x86)"\PuTTY\pscp.exe -q -batch
 -P 22 "C:\Users\me\AppData\Local\Temp\VIF215E.tmp" "user@host:/home/me/some-file.txt"
Hit any key to close this window...

Моя проблема заключается в том, что нажатие клавиши снаружиVim каждый раз, когда я хочу открыть / написать файл, вообще неэффективен.

Так что мой вопрос (ы):

  • Правильно ли я делаю это?путь ?
  • Есть ли другой способ прозрачного доступа к удаленному файлу с помощью ssh в Windows?
  • Если нет, есть ли способ избавиться от "Нажмите любую клавишу, чтобы закрыть это окно ...", когда Vim запускает pscp.exe для putty?

Большое спасибо иhappy vimming.

РЕДАКТИРОВАТЬ: Примечание для себя в прошлом: Чувак, просто иди с Linux и ванильным gvim / ssh.Вы поблагодарите меня позже (и посмотрите на spf13-vim)

Ответы [ 6 ]

4 голосов
/ 25 января 2012

Это то, что я получил сегодня (gVim 7.3 в Win 7) (у меня ушло много часов, чтобы наконец-то заработать):

set nocompatible
let g:netrw_cygwin = 0
let g:netrw_list_cmd = "plink.exe -P ##### -pw MyPass user@host.com ls -Fa "
let g:netrw_ssh_cmd  = "plink -T -ssh"
let g:netrw_scp_cmd  = "pscp -P ##### -pw MyPass -scp"
let g:netrw_sftp_cmd = "pscp -pw MyPass -sftp"
or
let g:netrw_sftp_cmd = "psftp -P ##### -pw MyPass user@host.com"

С помощью первой команды убедитесь, что после -Fa есть [пробел], иначе вы получите ошибки. Затем вы можете подключиться к Vim через

:e scp://user@host:port#/(path to file)
:e sftp://user@host:port#/(path to file)

Я надеюсь, что это поможет некоторым Vimmers изо всех сил пытаться понять это и заставить это работать. Ура!

3 голосов
/ 01 марта 2011

Просто поместите эту строку в ваш vimrc:

let g:netrw_silent = 1

Это будет запускать scp асинхронно (как при использовании! Start)

2 голосов
/ 19 марта 2011

Вместо

let g:netrw_scp_cmd = 'c:\"Program Files (x86)"\PuTTY\pscp.exe -q -batch'

Я должен был использовать

let g:netrw_scp_cmd = 'c:\"Program Files (x86)"\PuTTY\pscp.exe -q'

В windows 7, замазка версии 0.6, опция -batch не работала!

2 голосов
/ 23 августа 2010

Это кажется слишком сложным.

Я использую SSHFS в Linux для достижения этой цели. Это позволяет вам локально смонтировать удаленный путь по SSH.

Нечто подобное доступно и для Windows: http://dokan -dev.net / ru / . Это должно устранить необходимость всех модификаций на стороне Vim.

1 голос
/ 14 февраля 2015

WINSCP - это круто. Я думаю, что он копирует временный файл локально, а затем FTP, но он «прозрачный» и очень удобный для пользователя.

0 голосов
/ 26 января 2017

Я считаю, что намного проще запустить Cygwin. Установите openssh и gvim в cygwin, затем запустите:

$ gvim scp://user@host//path/to/file

Обратите внимание на двойную косую черту между хостом и путем. Без дополнительной косой черты он будет считывать путь относительно домашнего каталога пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...