Какая разница между: update и: w в Vim?
Я понял, что в gvim Control+S
используется команда :update
. Я всегда сохраняю с помощью Ctrl+S
, поэтому я предполагаю, что :update
- это еще один способ сказать "обновить изменения". Является ли :update
в основном таким же, как write :w
? У меня возникнут проблемы, если я заменил :update
на :w!
?
edit: Я хотел изменить :update
на :w!
becauase У меня есть файл с надписью "ready-only, пожалуйста, добавьте !
". И я думал, что это единственное решение
Ответы
Ответ 1
:help :update
довольно ясно:
Like ":write", but only write when the buffer has been modified.
Таким образом, файл будет записан только в том случае, если содержимое буфера фактически было изменено. Поэтому, если вы используете :update
(или нажмите Ctrl + S в GVim), и в буфере нет несохраненных изменений, ничего не будет сделано.
Ответ 2
Вот еще один способ объяснить разницу между :write
(ярлык :w
) и :update
(ярлык :up
):
Всякий раз, когда мы вводим :w
, VIM буквально записывает буфер в файл, независимо от того, пуст он пуст или нет. Этот СРЕДСТВА обновит временную метку файла до введенного времени :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!
Как вы можете видеть, изменяется только время доступа, потому что мы читаем (Access) данные в файле. Но время изменения и изменения времени остается неизменным.
Теперь давайте снова 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
.
Ответ 3
С помощью:
:[range]up[date][!] [++opt] [>>] [file]
Like ":write", but only write when the buffer has been
modified. {not in Vi}
Ответ 4
:help :update
говорит:
Подобно ": write", но записывать только при изменении буфера.