เมื่อฉันแก้ไขไฟล์ใน Vim มีคำสั่งให้ดูพา ธ ของไฟล์ปัจจุบันหรือไม่? บางครั้งสิ่งนี้มีประโยชน์มากหากมีหลายไฟล์ที่มีชื่อเหมือนกันในโครงการ
เมื่อฉันแก้ไขไฟล์ใน Vim มีคำสั่งให้ดูพา ธ ของไฟล์ปัจจุบันหรือไม่? บางครั้งสิ่งนี้มีประโยชน์มากหากมีหลายไฟล์ที่มีชื่อเหมือนกันในโครงการ
คำตอบ:
คุณสามารถกด{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
C-g
จะเป็นค่าเริ่มต้นสำหรับ0C-g
และ2C-g
แสดงหมายเลขดัชนีบัฟเฟอร์ (เริ่มจาก 1) เช่นกันนอกจากนี้
1C-g
!
การลงทะเบียน%
มีชื่อของไฟล์ปัจจุบัน
สามารถป้อนคำสั่งต่อไปนี้เพื่อแสดงข้อมูลที่แสดง:
: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
ที่เกี่ยวข้อง:
=expand...
นิพจน์เหล่านั้นหลังจากCtrl-R
เมื่ออยู่ในโหมดแทรกด้วย
คุณสามารถใช้:!ls %:p
เพื่อรับเส้นทางแบบเต็มไปยังไฟล์ปัจจุบัน
ทั้งนี้ขึ้นอยู่กับบริบทอดีต%
จะหมายถึงเนื้อหาของไฟล์หรือชื่อไฟล์ เมื่อทำการปอกเปลือกมันจะแสดงเส้นทางของไฟล์ที่สัมพันธ์กับไดเรกทอรีปัจจุบัน คำสั่ง ' %:p
' %
จะเพิ่มชื่อไฟล์ปรับปรุงเส้นทางแบบเต็มไป
มีตัวดัดแปลงชื่อไฟล์ที่น่าสนใจอื่น ๆ อีกสองสามอย่างเช่น:
:~
: หาพา ธ ไฟล์ที่สัมพันธ์กับโฮมไดเร็กตอรี่ (อันนี้ใช้ไม่ได้สำหรับฉันด้วยเหตุผลบางอย่าง):.
: รับพา ธ ไฟล์ที่สัมพันธ์กับไดเรกทอรีปัจจุบัน ( %
ค่าเริ่มต้น):r
: รูทชื่อไฟล์ ชื่อของไฟล์ที่ไม่มีนามสกุล:e
: นามสกุลของไฟล์:h
: แยก/
และกลับครึ่งซ้าย (เช่นถ้าฉันแก้ไขไฟล์ในเส้นทาง/tmp/test.txt
และรัน%:p:h
จะกลับมา/tmp
:t
: แยก/
และกลับครึ่งขวา (เช่นถ้าฉันแก้ไขไฟล์ในเส้นทาง/tmp/test.txt
และเรียกใช้%:p:t
จะกลับมาtext.txt
:pwd
หนึ่งสามารถดูไดเรกทอรีการทำงานปัจจุบันที่มี แน่นอนนี่เป็นเพียงไดเรกทอรีและไม่ใช่ชื่อไฟล์ เพื่อให้ได้ไดเรกทอรีทำงานและชื่อไฟล์เราสามารถใช้การลงทะเบียนพิเศษ%
ซึ่งมีข้อมูลเกี่ยวกับไฟล์ปัจจุบัน
หากคุณใช้:echo @%
คุณจะได้รับไดเรกทอรีและชื่อไฟล์ของไฟล์ปัจจุบัน
หากคุณใช้:echo expand('%:p')
คุณจะได้รับพา ธ เต็มและชื่อไฟล์ของไฟล์ปัจจุบัน นี้จะคล้ายกับ CharlesL ของคำตอบ
ฉันจำได้ว่าอันนี้เพราะถ้าคุณใช้ความช่วยเหลือของกลุ่ม:h expand
แล้วมันก็พูดถึงเรื่องนั้น%
และ%:p
และญาติของพวกเขา
ฉันใช้:
:f[ile]
นั่นคือหรือ:f
:file
ฉันประหลาดใจที่ไม่มีใครพูดถึงเรื่องนี้ในคำตอบฉันทำอะไรหายหรือเปล่า
ในการแสดงพา ธ แบบเต็มสำหรับไฟล์ทั้งหมดรวมถึง symlink ที่ได้รับการแก้ไขให้ใช้ดังต่อไปนี้
:echo resolve(expand('%:p'))
มีคำตอบที่ดีกว่า aleady แต่ถ้า (ด้วยเหตุผลบางอย่าง) คุณต้องการใช้เชลล์เพื่อรับพา ธ แบบเต็มของไฟล์ (ซึ่งจะมีประโยชน์มากขึ้นถ้าคุณจะทำการดำเนินการอื่น ๆ ของไฟล์ด้วยเชลล์) บนระบบ Unix like ที่คุณสามารถเรียกใช้:
:!realpath %
หรือ:
:'<,'>!realpath %
เพื่อแทรกเส้นทางลงในเอกสารบนส่วนที่เลือกปัจจุบัน
การลงทะเบียน%
มักจะมีชื่อของไฟล์ ตัวอย่างของโลกแห่งความเป็นจริงอาจเป็นได้ถ้าคุณกำลังแก้ไขไฟล์กำหนดค่า แต่ไม่มีสิทธิ์เขียน (และไม่ต้องการให้เรียกใช้เป็นกลุ่มรูท) คุณสามารถแก้ไขไฟล์จากนั้นเรียกใช้:
:w ! sudo tee %
เพื่อบันทึกไฟล์ (เป็นเรื่องที่น่าสนใจเล็กน้อย แต่ก็เป็นตัวอย่างที่ดีของสิ่งที่สามารถทำได้กับ%
register)
realpath
ไม่ใช่ POSIX ดังนั้นจึงง่ายกว่าที่จะทำ:!echo "$PWD/%"
คุณต้องตั้งค่าบรรทัดสถานะของคุณให้สามารถดูได้และตั้งค่าเป็นเส้นทาง ฉันทำอย่างถาวรโดยเพิ่มสองบรรทัดด้านล่างใน ~ / .vimrc ของฉัน
set laststatus=2
set statusline+=%F
หากคุณต้องการเรียกใช้เพียงครั้งเดียว จากนั้นเมื่อทำการดูประเภทเอกสาร
:set laststatus=2 <ENTER>
:set statusline+=%F <ENTER>
ฉันใช้สายการบินที่เป็นกลุ่มสำหรับสิ่งนั้นและมีคุณสมบัติที่ดี:
คุณสามารถแสดงเส้นทางที่สมบูรณ์ของไฟล์ที่คุณกำลังแก้ไขในแถบชื่อซึ่งเป็นวิธีที่สะดวกในการแสดงเส้นทางของไฟล์ในความคิดของฉัน
เพื่อที่จะทำเช่นนั้นคุณจำเป็นต้องตั้งค่าตัวเลือกและtitle
titlestring
ปัจจุบันฉันใช้การตั้งค่าต่อไปนี้:
set title
set titlestring=%{hostname()}\ \ %F\ \ %{strftime('%Y-%m-%d\ %H:%M',getftime(expand('%')))}
มันจะแสดงชื่อโฮสต์ของ Vim จากนั้นพา ธ ที่สมบูรณ์ของไฟล์และตามด้วยเวลาที่แก้ไขล่าสุดของไฟล์ ดูรูปด้านล่างสำหรับการสาธิต
Ctrl+G
เหมือนกับ 'เส้นทางที่สัมพันธ์กับ cwd ของกลุ่ม'?