ฉันจะดูเส้นทางแบบเต็มของไฟล์ปัจจุบันได้อย่างไร


123

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

คำตอบ:


142

คุณสามารถกด{count}Ctrl-G:

{count}CTRL-G       Like CTRL-G, but prints the current file name with
                    full path.  If the count is higher than 1 the current
                    buffer number is also given.

การกด1ตามด้วยCtrl+ Gแสดงพา ธ เต็มของไฟล์ปัจจุบัน หาก{count}สูงกว่า 1 ชื่อบัฟเฟอร์ก็จะปรากฏขึ้นเช่นกัน

(การกดเพียงCtrl+ Gแสดงพา ธ ที่สัมพันธ์กับไดเร็กทอรีการทำงานปัจจุบันของ Vim ดังที่ Jasper ชี้ในความคิดเห็น)

คุณสามารถใช้คำสั่งต่อไปนี้ใน.vimrcการเพิ่มเส้นทางแบบเต็มไปยังบรรทัดสถานะดังนั้นจึงสามารถมองเห็นได้เสมอ:

set statusline+=%F

4
ไม่Ctrl+Gเหมือนกับ 'เส้นทางที่สัมพันธ์กับ cwd ของกลุ่ม'?
แจสเปอร์

@ แจสเปอร์ดีจัง! อัปเดตคำตอบ
thameera

4
ดูเหมือนว่าC-gจะเป็นค่าเริ่มต้นสำหรับ0C-gและ2C-gแสดงหมายเลขดัชนีบัฟเฟอร์ (เริ่มจาก 1) เช่นกันนอกจากนี้

ฉันดีใจมากที่ได้ครบรอบ 100 ปีในการตอบคำถามของคุณ! ขอบคุณสำหรับสิ่งนี้1C-g!
ห้องนิรภัย

53

การลงทะเบียน%มีชื่อของไฟล์ปัจจุบัน

สามารถป้อนคำสั่งต่อไปนี้เพื่อแสดงข้อมูลที่แสดง:

:echo @%                |" directory/name of file
:echo expand('%:t')     |" name of file ('tail')
:echo expand('%:p')     |" full path
:echo expand('%:p:h')   |" directory containing file ('head')

หากทั้งหมดที่ต้องการคือการแสดงชื่อของไฟล์ปัจจุบันพิมพ์:f/ :lsหรือกดCtrl- g(สำหรับเส้นทางแบบเต็มกด1แล้วCtrl- g)

ในโหมดแทรกให้พิมพ์Ctrl- rจากนั้น%เพื่อแทรกชื่อของไฟล์ปัจจุบัน

คำสั่งต่อไปนี้แทรกบรรทัดที่ประกอบด้วยพา ธ แบบเต็มของไฟล์ปัจจุบันและไฟล์สำรองลงในบัฟเฟอร์:

:put =expand('%:p')
:put =expand('#:p')

ที่มา: รับชื่อไฟล์ปัจจุบันที่ vim wikia

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


2
อาจเป็นเรื่องน่าสังเกตว่าคุณสามารถใช้=expand...นิพจน์เหล่านั้นหลังจากCtrl-Rเมื่ออยู่ในโหมดแทรกด้วย
dash-tom-bang

22

คุณสามารถใช้:!ls %:pเพื่อรับเส้นทางแบบเต็มไปยังไฟล์ปัจจุบัน

ทั้งนี้ขึ้นอยู่กับบริบทอดีต%จะหมายถึงเนื้อหาของไฟล์หรือชื่อไฟล์ เมื่อทำการปอกเปลือกมันจะแสดงเส้นทางของไฟล์ที่สัมพันธ์กับไดเรกทอรีปัจจุบัน คำสั่ง ' %:p' %จะเพิ่มชื่อไฟล์ปรับปรุงเส้นทางแบบเต็มไป

