Какво се случва, когато запазя файл с помощта на VIM? [затворено]

Използвах известна библиотека за уведомяване за промяна на файловата система, за да наблюдавам директорията /asdf, а вътре в asdf, аз vim tmp и направих някои промени и след това използвах :wq, за да запазя файла

тогава получих този резултат:

/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 ?


person Sato    schedule 25.01.2017    source източник
comment
Този сайт е за проблеми с програмирането. Не мисля, че питането за вътрешната работа на редактора X се класифицира като това.   -  person GhostCat    schedule 25.01.2017
comment
Опитайте да попитате това в vi.stackexchange.com   -  person Sardorbek Imomaliev    schedule 25.01.2017
comment
Всички уважаващи себе си наблюдатели правят нещо или друго, за да се справят със странното поведение на Vim при писане. Ако вашият наблюдател не го прави, трябва да потърсите друг.   -  person romainl    schedule 25.01.2017


Отговори (1)


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

Беше споменат интересен случай: Neo/Vim създава временен файл, за да провери дали дадена директория може да се записва и да види получения 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);
person sudo bangbang    schedule 25.01.2017
comment
Поведението може да се промени с set backupcopy=X: vi.stackexchange.com/questions/4038/ - person Ciro Santilli 新疆再教育营六四事件ۍ 04.08.2019