2

У меня на ноутбуке был установлен yadr , и я решил избавиться от него, запустив rm -rf ~/.yadr в соответствии с указаниями его автора. Однако после того, как я это сделал, началась странность: если я попытаюсь отредактировать мой vimrc и набрать

$ vi .vim

автозаполнение покажет мне следующие файлы:

.vim@     .viminfo  .vimrc@

Так что же это за @ в конце .vimrc? Если я просто vi .vimrc он утверждает, что это новый файл. Затем, если я пытаюсь сохранить этот отредактированный файл, я получаю эту ошибку:

.vimrc" E166: Can't open linked file for writing

Есть идеи?

2 ответа2

5

Как правило, @ представляет собой символическую ссылку. Существуют определенные относительно стандартные индикаторы формата, часто добавляемые к имени файла при отображении его в списке файлов, чтобы вы могли быстро понять, что это такое; Я не уверен, что они созданы с помощью ls , но у ls -F есть хороший список: / - это каталог, @ - это символическая ссылка (это означает, что файл действительно указывает на файл в другом месте), и | , > и = - это разные специальные "файлы", используемые для межпроцессного взаимодействия. Кроме того, файлы с битом выполнения часто отображаются с завершающим символом * .

На самом деле они не являются частью имени файла; они показаны пользователю, чтобы позволить им быстро классифицировать файл как обычный файл, программу, каталог, символическую ссылку или что-то еще.

В этом случае, просматривая скрипт установки yadr, выясняется, что он помещает все файлы конфигурации в не скрытые файлы в каталог .yadr , вероятно, чтобы упростить управление ими. Поскольку больше ничего не ищет там файлы точек, он по умолчанию создает символические ссылки из вашего домашнего каталога в каталог, в котором он установлен (посмотрите на строку 301 в Rakefile Rakefile ; file_operation обычно символьные ссылки ~/.file на $PWD/file). В install.sh мы видим, что yadr обычно запускает свой rakefile в ~/.yadr , поэтому при установке по умолчанию многие точечные файлы заменяются символическими ссылками на ~/.yadr . В строке 24 файла rakefile мы видим, что именно так и происходит: file_operation вызывается для vim и vimrc , что означает, что ~/.vim и ~/.vimrc символически связаны с ~/.yadr/vim и ~/.yadr/vimrc соответственно , Предыдущий ~/.vimrc был перемещен в ~/.vimrc.backup .

Итак, здесь произошло то, что установка yadr переместила ваш .vimrc в .vimrc.backup и заменила его ссылкой на собственный файл, расположенный в ~/.yadr . Когда вы удалили ~/.yadr , ссылка теперь указывает на несуществующий каталог; vim может создать файл, когда он не существует, но не может сохранить его в несуществующем каталоге . Чтобы отредактировать .vimrc , вам придется удалить текущую символическую ссылку и начать заново с автоматически созданной резервной копии (если она существует), или с нуля (если она не существует).

0

Из комментариев Аримо я сделал это:

$ readlink .vim
/Users/abdallah/.yadr/vim

также

$ ls -l .vim*
lrwxr-xr-x  1 abdallah  staff     25 Apr 23  2014 .vim -> /Users/abdallah/.yadr/vim
-rw-------  1 abdallah  staff  12602 Dec 24 07:27 .viminfo
lrwxr-xr-x  1 abdallah  staff     27 Apr 23  2014 .vimrc -> /Users/abdallah/.yadr/vimrc

хитрая часть заключалась в том, что я знал, что ввод ls -l покажет символические ссылки .. Я просто не знал, как показать символические ссылки в точечных файлах. Кроме того, я всегда пытался удалить файлы с @ в конце этого .. т.е.

$ rm .vim@
rm: .vim@: No such file or directory

но тогда я исходя из вышеприведенного вывода .. Я просто удалил файл .vim напрямую:

$ ls -l .vim*
lrwxr-xr-x  1 abdallah  staff     25 Apr 23  2014 .vim -> /Users/abdallah/.yadr/vim
-rw-------  1 abdallah  staff  12602 Dec 24 07:27 .viminfo
lrwxr-xr-x  1 abdallah  staff     27 Apr 23  2014 .vimrc -> /Users/abdallah/.yadr/vimrc

$ rm .vim

$ ls -l .vim*
-rw-------  1 abdallah  staff  12602 Dec 24 07:27 .viminfo
lrwxr-xr-x  1 abdallah  staff     27 Apr 23  2014 .vimrc -> /Users/abdallah/.yadr/vimrc

и это все!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .