2009-08-02 1 views
5

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

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

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

Спасибо, Джо

+0

Почему вы просто не редактируете файл удаленно? – innaM

+1

Joe, можете ли вы опубликовать, как вы это сделали в TextMate? :) – richardkmiller

ответ

8

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

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

:au BufWritePost * !rsync 

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

5

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

vim rsync://myrsync_server.com/path 

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

:help rsync 
0

Вы можете настроить буфер местной автокоманду сделать это (см: помощь autocmd-buflocal)

Это устанавливает Vim для вызова Rsync после каждой записи в буфер.

au BufWritePost,FileWritePost <buffer> silent !rsync -a /path/to/somedir/ [email protected]:/remote/dir/ --exclude=*.sw? 

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

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

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