2009-04-02 6 views
7

tôi có các thiết lập sau:Bắt con đường logic trong VIM khi có một liên kết tượng trưng

mkdir /1 
mkdir /1/2 
mkdir /1/2/3 
ln -s /1/2/3 /1/3 

Nếu tôi làm cd /1/3, và sau đó pwd, tôi nhận được /1/3. Nếu tôi sử dụng pwd -P, tôi có thể nhận được /1/2/3 hoặc pwd -L để buộc /1/3.

Trong VIM, tôi đang tìm cách lấy /1/3.
Nếu tôi mở tệp trong /1/3/foo.txt và tôi sử dụng một cái gì đó như fnamemodify(bufname(winbufnr(0)), ':p:h'), nó trả về /1/2/3.
Làm thế nào tôi có thể yêu cầu nó cung cấp cho tôi cùng một thư mục mà pwd sẽ cung cấp?

+0

Bạn có thể muốn chỉnh sửa trong "lý do" của những gì bạn đang cố gắng làm, vì hành vi của vim có vẻ đúng với tôi. – dwc

+0

nó là một hệ thống xây dựng phức tạp (rõ ràng dựa trên), nơi các nguồn chính là trong một cái gì đó/code/comp/subcomp/src nhưng cây làm việc là trong một cái gì đó như/tree/tree1/build/comp. – Mikeage

Trả lời

7

Dường như bạn không thể, ngoài thông qua system('pwd -L'). Theo số vim_use mailing list Vim tự động giải quyết các liên kết tượng trưng hiện nay.

Xem văn bản xung quanh :h E773 để biết lý do; nếu Vim đi theo các liên kết tượng trưng thay vì phân giải tên tập tin, nó sẽ có thể có cùng một tập tin mở trong hai bộ đệm dưới hai tên khác nhau, và Vim sẽ trở nên bối rối khi cố gắng tìm ra nơi mà tập tin hoán đổi nên được. Xem thêm trong :h version7.txt:

Unix: Khi chỉnh sửa tệp thông qua liên kết tượng trưng, ​​tệp hoán đổi sẽ sử dụng tên của liên kết tượng trưng. Bây giờ, hãy sử dụng tên của tệp thực, để chỉnh sửa cùng một tệp được phát hiện hai lần.

+0

Ok, câu hỏi tiếp theo. Nếu tôi chạy vim bằng cách sử dụng "vim 1/3/foo.txt", làm cách nào tôi có thể sử dụng hệ thống ('pwd -L')? Nếu tôi chuyển sang thư mục bằng cd%: p: h Tôi đã nhảy vào liên kết tượng trưng/1/2/3/ – Mikeage

+0

Nếu bạn: cd vào thư mục, tôi không biết liệu bạn có thể làm gì không điểm đó. Bạn có thể làm một cái gì đó khủng khiếp như hệ thống ('cd' '. Mở rộng ('%: h ').' "; Pwd -L ') trước: cd'ing Vim chính nó nhưng không chắc chắn những gì bạn đang sử dụng này cho, nó có thể không đủ. –

1

Câu trả lời ngắn:

Bạn có thể sử dụng gắn kết ràng buộc như một sự thay thế cho liên kết tượng trưng. Xem man mount.

Long trả lời:

Tôi đã có một vấn đề tương tự, như tôi có một liên kết tượng trưng ngắn vào một phân vùng gắn kết,

/e -> /media/iam/ext4test 

Tôi cũng có một liên kết tượng trưng ~/.vimrc -> /e/configs/.vimrc.

Tôi đã gặp sự cố khi cố gắng đăng nhập vào Netrw trong thư mục chứa (Tôi đã hạ cánh trong ~, nhưng tôi không thể thấy cách mạnh mẽ để tránh điều đó, hãy ghi nhớ mong muốn sử dụng Dấu trang, v.v.).

Giải pháp của tôi là, sau khi xem xét có thể thay đổi điểm lắp, là bạn có thể thêm các điểm gắn kết. Vì vậy, sau unlink e, tôi đã sử dụng mount --bind /media/iam/ext4test /e.

Bây giờ, nếu tôi đang ở /e/configs/.vimrc và sử dụng :edit . (hoặc :e. v.v.), nó sẽ đưa tôi vào Netrw trong thư mục chứa.

Chỉnh sửa:

Lệnh mount --bind làm thay đổi tạm thời.Đối với gắn kết cố định vĩnh viễn, tôi thêm thông tin sau vào /etc/fstab,

# <file system>  <mount point> <type> <options> <dump> <pass> 
/media/iam/ext4test /e    none bind  0  0 
+0

Nói chung, điều này có thể là một lựa chọn hữu ích, nhưng nó (a) yêu cầu quyền root và (b) không phù hợp với nhiều ánh xạ khác nhau. Trong trường hợp của câu hỏi ban đầu, đây là một hệ thống xây dựng trên một máy chủ chia sẻ có thể lưu trữ năm mươi hoặc thậm chí 500 cây nguồn, vì vậy nó sẽ không có liên quan. – Mikeage

+0

Tôi đã lười biếng, tôi nên hỏi một câu hỏi và câu trả lời mới, nhưng câu hỏi của bạn ít nhất cũng có một số thuật ngữ tìm kiếm mà tôi đang sử dụng. Vì một phần câu trả lời của tôi là * ở đây, có nghĩa là, Vim không chơi tốt với cách tôi mong đợi nó hoạt động, tôi đã giải quyết cách giải quyết của tôi trên trang này. Đây là một trò đùa: bạn đã thử Emacs chưa? Nó có thể làm những gì bạn mong đợi với các liên kết tượng trưng. (Phải thừa nhận rằng tôi không đủ điều kiện để xem xét các hostings vv) JK Tôi chắc rằng bạn đang sử dụng Vim vì nhiều lý do. –