2017-01-25 9 views
0

Я использовал некоторые файловую систему изменяющуюся уведомит LIB, чтобы посмотреть каталог /asdf и внутри asdf, я vim tmp, и сделал некоторые изменения, а затем использовать :wq сохранить файлЧто происходит, когда я сохраняю файл с помощью VIM?

я получил этот результат:

/asdf/4913 at watch.pl line 9. 
/asdf/4913 at watch.pl line 9. 
/asdf/tmp at watch.pl line 9. 
/asdf/tmp at watch.pl line 9. 
/asdf/tmp at watch.pl line 9. 
/asdf/tmp~ at watch.pl line 9. 
/asdf/tmp~ at watch.pl line 9. 

Что такое 4913 файл? Что такое tmp ~ файл? что именно происходит после :wq?

+0

Этот сайт о проблемах программирования. Я не думаю, что вопрос о внутренней работе редактора X классифицируется как таковой. – GhostCat

+0

Попытайтесь попросить об этом в http://vi.stackexchange.com/ –

+0

Все уважающие себя наблюдатели делают что-то, чтобы справиться с «странным» поведением Вима. Если ваш наблюдатель не делает этого, вы должны искать другого. – romainl

ответ

0

От https://github.com/neovim/neovim/issues/3460

Интересный случай был упомянут: Neo/Вим создает временный файл, чтобы проверить, если каталог доступен для записи и просматривать получившийся ACL.

Итак, если вы пишете программное обеспечение, которое следит за изменениями файлов, вы обнаружите, что Vim создает и удаляет файл 4913 почти на каждом редактировании. реф

Дополнительная информация https://groups.google.com/forum/#!topic/vim_dev/sppdpElxY44
https://vi.stackexchange.com/questions/4038/why-does-set-nocompatible-result-in-vim-saving-extra-all-numeric-temporary-fi

Вот код, который вызывает этот

/* 
* Check if we can create a file and set the owner/group to 
* the ones from the original file. 
* First find a file name that doesn't exist yet (use some 
* arbitrary numbers). 
*/ 
STRCPY(IObuff, fname); 
for (i = 4913; ; i += 123) 
{ 
    sprintf((char *)gettail(IObuff), "%d", i); 
    if (mch_lstat((char *)IObuff, &st) < 0) 
     break; 
} 
fd = mch_open((char *)IObuff, 
       O_CREAT|O_WRONLY|O_EXCL|O_NOFOLLOW, perm); 
if (fd < 0)  /* can't write in directory */ 
    backup_copy = TRUE; 
else 
{ 

    ignored = fchown(fd, st_old.st_uid, st_old.st_gid); 
    if (mch_stat((char *)IObuff, &st) < 0 
     || st.st_uid != st_old.st_uid 
     || st.st_gid != st_old.st_gid 
     || (long)st.st_mode != perm) 
    backup_copy = TRUE; 
    /* Close the file before removing it, on MS-Windows we 
    * can't delete an open file. */ 
    close(fd); 
    mch_remove(IObuff);