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.
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.
Câu trả lời:
:!mycommand %:p
Có liên quan:
:!cd %:p:h
:help filename-modifiers
:%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.
cd ~ ; vim .vimrc, Vim : :!echo %:h, nên hiển thị '.' cho đường dẫn tương đối.
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.
:!). {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.
Nối :p, ví dụ:
:!mycommand %:p
Và %:p:hsẽ cung cấp cho bạn đường dẫn của thư mục mà tệp đó nằm trong đó.
Để 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()và 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ú:
:help fnamemodify%:p(tệp đệm) / <sfile>:p(tệp tập lệnh)expand('<sfile>') không hoạt động từ bên trong một chức năngl:varnamekhông hoạt động; vì vậy, exec- nối chuỗi - vàfnameescape:messages in thông báo 200 vim [error,] gần đây nhấtNgười giới thiệu
Lấy tên của tệp hiện tại http://vim.wikia.com/wiki/Get_the_name_of_the_current_file
Set_working_directory_to_the_current_file http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file
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.