เป็นกลุ่ม: แตกต่างกันสองส่วนในสองไฟล์ แต่ไม่ใช่ไฟล์ทั้งหมดหรือไม่


14

ฉันอัพเกรดระบบจาก Nagios 2 เป็น Nagios 3 และตอนนี้ฉันกำลังเปรียบเทียบความแตกต่างบางอย่างในไฟล์กำหนดค่าเก่าและใหม่

มีการเปลี่ยนแปลงที่สำคัญในไฟล์การกำหนดค่าและฉันไม่ต้องการแสดงความแตกต่างในไฟล์ทั้งหมดเนื่องจาก vimdiff แสดงความแตกต่างที่ไม่เกี่ยวข้องมากเกินไปและมีปัญหาในการจัดการกับ#ความคิดเห็นที่จุดเริ่มต้นของบรรทัดเป็นต้น

ฉันสามารถใช้ vim หรือฟังก์ชั่นคล้าย vimdiff เพื่อแยกส่วนสองส่วนในไฟล์ที่แตกต่างกันสองส่วนได้หรือไม่?

ตัวอย่างเช่นฉันต้องการกระจายเฉพาะบรรทัดที่มีลักษณะดังนี้:

# Define a service to check the load on the local machine. 

define service{
    use                             local-service         ; Name of service template to use
    host_name                       localhost
    service_description             Blah Blah
    check_command                   Blah Blah
    }

คำตอบ:


19

ดูเหมือนว่าiffiff.vimอาจเป็นสิ่งที่คุณต้องการ:“ ทำการโต้ตอบที่แตกต่างกับข้อความสองช่วงตึก”

คุณระบุแต่ละบล็อก (ช่วงของบรรทัด) ด้วย:Linediffคำสั่ง (เช่น:4,10Linediffหรือทำการเลือกภาพก่อนจากนั้นพิมพ์:Linediff(ซึ่งออกมาเป็น:'<,'>LineDiff) ช่วงสามารถมาจากไฟล์ / บัฟเฟอร์เดียวกันหรือช่วงอื่น เมื่อคุณระบุสองช่วงแล้วมันจะเปิดแท็บใหม่ที่มีบัฟเฟอร์แบบใหม่สองโหมด (แยกเป็นส่วน) สำหรับช่วงที่ระบุ คุณสามารถแก้ไขและ:wในบัฟเฟอร์เหล่านี้เพื่ออัพเดตช่วงดั้งเดิม เมื่อคุณทำเสร็จให้:qออกจากบัฟเฟอร์ต่าง ๆ และ:LinediffResetเพื่อกำจัดตัวระบุช่วงในบัฟเฟอร์เดิม

คำตอบ Stackoverflowที่ครั้งแรกที่ผมได้เรียนรู้จาก linediff.vim ยังแสดงให้เห็นคู่ของแมป คำตอบอื่น ๆ สำหรับคำถามนั้นยังกล่าวถึงโซลูชันที่กำหนดเองและปลั๊กอินอื่นที่สามารถแก้ไขปัญหาเดียวกันนี้ได้


6

ฉันไม่ได้พบวิธีที่ตรงไปตรงมาจริงๆที่จะทำแบบนี้ แต่ผมเคยประสบความสำเร็จที่ดีงามกับ NrrwRgn (ภาคแคบ) ปลั๊กอินhttp://www.vim.org/scripts/script.php?script_id=3075 มันช่วยให้คุณเลือกภูมิภาคของบัฟเฟอร์และเปิดพื้นที่นั้นในบัฟเฟอร์ใหม่ คุณสามารถแก้ไขบัฟเฟอร์ใหม่นั้นและเมื่อคุณปิดปลั๊กอินจะคัดลอกข้อความที่แก้ไขของคุณกลับไปยังพื้นที่ที่มาจากในไฟล์ต้นฉบับโดยอัตโนมัติ นอกจากนี้คุณยังสามารถคัดลอกภูมิภาคต่าง ๆ ของไฟล์อย่างน้อยหนึ่งไฟล์ไปยังบัฟเฟอร์ใหม่จากนั้นจึงสร้างบัฟเฟอร์ใหม่ นั่นเป็นวิธีที่ฉันมักจะใช้ปลั๊กอิน - เพื่อตรวจสอบความแตกต่างระหว่างฟังก์ชั่นที่คล้ายกันที่กำหนดไว้ในไฟล์เดียว

ในกรณีของคุณคุณสามารถเปิดทั้งสองไฟล์ใน Vim จากนั้นใช้Vเพื่อเลือกส่วนที่น่าสนใจในไฟล์แรกและพิมพ์\nrเพื่อคัดลอกส่วนนั้นไปยังบัฟเฟอร์ใหม่ ทำซ้ำสำหรับส่วนที่คล้ายกันในไฟล์อื่น :diffthisจากนั้นในแต่ละสองบัฟเฟอร์ใหม่ดำเนินการ


ขอขอบคุณ! จะ\nrทำอะไร?
Stefan Lasiewski

1
ปลั๊กอินจะแม็พ<Leader>nrโดย<Leader>ค่าเริ่มต้นที่ `\` ไปยังคำสั่งปลั๊กอินที่คัดลอกภูมิภาคที่เลือกไปยังบัฟเฟอร์ใหม่
garyjohn

@garyjohn คุณจัดการNrrrRgnแยกได้อย่างไร
dev

1
@dev: ฉันมีสองบรรทัดต่อไปของการกำหนดค่า NrrwRgn ในของฉัน ~ / .vimrc: และlet g:nrrw_rgn_vert = 1 let g:nrrw_rgn_protect = 'n'ด้วยอดีต NrrwRgn แยกเปิดทางด้านซ้ายของหน้าต่างปัจจุบัน ฉันลืมว่าพวกเขาเปิดทันทีไปทางซ้ายหรือไปทางซ้ายไกล ที่กล่าวว่าฉันไม่ได้ใช้ NrrwRgn สำหรับสิ่งนี้อีกต่อไปโดยพบสิ่งที่ดีกว่า: Linediff มันเปิดพื้นที่ใหม่ในแท็บใหม่ซึ่งฉันพบว่าผู้ดูแลและสะดวกกว่า คุณสามารถค้นหา LInediff ที่หรือhttp://www.vim.org/scripts/script.php?script_id=3745 https://github.com/AndrewRadev/linediff.vim
garyjohn

ขอบคุณมาก @garyjohn NrrwRgnไปทางซ้ายหรือด้านบนซึ่งทำให้แยกไม่ได้สวยมาก ฉันได้ลองใช้ชุด!รูปแบบ แต่พวกเขาพิสูจน์แล้วว่าบอบบางมาก (ข้อผิดพลาดของสคริปต์ + ไม่มีวิธีใหม่ ๆ ในการกลับไปที่ไฟล์ต้นฉบับ) จะlinediff.vimลองด้วยเช่นกันแม้ว่าฉันจะหวังว่าNrrwRgnจะดีขึ้นในอนาคต
dev

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