Подтвердить что ты не робот

Emacs и символические ссылки

Скажем, что у меня есть символическая ссылка в /home/.bashrc, которая указывает на фактический файл .bashrc где-то еще: /some/other/path/.bashrc, который находится в репозитории git.

Если я открываю /home/.bashrc в Emacs, он предлагает мне:

Symbolic link to Git-controlled source file; follow link? (y or n)

Я обычно печатаю y, так как я хочу редактировать фактический файл. Однако позже, если я делаю buffer-file-name Emacs возвращает /some/other/path/.bashrc, а не /home/.bashrc).

Я бы хотел, чтобы Emacs помнил, что способ, которым я обращался к этому файлу, был через символическую ссылку.

Другими словами, я хотел бы, чтобы мои символические ссылки были прозрачными для Emacs. Отчасти причина в том, что у меня есть несколько макросов Emacs, которые зависят от пути к текущему файлу, и эти макросы считают, что я работаю с файлом, расположенным в /some/other/path, а не в /home/.

Как я могу это сделать?

4b9b3361

Ответ 1

Когда он запрашивает

Symbolic link to Git-controlled source file; follow link? (y or n)

введите n. Вместо того, чтобы следовать символической ссылке и напрямую открывать файл, на который указывает символическая ссылка, emacs будет использовать символическую ссылку, как вы пожелаете.

Предупреждение: это предотвращает обнаружение функций управления версиями emacs и их взаимодействие с репозиторием в месте назначения, если оно есть.

Если вы хотите изменить поведение по умолчанию, ознакомьтесь с документацией переменной настройки vc-follow-symlinks. (C-h v vc-follow-symlinks)

Ответ 2

Просто для полноты, для кого-то, у кого есть вопрос о

Symbolic link to Git-controlled source file; follow link? (y or n)

но не обязательно хочет, чего хочет OP, это документация из C-h v vc-follow-symlinks (как и в моей версии Emacs), для получения дополнительной информации см. ваши собственные Emacs):

vc-follow-symlinks - это переменная, определенная в vc-hooks.el. Его значение задается

Документация: Что делать, если вы посещаете символическую ссылку на файл под контролем версий. Редактирование такого файла по ссылке обходит систему контроля версий, что опасно и, вероятно, не то, что вы хотите.

Если эта переменная равна t, VC следует за ссылкой и посещает реальный файл, рассказывая об этом в области эха. Если это `ask ', VC просит подтверждение того, следует ли следовать этой ссылке. Если nil, ссылка и отображается предупреждение.

Вы можете настроить эту переменную.

Результат состоит в том, что для того, чтобы каждый раз не запрашивать подсказки, вы можете в .emacs установить

(setq vc-follow-symlinks t)

чтобы всегда следовать символической ссылке (и напрямую редактировать фактический файл), или

(setq vc-follow-symlinks nil)

чтобы всегда редактировать файл, как если бы он был в самой символической ссылке (это, похоже, работает нормально - оно не будет удалять символическую ссылку или что-то еще, но это не позволит вам использовать связанные с версией элементы управления в файле). Я предпочитаю первый (в отличие от OP).

Ответ 3

Если у вас есть прецедент, как у меня, где я хочу получить доступ только к определенным файлам с помощью горячих клавиш без запроса, вы можете использовать функцию file-truename, которая разрешает все символические ссылки в файле и, следовательно, предотвращает раздражающий вопрос без изменение значения по умолчанию для всего остального.

(global-set-key (kbd "<f7>") (lambda () (interactive)
  (find-file (file-truename user-init-file))))

Ответ 4

Если вы не знаете или не заботитесь о пакете vc от Emacs, просто сделайте

(setq vc-handled-backends nil)

который полностью отключает vc, а также это раздражающее сообщение о следующих символических ссылках.

Затем вы, вероятно, захотите настроить find-file-visit-truename в зависимости от того, хотите ли вы найти файл для обозначения символических ссылок или нет.