Vim: Сохранять историю файла после его изменения и перезагрузки. - PullRequest
3 голосов
/ 05 января 2010

Если я редактирую файл в Vim, то какая-то внешняя программа меняет файл, Vim говорит мне:

W11: Warning: File "test.erl" has changed since editing started
See ":help W11" for more info.
[O]K, (L)oad File: 

Если я L загрузлю файл, вся история отмены будет потеряна.

Есть ли способ избежать этого?

Ответы [ 5 ]

2 голосов
/ 20 декабря 2010

Обновление: кажется, что это одна из новых функций в Vim 7.3: https://groups.google.com/group/vim_announce/browse_thread/thread/66c02efd1523554b

1 голос
/ 05 января 2010

Я не верю, что это возможно.

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

0 голосов
/ 31 марта 2014

Это обходной путь, который я использовал до Vim 7.3:

" :e usually clears undo history, so we don't really do :e any more.
" Instead we delete the contents of the buffer, then read the file in, which
" is an operation we can undo.  We must delete the top (empty) line also.

:map :e<Enter> :%d<Enter>:r<Enter>:0<Enter>dd

Когда вы видите предупреждение, вам нужно будет нажать o k вместо l oad, а затем выполнить загрузку самостоятельно: :e<Enter>

Есть два недостатка (хотя я нашел компромисс приемлемым):

  • Вы теряете линию, на которой вы были. Ваш курсор остается в верхней части файла.
  • Vim по-прежнему считает, что буфер не синхронизирован с файлом, поэтому при следующем сохранении может потребоваться выполнить :w! вместо обычного :w, и вам потребуется нажать y, чтобы подтвердить перезаписать.

Редактировать: может быть обходной путь для второй проблемы .

Редактировать: Первая проблема может быть решена с помощью немного большего количества сценариев (см. :h line.)

0 голосов
/ 05 января 2010

G'day,

Я не уверен, но настройка автоматического чтения, т. Е. Ввод :set autoread, оставляет историю отмены файла, когда он изменяется?

Хммм. Я думаю, вероятно, не потому, что история изменений поддерживается как номера строк, и vim не знает, относятся ли эти номера строк к измененному файлу.

Кстати, WTF вы редактируете файл, который все равно изменяется внешними силами? Звучит опасно для меня. (-:

0 голосов
/ 05 января 2010

Я не понимаю, как vim мог отслеживать то, что он не делал.

Итак, что касается вопроса, я бы предложил - контроль источников ... но это, вероятно, не тот ответ, который вы ищете.

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