2013-03-13 63 views
34

Giả sử tôi có một liên kết tượng trưng tại /home/.bashrc trỏ đến tệp .bashrc thực tế ở một nơi khác: /some/other/path/.bashrc nằm trong kho lưu trữ git.Emacs và các liên kết tượng trưng

Nếu tôi mở /home/.bashrc trong Emacs, nó nhắc nhở tôi với:

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

Tôi thường gõ y, vì tôi muốn chỉnh sửa các tập tin thực tế. Tuy nhiên, sau này, nếu tôi làm buffer-file-name Emacs trả lại /some/other/path/.bashrc và không phải /home/.bashrc).

Tôi muốn Emacs đến nhớ rằng cách tôi truy cập tệp này là thông qua liên kết tượng trưng.

Nói cách khác, tôi muốn các liên kết tượng trưng của tôi minh bạch với Emacs. Một phần lý do là vì tôi có một vài macro Emacs phụ thuộc vào đường dẫn của tệp hiện tại và các macro này nghĩ rằng tôi đang làm việc với một tệp nằm ở /some/other/path chứ không phải trong /home/.

Tôi làm cách nào để thực hiện việc này?

Trả lời

38

Khi nó nhắc nhở với

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

loại n. Thay vì theo sau liên kết tượng trưng và mở trực tiếp tệp mà liên kết tượng trưng trỏ tới, các emacs sẽ sử dụng chính liên kết tượng trưng, ​​như bạn mong muốn.

Cảnh báo: làm điều này ngăn các tính năng kiểm soát phiên bản của các emacs phát hiện và tương tác với kho lưu trữ tại đích, nếu có.

Nếu bạn muốn thay đổi hành vi mặc định, hãy xem tài liệu về biến tùy chỉnh vc-follow-symlinks. (C-h v vc-follow-symlinks)

+1

Nếu tôi trả lời 'không' và chỉnh sửa tệp qua liên kết, trạng thái git sẽ hiển thị chính xác rằng tệp đã được sửa đổi và hiển thị sự khác biệt chính xác. Điều này "bỏ qua hệ thống kiểm soát phiên bản" là gì? – raychi

+2

Điều này có nghĩa là hỗ trợ Emacs VC sẽ không khả dụng: thông tin cụ thể như trạng thái và phiên bản cũng như các hành động/lối tắt có sẵn. –

30

Chỉ cần cho đầy đủ, đối với một người có một câu hỏi về

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

nhưng không nhất thiết muốn gì OP muốn, đây là tài liệu từ C-h v vc-follow-symlinks (như các phiên bản Emacs của tôi - tra cứu các Emac của riêng bạn để biết chi tiết):

vc-follow-symlinks là một biến được xác định trong vc-hooks.el. Giá trị của nó là yêu cầu

Tài liệu: Phải làm gì nếu truy cập liên kết tượng trưng đến tệp dưới sự kiểm soát phiên bản. Chỉnh sửa tệp như vậy thông qua liên kết bỏ qua hệ thống kiểm soát phiên bản, , điều này rất nguy hiểm và có thể không phải là điều bạn muốn.

Nếu biến này là t, VC theo liên kết và truy cập tệp thực, cho bạn biết về nó trong khu vực tiếng vọng. Nếu đó là 'yêu cầu', VC yêu cầu xác nhận xem có nên theo liên kết hay không. Nếu không, liên kết là đã truy cập và cảnh báo được hiển thị.

Bạn có thể tùy chỉnh biến này.

Kết quả cuối cùng là để tránh bị nhắc nhở mỗi lần, bạn có thể trong .emacs của bạn thiết lập một trong hai

(setq vc-follow-symlinks t) 

luôn luôn làm theo các liên kết tượng trưng (và chỉnh sửa "thực tế" nộp trực tiếp), hoặc

(setq vc-follow-symlinks nil) 

để luôn chỉnh sửa tệp như thể nó ở chính liên kết tượng trưng (điều này có vẻ ổn - nó sẽ không xóa liên kết tượng trưng hoặc bất kỳ thứ gì - nhưng nó sẽ không cho phép bạn sử dụng công cụ liên quan đến kiểm soát phiên bản trên tệp). Tôi thích cái cũ hơn (không giống như OP).

4

Nếu bạn có trường hợp sử dụng như tôi có, tôi chỉ muốn truy cập một số tệp nhất định bằng phím nóng mà không hỏi, bạn có thể sử dụng chức năng file-truename để giải quyết tất cả liên kết tượng trưng trong tệp và ngăn chặn câu hỏi gây phiền toái mà không thay đổi mặc định cho mọi thứ khác.

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

Tại sao không chỉ 'let'-bind' find-file-visit-truename'? –

+0

Bạn có nghĩa là '' (let ((find-file-visit-truename t)) (tìm tập tin người dùng-init-file)) ''? Vâng ba lý do. Đầu tiên, nó sử dụng các quy tắc phạm vi động của elisp (Tôi không thích tính năng đó vì vậy tôi muốn tránh nó nếu tôi có thể). '' (tìm-tệp (tệp-tên-người-tập-init-tệp)) '' ít nhất cũng đơn giản như ràng buộc cho phép. Và cuối cùng nhưng không kém phần quan trọng, tôi không biết về '' find-file-sisit-truename''. – Arne

+0

Đó là những lý do hoàn toàn hợp lý. Tôi không nghĩ rằng bạn nên tránh phạm vi năng động, tuy nhiên. Các trường hợp sử dụng như thế này chính xác là lý do tại sao phạm vi động là hữu ích. Lưu ý, bằng cách này, ngay cả khi bạn bật phạm vi từ vựng, thì các biến được khai báo sẽ vẫn được tự động dò tìm, cho phép bạn tận dụng toàn bộ phạm vi động mà không có bất kỳ nhược điểm nào. –

3

Nếu bạn không biết hay quan tâm đến vc gói Emacs', chỉ cần làm

(setq vc-handled-backends nil) 

mà hoàn toàn vô hiệu hóa vc cũng như thông điệp này gây phiền nhiễu về sau liên kết tượng trưng.

Sau đó, bạn có thể muốn tùy chỉnh find-file-visit-truename tùy thuộc vào việc bạn có muốn tìm tệp để theo dõi liên kết tượng trưng hay không.

Các vấn đề liên quan