เมื่อฉันไปที่โหมดคำสั่งและพิมพ์
:!mycommand %
ฉันได้รับคำสั่งดำเนินการกับไฟล์ปัจจุบัน ( %
ขยายเป็นชื่อไฟล์ปัจจุบัน) มีโครงสร้างที่คล้ายกันที่ขยายชื่อไฟล์แบบเต็ม (พร้อมพา ธ แบบเต็ม) หรือไม่?
ฉันใช้ Windows
เมื่อฉันไปที่โหมดคำสั่งและพิมพ์
:!mycommand %
ฉันได้รับคำสั่งดำเนินการกับไฟล์ปัจจุบัน ( %
ขยายเป็นชื่อไฟล์ปัจจุบัน) มีโครงสร้างที่คล้ายกันที่ขยายชื่อไฟล์แบบเต็ม (พร้อมพา ธ แบบเต็ม) หรือไม่?
ฉันใช้ Windows
คำตอบ:
:!mycommand %:p
ที่เกี่ยวข้อง:
:!cd %:p:h
:help filename-modifiers
:%p
เป็นพา ธ สัมบูรณ์ไปยังไฟล์แทนที่จะเป็นพา ธ สัมพัทธ์ :%p%h
เป็นพา ธ สัมบูรณ์ไปยังไดเร็กทอรีหลักของไฟล์ โดยใช้เพียง%:h
จะส่งผลในทางญาติ
cd ~ ; vim .vimrc
, กลุ่ม: :!echo %:h
ควรแสดง '' สำหรับเส้นทางสัมพัทธ์
อีกสองคำตอบไม่ได้ผลสำหรับฉัน (ด้วยเหตุผลบางประการ) อย่างไรก็ตามฉันพบว่าคำสั่งผสมนี้แสดงเส้นทางแบบเต็มเมื่อพิมพ์ในโหมดปกติ:
กด1แล้วCtrlG
ที่มา:“ รับชื่อไฟล์ปัจจุบัน ” ใน Vim Tips Wiki ดูที่{count}CTRL-G
ส่วนของ:help CTRL-G
.
:!
) {count}CTRL-G
ลำดับของคุณมีไว้เพื่อแสดงเส้นทางแบบเต็มใน UI
ผนวก:p
เช่น
:!mycommand %:p
และ%:p:h
จะให้เส้นทางของไดเร็กทอรีที่ไฟล์นั้นอยู่
ในการพิมพ์ชื่อไฟล์ vim ปัจจุบัน:
: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
ตัวอย่างเช่น (ด้วยฟังก์ชัน vim) ถึงresolve()
และexpand()
symlink ใด ๆ ไปยังพา ธ สัมบูรณ์ไปยังสคริปต์ปัจจุบัน<sfile>:p
(แทน%:p
) จากนั้นexec
ไปsource
ยังfnameescape
ชื่อไฟล์ -ed ที่มีอยู่ในตัวแปร vim function-local 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")
หมายเหตุ:
:help fnamemodify
%:p
(ไฟล์บัฟเฟอร์) / <sfile>:p
(ไฟล์สคริปต์)expand('<sfile>')
ไม่ทำงานจากภายในฟังก์ชันl:varname
ไม่ทำงาน ดังนั้นexec
- การต่อสตริง - และfnameescape
:messages
พิมพ์ข้อความ 200 vim [error,] ล่าสุดอ้างอิง
รับชื่อไฟล์ปัจจุบัน 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
หากคุณต้องการใช้เส้นทางแบบเต็มvimrc
คุณสามารถใช้สิ่งต่อไปนี้:
let vimFiles = '$HOME/.vim'
let absPath = expand(vimFiles . '/subDir')
ซึ่งจะทำให้คุณมีเส้นทางที่มีแบ็กสแลชใน Windows