В чем разница между: update и: w в Vim? - PullRequest
17 голосов
/ 22 июня 2010

Я понял это в gvim Control+S как команда :update. Я всегда сохраняю, используя Ctrl+S, поэтому я предполагаю, что :update - это еще один способ сказать "обновить изменения". :update в основном то же самое, что и запись :w? Будут ли у меня проблемы, если я заменю :update на :w!?

edit: я хотел изменить :update на :w!, потому что у меня есть файл с надписью "только для готовности, добавьте !" И я подумал, что это единственное решение

Ответы [ 4 ]

17 голосов
/ 22 июня 2010

:help :update довольно ясно говорит об этом:

Like ":write", but only write when the buffer has been modified.

Таким образом, файл будет записан, только если содержимое буфера действительно было изменено.Поэтому, если вы используете :update (или нажимаете Ctrl + S в GVim) и в буфере нет несохраненных изменений, это ничего не изменит.

16 голосов
/ 15 марта 2014

Вот еще один способ объяснить разницу между :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.

4 голосов
/ 22 июня 2010

Из справки:

:[range]up[date][!] [++opt] [>>] [file]
                        Like ":write", but only write when the buffer has been
                        modified.  {not in Vi}
2 голосов
/ 22 июня 2010

:help :update говорит:

Как и «: запись», но только запись, когда буфер был изменен.

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