มีตัวดัดแปลงชื่อไฟล์ที่น่าสนใจอื่น ๆ อีกสองสามอย่างเช่น:

  • :~: หาพา ธ ไฟล์ที่สัมพันธ์กับโฮมไดเร็กตอรี่ (อันนี้ใช้ไม่ได้สำหรับฉันด้วยเหตุผลบางอย่าง)
  • :.: รับพา ธ ไฟล์ที่สัมพันธ์กับไดเรกทอรีปัจจุบัน ( %ค่าเริ่มต้น)
  • :r: รูทชื่อไฟล์ ชื่อของไฟล์ที่ไม่มีนามสกุล
  • :e: นามสกุลของไฟล์
  • :h: แยก/และกลับครึ่งซ้าย (เช่นถ้าฉันแก้ไขไฟล์ในเส้นทาง/tmp/test.txtและรัน%:p:hจะกลับมา/tmp
  • :t: แยก/และกลับครึ่งขวา (เช่นถ้าฉันแก้ไขไฟล์ในเส้นทาง/tmp/test.txtและเรียกใช้%:p:tจะกลับมาtext.txt

ฉันคิดว่าคุณหมายถึง%: p: tจะส่งคืน
ข้อความ.txt

@ JohnO'M ใช่ถูกต้องแล้วขอบคุณ: D แก้ไขแล้ว.
CharlesL

7

:pwdหนึ่งสามารถดูไดเรกทอรีการทำงานปัจจุบันที่มี แน่นอนนี่เป็นเพียงไดเรกทอรีและไม่ใช่ชื่อไฟล์ เพื่อให้ได้ไดเรกทอรีทำงานและชื่อไฟล์เราสามารถใช้การลงทะเบียนพิเศษ%ซึ่งมีข้อมูลเกี่ยวกับไฟล์ปัจจุบัน

หากคุณใช้:echo @%คุณจะได้รับไดเรกทอรีและชื่อไฟล์ของไฟล์ปัจจุบัน
หากคุณใช้:echo expand('%:p')คุณจะได้รับพา ธ เต็มและชื่อไฟล์ของไฟล์ปัจจุบัน นี้จะคล้ายกับ CharlesL ของคำตอบ

ฉันจำได้ว่าอันนี้เพราะถ้าคุณใช้ความช่วยเหลือของกลุ่ม:h expandแล้วมันก็พูดถึงเรื่องนั้น%และ%:pและญาติของพวกเขา


4

ฉันใช้:

:f[ile]

นั่นคือหรือ:f:file

ฉันประหลาดใจที่ไม่มีใครพูดถึงเรื่องนี้ในคำตอบฉันทำอะไรหายหรือเปล่า


ง่ายและมีประโยชน์
Morteza Ziyae

3

ในการแสดงพา ธ แบบเต็มสำหรับไฟล์ทั้งหมดรวมถึง symlink ที่ได้รับการแก้ไขให้ใช้ดังต่อไปนี้

:echo resolve(expand('%:p'))

3

มีคำตอบที่ดีกว่า aleady แต่ถ้า (ด้วยเหตุผลบางอย่าง) คุณต้องการใช้เชลล์เพื่อรับพา ธ แบบเต็มของไฟล์ (ซึ่งจะมีประโยชน์มากขึ้นถ้าคุณจะทำการดำเนินการอื่น ๆ ของไฟล์ด้วยเชลล์) บนระบบ Unix like ที่คุณสามารถเรียกใช้:

:!realpath %

หรือ:

:'<,'>!realpath %

เพื่อแทรกเส้นทางลงในเอกสารบนส่วนที่เลือกปัจจุบัน

การลงทะเบียน%มักจะมีชื่อของไฟล์ ตัวอย่างของโลกแห่งความเป็นจริงอาจเป็นได้ถ้าคุณกำลังแก้ไขไฟล์กำหนดค่า แต่ไม่มีสิทธิ์เขียน (และไม่ต้องการให้เรียกใช้เป็นกลุ่มรูท) คุณสามารถแก้ไขไฟล์จากนั้นเรียกใช้:

:w ! sudo tee %

เพื่อบันทึกไฟล์ (เป็นเรื่องที่น่าสนใจเล็กน้อย แต่ก็เป็นตัวอย่างที่ดีของสิ่งที่สามารถทำได้กับ%register)


realpathไม่ใช่ POSIX ดังนั้นจึงง่ายกว่าที่จะทำ:!echo "$PWD/%"
muru

ตกลงกัน; โทรดี
Sam Whited

2

คุณต้องตั้งค่าบรรทัดสถานะของคุณให้สามารถดูได้และตั้งค่าเป็นเส้นทาง ฉันทำอย่างถาวรโดยเพิ่มสองบรรทัดด้านล่างใน ~ / .vimrc ของฉัน

set laststatus=2
set statusline+=%F

หากคุณต้องการเรียกใช้เพียงครั้งเดียว จากนั้นเมื่อทำการดูประเภทเอกสาร

:set laststatus=2       <ENTER>
:set statusline+=%F     <ENTER>

1
นี่คือคำตอบเดียวกับที่ทำโดย thameeraในคำถามเดียวกัน
statox


1

คุณสามารถแสดงเส้นทางที่สมบูรณ์ของไฟล์ที่คุณกำลังแก้ไขในแถบชื่อซึ่งเป็นวิธีที่สะดวกในการแสดงเส้นทางของไฟล์ในความคิดของฉัน

เพื่อที่จะทำเช่นนั้นคุณจำเป็นต้องตั้งค่าตัวเลือกและtitle titlestringปัจจุบันฉันใช้การตั้งค่าต่อไปนี้:

set title
set titlestring=%{hostname()}\ \ %F\ \ %{strftime('%Y-%m-%d\ %H:%M',getftime(expand('%')))}

มันจะแสดงชื่อโฮสต์ของ Vim จากนั้นพา ธ ที่สมบูรณ์ของไฟล์และตามด้วยเวลาที่แก้ไขล่าสุดของไฟล์ ดูรูปด้านล่างสำหรับการสาธิต

ป้อนคำอธิบายรูปภาพที่นี่

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