VIM: RSync при сохранении - PullRequest
5 голосов
/ 03 августа 2009

Я ищу способ отобразить команду: w, чтобы при ее использовании она синхронизировала текущий каталог и сохраняла соответствующий файл. В идеале ответ, сгенерированный командой rsync, должен быть возвращен в vim, но не в текущем файле, а в виде всплывающей подсказки или чего-то еще.

Мне удалось добиться этого в TextMate, и теперь я хочу начать работать с Vim. Я пробовал такие вещи, как: карта w: w |! Rsync. но это не похоже на работу (я новичок :))

Буду признателен за любую помощь.

Спасибо, Джо

Ответы [ 3 ]

8 голосов
/ 03 августа 2009

Вы можете подключиться к BufWritePost. Я не помню точный синтаксис, но ":he BufWritePost" и ":he autocommand" должны помочь вам.

Вы устанавливаете базовый хук, подобный этому (шаблон соответствует файлу, поэтому вы можете сделать * .your_extension):

 :au BufWritePost * !rsync

Кроме того, должен быть какой-то способ сделать его локальным для буфера.

5 голосов
/ 03 августа 2009

Если вы хотите сохранить локальную копию, то лучшим выбором будет автоматический BuzzWritePost, предложенный viraptor, но при условии, что у вас установлен плагин netrw (часть файлов времени выполнения Vim по умолчанию), вы также можете запустить vim с помощью:

vim rsync://myrsync_server.com/path

и просто отредактируйте файл, как если бы он был локальным: утилита saves обновит удаленный сервер.

:help rsync
0 голосов
/ 12 октября 2014

Для этого вы можете настроить локальные автокоманды буфера (см .: help autocmd-buflocal )

Устанавливает vim для вызова rsync после каждой записи в буфер.

au BufWritePost,FileWritePost <buffer> silent !rsync -a /path/to/somedir/ user@host:/remote/dir/ --exclude=*.sw?

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

С rsync-over-ssh это работает, если удаленный хост доступен по каналу с малой задержкой - и, возможно, не так хорошо, иначе каждая запись блокирует буфер от дальнейших обновлений до завершения rsync. Чтобы сделать опыт лучше, я рекомендую либо

  • Повторное использование SSH-соединения с использованием мультиплексирования соединений через постоянное соединение.
  • Отправка rsync в фоновом режиме, добавив & в конце команды. YMMV.
...