ฉันจะขยายเส้นทางแบบเต็มของไฟล์ปัจจุบันเพื่อส่งผ่านไปยังคำสั่งใน Vim ได้อย่างไร


123

เมื่อฉันไปที่โหมดคำสั่งและพิมพ์

:!mycommand %

ฉันได้รับคำสั่งดำเนินการกับไฟล์ปัจจุบัน ( %ขยายเป็นชื่อไฟล์ปัจจุบัน) มีโครงสร้างที่คล้ายกันที่ขยายชื่อไฟล์แบบเต็ม (พร้อมพา ธ แบบเต็ม) หรือไม่?

ฉันใช้ Windows



:! mycommand "%"
SdidS

คำตอบ:


161

:!mycommand %:p

ที่เกี่ยวข้อง:

:!cd %:p:h


23
คุณจะพบสิ่งเหล่านี้ได้อย่างไรในความช่วยเหลือ VIM
keflavich

57
@keflavich:help filename-modifiers
Annika Backstrom

เพื่อรับไดเร็กทอรีที่มีไฟล์ปัจจุบันฉันคิดว่า%: h ก็เพียงพอแล้ว ทำไมต้องใช้%: p: h ที่นี่?
HVNSweeting

1
@HVNSweeting :%pเป็นพา ธ สัมบูรณ์ไปยังไฟล์แทนที่จะเป็นพา ธ สัมพัทธ์ :%p%hเป็นพา ธ สัมบูรณ์ไปยังไดเร็กทอรีหลักของไฟล์ โดยใช้เพียง%:hจะส่งผลในทางญาติ
Annika Backstrom

2
@HVNSweeting เชลล์: cd ~ ; vim .vimrc, กลุ่ม: :!echo %:hควรแสดง '' สำหรับเส้นทางสัมพัทธ์
Annika Backstrom

65

อีกสองคำตอบไม่ได้ผลสำหรับฉัน (ด้วยเหตุผลบางประการ) อย่างไรก็ตามฉันพบว่าคำสั่งผสมนี้แสดงเส้นทางแบบเต็มเมื่อพิมพ์ในโหมดปกติ:

กด1แล้วCtrlG

ที่มา:“ รับชื่อไฟล์ปัจจุบัน ” ใน Vim Tips Wiki ดูที่{count}CTRL-Gส่วนของ:help CTRL-G.


5
นั่นเป็นหัวข้อที่แตกต่างกัน คำถามเกี่ยวกับการรวมพา ธ บัฟเฟอร์ในสตริงคำสั่ง (เช่นนำหน้า:!) {count}CTRL-Gลำดับของคุณมีไว้เพื่อแสดงเส้นทางแบบเต็มใน UI
Stefan Majewsky

3
@StefanMajewsky เกี่ยวกับชื่อคำถามซึ่งในความเป็นจริงพาฉันมาที่นี่นี่ควรเป็นคำตอบที่เลือก
doc_id


9

ในการพิมพ์ชื่อไฟล์ 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")

หมายเหตุ:

อ้างอิง



0

หากคุณต้องการใช้เส้นทางแบบเต็มvimrcคุณสามารถใช้สิ่งต่อไปนี้:

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

ซึ่งจะทำให้คุณมีเส้นทางที่มีแบ็กสแลชใน Windows

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.