2010-12-24 45 views
9

Nói rằng tôi đang chạy Vim và lợi nhuận pwdđường dẫn tương đối Bắt trong Vim

/home/rafid/myproject 

Và nói tôi hiện đang chỉnh sửa các tập tin

/home/rafid/myproject/website/editpage.php 

Có bất kỳ lệnh trả về này cho tôi?

website/editpage.php 

Tức là, đường dẫn của tệp tương ứng với thư mục hiện tại.

Trả lời

4

này làm việc cho tôi:

:echo expand("%") 
+0

Tuyệt vời! Nó cũng làm việc cho tôi. – Rafid

+3

Bạn cũng có thể sử dụng '%' trong chế độ chèn để chèn tên tệp hiện tại. –

+1

Điều này không phải lúc nào cũng hoạt động và phụ thuộc vào cách bạn mở tệp ban đầu. Xem câu trả lời của @joeytwiddle cho câu hỏi này để có giải pháp hoàn chỉnh hơn. – senbrow

0

Có, bạn có thể sử dụng

: args

này sẽ cung cấp cho bạn tên tập tin của tập tin hiện tại, cho mục đích thông tin.

+0

Lưu ý rằng tôi không chỉ muốn tên tệp, tôi muốn đường dẫn tương đối. Vì vậy, không chỉ editpage.php, mà là 'website/editpage.php'. – Rafid

+0

Có, nó sẽ tính đến điều đó. Bạn đã thử à? – kvista

9

Một lựa chọn khác sẽ được để viết một hàm vim. Đây là nỗ lực khiêm tốn của tôi:

function! Relpath(filename) 
    let cwd = getcwd() 
    let s = substitute(a:filename, l:cwd . "/" , "", "") 
    return s 
endfunction 

Bạn gọi Relpath với bất kỳ tên đường dẫn đầy đủ nào và nó sẽ loại bỏ tên thư mục hiện tại khỏi đối số của nó. Ví dụ: hãy thử :echo Relpath(expand("%:p")) (công cụ sửa đổi :p yêu cầu Vim trả lại đường dẫn đầy đủ). Rõ ràng, điều này là không cần thiết trong trường hợp của bạn, vì chính bản thân nó trả về đường dẫn tương đối từ %. Tuy nhiên, nó có thể có ích trong các trường hợp khác.

+0

Cảm ơn, đó là một điều tốt. – Rafid

1

nếu bạn sử dụng autocmd để luôn đặt thư mục hiện hành của bộ đệm mà bạn đang làm việc trên (cd%: p: h) sau đó bạn có thể chỉ cần gõ: cd

+0

cho người tiếp theo truy cập trang này - hãy xem mẹo vim này để biết thêm chi tiết về cách đặt cd bằng autocmd http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file – molicule

0

Blockquote này làm việc cho tôi:
: vang mở rộng ("%")

này chỉ làm việc nếu bạn mở tập tin đó với một tập tin tương đối:

for vi ./foo, expand("%") will be ./foo 

nhưng

for vi /tmp/foo expand("%") will be /tmp/foo 
+0

Không có ở đây. Nếu tôi ở trong '/ tmp' và làm' vi/tmp/foo' thì Vim làm việc với đường tương đối, và 'expand ("% ")' hiển thị cho tôi 'foo'. ** Tuy nhiên ** nếu tôi giữ vim mở trong '/ tmp' và làm': e/tmp/bar' ** thì ** 'expand ("% ")' sẽ hiển thị đường dẫn đầy đủ. – joeytwiddle

11

Mặc dù expand('%') thường hoạt động, có rare occasions nơi nó không. Nhưng bạn có thể buộc Vim để luôn luôn trình bày các đường dẫn tương đối bằng cách gọi fnamemodify:

:echo fnamemodify(expand("%"), ":~:.") 

Từ hướng dẫn:

:.  Reduce file name to be relative to current directory, if 
      possible. File name is unmodified if it is not below the 
      current directory. 
      For maximum shortness, use ":~:.". 

Các :~ là không bắt buộc. Nó sẽ làm giảm đường dẫn tương đối so với thư mục chính của bạn nếu có thể (~/...). (Rất tiếc, chỉ hoạt động trên nhà của bạn; nó sẽ không biến /home/joey thành ~joey.)

Nếu bạn được giới hạn về không gian, và có thể quản lý với thông tin "mờ" về nơi các tập tin có vị trí, sau đó kiểm tra pathshorten() mà nén tên thư mục xuống một ký tự:

:echo pathshorten('~/.vim/autoload/myfile.vim') 
~/.v/a/myfile.vim 

tham khảo: :h fnamem<Tab>:h pathsh<Tab>

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