ฉันจะทำเฉพาะ dp หรือทำแค่บรรทัดเท่านั้นไม่ใช่บล็อกทั้งหมดใน Vim diff?


28

ขณะนี้ฉันใช้ตัวเลือกเมนู MacVim (Snapshot 64) "แยกความแตกต่างด้วย ... "

ไฟล์นี้เป็นของ Django settings.pyจากรุ่น 1.3.1 ไปเป็นไฟล์ใหม่จากรุ่น 1.4

ภาพหน้าจอ

ฉันรู้สองคำสั่งพื้นฐาน

  1. do เพื่อ "ขอรับ" (และแทนที่) บล็อกจากอีกด้านหนึ่ง
  2. dp เพื่อ "วาง" (และแทนที่) บล็อกไปอีกด้านหนึ่ง

แต่ทั้งสองคำสั่งเขียนบล็อกทั้งหมดซึ่งใน MacVim คือไฮไลท์สีม่วง

ถ้าคุณดูที่บล็อกที่ 2 คุณจะเห็นว่าจากบรรทัดที่ 2 และ 3 มีเพียง 2 คำที่มีความแตกต่างกันและmysite hobbes3ฉันต้องการแทนที่ต่อบรรทัดไม่ใช่บล็อกทั้งหมด

ดังนั้นสิ่งที่มีคำสั่งให้แทนที่ทำdoและdpต่อบรรทัดตรงข้ามกับบล็อกทั้งหมดหรือฉันต้องพิมพ์ด้วยตนเอง?

คำถามโบนัส : ฉันสังเกตเห็นว่าเมื่อฉันแก้ไขบล็อกด้วยตนเองฉันสูญเสียการเน้นสีม่วง ฉันจะ "รีเฟรช" ส่วนต่างอีกครั้งเพื่อรวมไฮไลต์โดยไม่ต้องเปิดไฟล์อีกครั้งได้อย่างไร

โปรดลองรักษาคำตอบ Vim-General ตรงข้ามกับ MacVim-specific

คำตอบ:


30

มีหลายวิธีในการทำเช่นนี้

  1. :diffgetเลือกช่วงของสายในบัฟเฟอร์ปลายทางที่คุณต้องการที่จะได้รับจากบัฟเฟอร์แหล่งที่มาและการใช้งาน ตัวอย่างเช่นคุณสามารถสายตาเลือกช่วงของสายด้วยแล้วพิมพ์V:diffget
  2. :diffputเลือกช่วงของสายในบัฟเฟอร์แหล่งที่มาที่คุณต้องการที่จะนำลงในบัฟเฟอร์ปลายทางและการใช้งาน ตัวอย่างเช่นการใส่บรรทัดปัจจุบันลงในบัฟเฟอร์อื่น ๆ :.diffputประเภท
  3. ใช้งัดและวาง เลือกช่วงของบรรทัดในบัฟเฟอร์ต้นทางที่คุณต้องการคัดลอกลงในบัฟเฟอร์ปลายทางดึงออกโดยใช้Yเลื่อนเคอร์เซอร์ไปที่บัฟเฟอร์ปลายทางแล้ววางในตำแหน่งที่คุณต้องการด้วยpหรือPจากนั้นลบบรรทัดที่คุณไม่ต้องการ
  4. งัดข้างต้น แต่ในบัฟเฟอร์ปลายทางสายตาเลือกช่วงของเส้นคุณต้องการแทนที่ (ไม่จำเป็นต้องมีหมายเลขเดียวกันของเส้น) "0pและประเภท ที่ใช้ลงทะเบียน 0 (ศูนย์) ซึ่งมักจะมีข้อความของงัดล่าสุด

การ "ฟื้นฟู" จอแสดงผลเพื่อแสดงไฮไลต์ที่เหมาะสมดำเนินการหรือเพียงแค่:diffupdate :diffuบางครั้งมันไม่เพียงพอและคุณต้องเลื่อนเคอร์เซอร์ไปที่หน้าต่างอื่นเพื่อให้การรีเฟรชสมบูรณ์

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการคัดลอกต่าง

:help copy-diffs

3

ฉันยังต้องการที่จะแก้ไขหนึ่งบรรทัดในช่วงเวลาหนึ่งในช่วงเวลาที่ต่างกัน ดังนั้นฉันจึงสร้างแผนที่ง่าย ๆ และวางไว้ในไฟล์ vimrc ของฉัน

nnoremap <silent> <leader>dp V:diffput<cr>
nnoremap <silent> <leader>dg V:diffget<cr>

คุณสามารถใช้ทำแทน dg แต่ฉันคุ้นเคยกับการคิดว่า "diffget" แทนที่จะเป็น [o] btain

สำหรับโบนัสของคุณฉันใช้แผนที่ง่าย ๆ อีกสองครั้ง:

nnoremap <silent> <leader>df :call DiffToggle()<CR>

ตอนนี้ df จะปิด / เปิด diffmode ดังนั้นฉันแค่ปิดและเปิดใหม่

และตัวเลือกโบนัสคือการเพิ่ม

nmap <silent> <leader>du :wincmd w<cr>:normal u<cr>:wincmd w<cr>

สิ่งนี้จะช่วยให้คุณสามารถยกเลิกการพิมพ์หรือการเปลี่ยนแปลงที่ไม่ต้องการในไฟล์ / หน้าต่างอื่น ๆ ได้เนื่องจาก: การเลิกเพียงแค่คุณจะยกเลิกการเปลี่ยนแปลงในหน้าต่างปัจจุบันเท่านั้น

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