Вот еще один способ объяснить разницу между :write
(ярлык :w
) и :update
(ярлык :up
):
Всякий раз, когда мы вводим :w
, VIM буквально записываетбуфер к файлу, независимо от того, пустой буфер или нет.Что MEAN обновит отметку времени файла до времени, введенного :w
, даже если содержимое файла на самом деле НЕ изменилось.
Хотя с:up
, как и в справочном руководстве vim , VIM будет обновлять ТОЛЬКО отметку времени при изменении файла.
Например,когда я открываю файл только для чтения, но я могу случайно (или, как обычно) набрать :w
или :wq
, и если я забочусь о метках времени файла (то есть времени последнего изменения), то пути назад нет,Следующие примеры (в оболочке BASH) показывают эффекты:
$ touch test.txt
$
$ stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 811h/2065d Inode: 98828498 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-15 22:30:52.159258193 +0800
Modify: 2014-03-15 22:30:52.159258193 +0800
Change: 2014-03-15 22:30:52.159258193 +0800
Теперь давайте VIM файл и попробуем команды :up
и :w
соответственно:
$ vim test.txt
Не редактируйте, просто наберите :up
, а затем :q
$ stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 811h/2065d Inode: 98828498 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-15 22:33:10.002269244 +0800 <--- Different!
Modify: 2014-03-15 22:30:52.159258193 +0800 <--- Didn't Change!
Change: 2014-03-15 22:30:52.159258193 +0800 <--- Didn't Change!
Как видите, изменяется только время доступа, потому что мы читаем (доступ)данные в файле.Но время изменения и время изменения остаются прежними.
Теперь давайте снова выполним vim и воспользуемся командой :w
.
$ vim test.txt
Нередактирование, НО на этот раз введите :w
, а затем :q
$ stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 811h/2065d Inode: 98828538 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-15 22:40:26.728239153 +0800 <--- Different Again!
Modify: 2014-03-15 22:40:26.728239153 +0800 <--- Changed!
Change: 2014-03-15 22:40:26.728239153 +0800 <--- Changed!
Теперь мы можем увидеть разницу между :up
и :w
!Данные файла изменены и статус файла также изменен, хотя в файле ничего не изменилось реально .
Поэтому, чтобы избежать этого, можно сопоставить :w
команда для команды :up
с использованием :map :w :up
.