นี่เป็นสิ่งที่กว้างกว่าสิ่งที่ OP ถามเล็กน้อย แต่สำหรับคนที่ไม่ต้องการใช้ปลั๊กอินและระบบควบคุมการแก้ไขอื่น ๆ ตัวอย่างข้อมูลเล็ก ๆ นี้มีแนวโน้มที่จะทำงานได้ดี:
:new
:r! git show branch:file
:1d
มันสร้างหน้าต่างใหม่และแสดงไฟล์ที่นั่นโดยการอ่านผลลัพธ์ของคำสั่งที่กำหนดลงในบัฟเฟอร์ใหม่ หลักสูตรนี้ใช้ได้กับคำสั่งภายนอกใด ๆ ไม่ใช่แค่คอมไพล์
ตัวอย่างสำหรับ bzr (ที่ไวยากรณ์ REV สามารถระบุสาขา):
:new
:r! bzr cat -r REV file
:1d
ตัวอย่างสำหรับ hg (ไม่แน่ใจเกี่ยวกับสาขาใน hg; ใช้ไม่พอ)
:new
:r! hg cat -r REV file
:1d
ตัวอย่างสำหรับ svn (
:new
:r! svn cat file@REV
:1d
คุณอาจจะยังคงต้องการตั้งประเภทไฟล์เพื่อให้มีการเน้นไวยากรณ์เหมือนในโพสต์ SO แต่อย่างน้อยคุณก็ไม่ต้องยุ่งกับการวางท่อ
เมื่อเปิดแล้วคุณสามารถบันทึกไว้ภายใต้ชื่อใหม่ด้วย:w filename
หรือ:saveas filename
เนื่องจาก Vim จะไม่มีชื่อไฟล์สำหรับมัน หากคุณไม่ต้องการที่จะสามารถที่จะแก้ไขมันแล้วคุณยังสามารถโยนในและ:setlocal readonly
/ หรือ:setlocal nomodifiable
-Edit: ไฟล์อัตโนมัติ -
มันใช้งานได้อีกเล็กน้อย แต่คุณสามารถขอให้ Vim เดาประเภทไฟล์ด้วย
:filetype detect
แต่เนื่องจาก Vim ยังไม่มีชื่อจึงไม่ได้ผลดีเสมอไป (ตัวอย่างเช่นฉันดึงรหัส C มาและเดาfiltype=conf
ได้
เราสามารถตั้งชื่อได้โดยการบันทึก แต่เราไม่ต้องการเขียนทับไฟล์ที่มีอยู่ นอกจากนี้เรายังสามารถตั้งชื่อไฟล์ (ขอบคุณ @PeterRincker!) แต่อีกครั้งเราไม่ต้องการเสี่ยงต่อการชน เนื่องจากไม่น่าเป็นไปได้ที่จะมีไฟล์ที่ทั้งชื่อไฟล์และชื่อไฟล์อยู่ด้วยกันเราจะต่อไฟล์กับตัวคั่นบางตัว
:exe "silent file " . "branch" . "-" . "file"
:filetype detect
ไหน"file"
จะถูกแทนที่ด้วยชื่อไฟล์ที่เกิดขึ้นจริงและ"branch"
มีชื่อสาขา
แน่นอนว่า ณ จุดนี้เราเกือบจะเขียนปลั๊กอิน ;-)
การรวมมันเข้าด้วยกันที่นี่มันเป็นฟังก์ชั่นเฉพาะทางคอมไพล์ที่คุณสามารถทิ้งไว้ใน vimrc ของคุณ:
function! GitFile(branch,file)
new
exe "silent r! git show " . a:branch . ":" . a:file
1d
exe "silent file " . a:branch . "-" . a:file
filetype detect
setlocal readonly "don't allow saving
setlocal nomodified "allow easy quitting without saving
setlocal nomodifiable "don't allow modification
endfunction
call GitFile("whateverBranch","myfile.c")
ที่คุณสามารถห่อในคำสั่งหรือโทรโดยตรงเช่น คุณจะได้รับหน้าต่างใหม่พร้อมชื่อบัฟเฟอร์whateverBranch-myfile.c