vimdiff สำหรับ git diffs สามารถเริ่มต้นในแท็บของกระบวนการปัจจุบันได้หรือไม่
สมมติว่าฉันเปิดบัฟเฟอร์ไฟล์และ:terminal
แยกเปิดใน 1 หน้าแท็บ ฉันต้องการสร้างแท็บใหม่ที่ฉันเรียกใช้vimdiff
แต่มีการแสดงความแตกต่างของคอมไพล์ ฉันกำลังพยายามที่git difftool HEAD~1
จะแสดงในกระบวนการกลุ่มปัจจุบันของฉันในหน้าแท็บอื่น
เป็นไปได้บน Vim 8 โดยไม่มีปลั๊กอินหรือไม่?
ชนิดของฉันได้รับยานี้เมื่อฉันทำและดำเนินการแล้ว:tab terminal
git difftool HEAD~1
อย่างไรก็ตามสิ่งนี้เริ่มต้นกระบวนการย่อยเป็นกลุ่มและฉันต้องการหลีกเลี่ยงสิ่งนั้น
คำถามประเภทนี้: ฉันจะเข้าสู่โหมด vimdiff ได้อย่างไรเมื่อเปิดสองแยกแล้ว? แต่สำหรับคอมไพล์นั้นต่างกัน
คำตอบ
ขณะนี้เป็นที่แน่นอน doable ในวานิลลาvim
, ผมขอแนะนำให้คุณลองดูที่ยอดเยี่ยมของ tpopevim-fugitiveปลั๊กอิน จากนั้นคุณก็ต้องทำ:tab Gdiff
เพื่อให้ได้สิ่งที่คุณต้องการ
หากคุณไม่ต้องการติดตั้งปลั๊กอินใด ๆ สิ่งต่อไปนี้อาจใช้งานได้โดยสมมติว่าไฟล์ปัจจุบันอยู่ในหมายเลขบัฟเฟอร์ 1:
:tabnew | r! git show HEAD^:$(git rev-parse --show-prefix)#1:t
- ในแท็บที่เพิ่งเปิดใหม่
:vert sb 1 | windo diffthis
คำอธิบาย
- ขั้นแรกให้เปิดแท็บใหม่
tabnew
และโหลดเนื้อหาของHEAD^
เวอร์ชันของไฟล์ในบัฟเฟอร์ 1 ลงในนั้น - เปิดการแบ่งแนวตั้งที่มีบัฟเฟอร์ 1 ด้วย
vert sb 1
จากนั้นจึงส่งปัญหา:diffthis
ไปยังบัฟเฟอร์ทั้งหมดในแท็บเพื่อเข้าสู่โหมด diff
แก้ไข
OP ขอคำอธิบายเพิ่มเติมเกี่ยวกับขั้นตอนที่ 1 git show
ต้องการการป้อนข้อมูลของแบบฟอร์ม<rev>:<path>
ซึ่ง<path>
จะต้องสัมพันธ์กับรากของแผนผังการทำงาน ตัวอย่างเช่นถ้าเส้นทางแน่นอนของไฟล์ในบัฟเฟอร์ที่ 1 คือ/a/b/foo.ext
เพื่อให้b
มีของ.git
โฟลเดอร์ (เช่นb
เป็นรากของ repo ของคุณ) เพื่อให้การทำงานอย่างถูกต้องคุณจะต้องเรียกมันด้วยgit show
HEAD^:b/foo.e
ใช้อย่างใดอย่างหนึ่ง/a/b/foo.ext
หรือfoo.ext
ไม่ได้ผล ดังนั้นฉันจึงใช้git rev-parse --show-prefix
เส้นทางของโฟลเดอร์ปัจจุบันที่สัมพันธ์กับ git root (ซึ่งจะเป็นb/
) ในตัวอย่างนี้
จากนั้นฉันใช้vim
การขยายพา ธ เพื่อต่อท้ายชื่อของไฟล์ (นั่นคือfoo.ext
) #1
บอกvim
ดึงข้อมูลเส้นทางของแฟ้มสิ่งที่อยู่ในการโหลดบัฟเฟอร์ 1 และ:t
สารสกัดจาก "หาง" ซึ่งเป็นทุกอย่างหลังจากสุดท้ายในเส้นทางที่ส่งกลับโดย/
#1
ในบางกรณี#1
และ#1:t
เท่ากัน แต่ก็ไม่ได้เป็นเช่นนั้นเสมอไป ตัวอย่างเช่นถ้าคุณขับรถvim b/foo.ext
แล้ว#1
จะกลับมาแทนเพียงb/foo.ext
foo.ext
ตรวจสอบ:help expand
ข้อมูลเพิ่มเติม
แน่นอนคุณสามารถป้อนเส้นทางด้วยตนเองได้เช่นเดียวกับใน:tabnew | r! git show HEAD^:b/foo.ext
และจะใช้งานได้ แต่เวอร์ชันด้านบนเป็นแบบสคริปต์หรือคุณสามารถกำหนดให้กับแผนที่ได้