Làm cách nào để mở rộng đường dẫn đầy đủ của tệp hiện tại để chuyển đến một lệnh trong Vim?


123

Khi tôi chuyển đến chế độ lệnh và nhập

:!mycommand %

Tôi thực hiện lệnh của mình trên tệp hiện tại ( %được mở rộng thành tên tệp hiện tại). Có cấu trúc tương tự nào mở rộng tên tệp đầy đủ (với đường dẫn đầy đủ) không?

Tôi đang sử dụng Windows.



:! mycommand "%"
SdidS

Câu trả lời:


161

:!mycommand %:p

Có liên quan:

:!cd %:p:h


23
Làm thế nào để bạn tìm thấy những điều này trong VIM help?
keflavich

57
@keflavich:help filename-modifiers
Annika Backstrom

để lấy thư mục chứa tệp hiện tại, tôi nghĩ rằng%: h là đủ. Tại sao cần%: p: h ở đây?
HVNSweeting

1
@HVNSweeting :%plà đường dẫn tuyệt đối đến tệp chứ không phải là đường dẫn tương đối. :%p%hlà đường dẫn tuyệt đối đến thư mục mẹ của tệp. Sử dụng chỉ %:hcó thể dẫn đến một đường dẫn tương đối.
Annika Backstrom

2
@HVNSweeting Shell : cd ~ ; vim .vimrc, Vim : :!echo %:h, nên hiển thị '.' cho đường dẫn tương đối.
Annika Backstrom

65

Hai câu trả lời khác không hoạt động với tôi (vì một số lý do). Tuy nhiên, tôi thấy rằng tổ hợp này hiển thị đường dẫn đầy đủ khi nhập ở chế độ Bình thường:

Nhấn 1sau đóCtrlG

Nguồn: “ Lấy tên của tệp hiện tại ” trên Vim Tips Wiki. Xem thêm {count}CTRL-Gphần của :help CTRL-G.


5
Đó là một chủ đề khác. Câu hỏi là về việc bao gồm đường dẫn đệm trong một chuỗi lệnh (do đó là hàng đầu :!). {count}CTRL-GTrình tự của bạn là để hiển thị đường dẫn đầy đủ trong giao diện người dùng.
Stefan Majewsky

3
@StefanMajewsky liên quan đến tiêu đề câu hỏi mà trên thực tế đã đưa tôi đến đây, đây phải là câu trả lời được chọn.
doc_id

29

Nối :p, ví dụ:

:!mycommand %:p

%:p:hsẽ cung cấp cho bạn đường dẫn của thư mục mà tệp đó nằm trong đó.


9

Để in ra tên tệp vim hiện tại:

:help expand
:echo expand("%:p")    " absolute path
:echo expand("%:p:h")  " absolute path dirname
:echo expand("%:p:h:h")" absolute path dirname dirname
:echo expand("%:.")    " relative path
:echo expand("%:.:h")  " relative path dirname
:echo expand("%:.:h:h")" relative path dirname dirname

:echo expand("<sfile>:p")  " absolute path to [this] vimscript

:help filename-modifiers

Ví dụ (với một chức năng vim), để resolve()expand()bất kỳ liên kết tượng trưng đến đường dẫn tuyệt đối đến kịch bản hiện nay <sfile>:p(thay vì %:p), và sau đó execđến sourcecác fnameescapetên tập tin -ed chứa trong một biến vim chức năng địa phương l:vimrcfilename:

 "  g:__sfile__dirname     -- directory containing this vimrc script
 "                            after symlinks
 "                            ~dirname(abspath(realpath(__file__)))
 let g:__sfile__dirname=fnamemodify(resolve(expand("<sfile>:p")), ":h")

 "  Source_dotvim(filename)  -- source dirname(this_vimrc)/filename
 function Source_dotvim(filename)
     let l:vimrcfilename=g:__sfile__dirname . "/" . a:filename
     if filereadable(l:vimrcfilename) && !empty(l:vimrcfilename)
         "source s:vimrcfilename "this doesn't work, so exec:
         exec "source " . fnameescape(l:vimrcfilename)
     else
         echo l:vimrcfilename . " empty or not found."
     endif
 endfunction 

 call Source_dotvim("vimrc.local.01-env.vimrc")

Ghi chú:

Người giới thiệu



0

Nếu bạn muốn sử dụng đường dẫn đầy đủ trong của bạn vimrc, bạn có thể sử dụng một cái gì đó như sau:

let vimFiles = '$HOME/.vim'
let absPath  = expand(vimFiles . '/subDir')

Điều này sẽ cung cấp cho bạn một đường dẫn có dấu gạch chéo ngược trên Windows.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.