2013-03-26 2 views
1

Есть ли какой-либо эквивалент :autoread при использовании netrw для доступа к удаленным файлам в vim?vim autoread + netrw для предотвращения случайной перезаписи

Я получаю доступ к файлам на своем рабочем компьютере удаленно через netrw, а затем, когда я прихожу на работу, изменяйте там файлы. Однако, если я вернусь к удаленному доступу, легко забыть перезагрузить файл, если он уже открыт в буфере - если он был изменен на рабочем компьютере, то следующий :w перезапишет любые изменения, которые я сделал во время на работе. Я ищу «защитную сетку», чтобы снизить риск потери данных (к счастью, я еще не потерял из-за .swp файлов, но это не очень обнадеживающая сеть).

+1

Использование надлежащего VCS может предоставить вам защитную сетку, которую вы ищете. Или используя Vim непосредственно на удаленной машине. – romainl

+0

Использование VCS непосредственно через vim было бы отличным вариантом. Использование vim напрямую не является реальным вариантом, по крайней мере для меня, поскольку он предотвращает использование gvim и добавляет отставание в процессе редактирования. – keflavich

+0

GVim не лучше, чем CLI Vim, и да, просто поместите свои вещи в репозиторий Git, клонируйте его на свой домашний компьютер, работайте, совершайте, толкайте, а затем тяните, когда вы снова на работе. – romainl

ответ

1

С 'autoread', Vim просто должен проверить время изменения файла. Поскольку цели netrw находятся в другой системе, поиск будет самым дорогостоящим, и вы должны запускать его самостоятельно. Одна из идей - выполнить эту проверку на событии FocusGained, то есть когда вы вернетесь на свой (домашний компьютер) Vim. Так как в Windows GVIM доступ к netrw открывает окно консоли (запускает еще один FocusGained), и, чтобы избежать слишком частых проверок, давайте ограничим проверку на определенный промежуток времени, например. не более чем каждые 5 минут:

:autocmd FocusGained ftp://*,scp://* nested 
\ if ! &modified && ! exists('b:lastchecktime') || localtime() - b:lastchecktime > 300 | 
\  edit! | 
\  let b:lastchecktime = localtime() | 
\ endif 
+0

Это умное решение, мне оно нравится. Тем не менее, я думаю, что я предпочел бы «редактировать» над «edit!» - я предпочел бы получить предупреждение, если бы я сделал как локальные, так и удаленные изменения вместо того, чтобы просто удалять локальные изменения. – keflavich

+1

Непеременные локальные изменения не перезаписываются; вот что! & модифицировано' для. С ': edit' вы получите предупреждение в этом случае; мое решение остается безмолвным. –

1

Вы попробовали :checktime?

 Check if any buffers were changed outside of Vim. 
     This checks and warns you if you would end up with two 
     versions of a file. 
     [...] 
     Each loaded buffer is checked for its associated file 
     being changed. If the file was changed Vim will take 
     action. If there are no changes in the buffer and 
     'autoread' is set, the buffer is reloaded. Otherwise, 
     you are offered the choice of reloading the file. 
Смежные вопросы