Làm thế nào để mở rộng / thu gọn một phần khác nhau trong Vimdiff?


295

Tôi đã bắt đầu sử dụng vimdiff ngày hôm nay và muốn thực hiện một số điều mà tôi đã được cấp trên các trình chỉnh sửa khác nhau dựa trên Windows (như mở rộng / thu gọn một phần khác, mở rộng tệp đầy đủ / chỉ khác với 3 dòng ngữ cảnh ở trên hoặc bên dưới, v.v.) Tôi hiện chỉ biết các lệnh sau:

Các phím tắt bàn phím:

  • do - Nhận thay đổi từ cửa sổ khác vào cửa sổ hiện tại.

  • dp - Đặt các thay đổi từ cửa sổ hiện tại vào cửa sổ khác.

  • ]c - Chuyển sang thay đổi tiếp theo.

  • [c - Chuyển đến thay đổi trước đó.

  • CTRL+ W, w- Chuyển sang cửa sổ chia khác ( CTRL+ W, CTRL+ Wthực hiện tương tự, trong trường hợp bạn buông CTRLphím sau một chút)

Ai đó có thể chỉ cho tôi đi đúng hướng để tôi có thể sao chép các tính năng tương tự không?

Chẳng hạn, thật tuyệt nếu tôi có thể mở rộng / thu gọn các đường xung quanh diffs.


2
Để biết lối tắt để thêm / hoàn nguyên danh sách dài các thay đổi, hãy tham khảo stackoverflow.com/q/6093746/212942
TCSGrad


1
Thật thú vị khi thấy câu hỏi được đóng lại sau hơn 4 năm, với nó là 3 bài đăng hàng đầu khi 'vimdiff' bị googled!
TCSGrad

Câu trả lời:


241

Ngoài những thứ bạn đề cập, tôi chỉ sử dụng thường xuyên khi khác nhau như sau:

  • :diffupdate :diffu-> tính toán lại độ lệch, hữu ích khi sau khi thực hiện một số thay đổi, vim sẽ không hiển thị các thay đổi tối thiểu nữa. Lưu ý rằng nó chỉ hoạt động nếu các tệp đã được sửa đổi bên trong vimdiff. Nếu không, sử dụng:
    • :e để tải lại các tập tin nếu chúng đã được sửa đổi bên ngoài vimdiff.
  • :set noscrollbind-> tạm thời vô hiệu hóa cuộn đồng thời trên cả hai bộ đệm, có thể :set scrollbindcuộn lại và cuộn.

Hầu hết những gì bạn yêu cầu là gấp: chương hướng dẫn sử dụng vim về gấp . Bên ngoài khác tôi đôi khi sử dụng:

  • zo -> mở gấp.
  • zc -> đóng gấp.

Nhưng có lẽ bạn sẽ được phục vụ tốt hơn bởi:

  • zr -> giảm mức độ gấp.
  • zm -> thêm một cấp độ gấp, xin vui lòng.

hoặc thậm chí:

  • zR -> Giảm hoàn toàn việc gấp, tôi nói!.
  • zM -> gấp nhất!.

Một điều khác mà bạn yêu cầu, sử dụng n dòng gấp, có thể được tìm thấy ở phần hướng dẫn tham khảo vim trên các tùy chọn , thông qua phần trên diff :

  • set diffopt=<TAB>, sau đó cập nhật hoặc thêm context:n.

Bạn cũng nên xem phần hướng dẫn sử dụng trên diff .


Thực sự rất toàn diện !! Tôi sẽ kiểm tra các liên kết bạn đã nói, nhưng hãy mở câu hỏi thêm vài ngày nữa để xem tôi có nhận được nhiều câu trả lời không (tôi đã đăng vào cuối tuần và sau đó không có nhiều người sẽ hoạt động).
TCSGrad

Nhân tiện, bạn có biết nếu vimdiff có thể được sử dụng để hợp nhất / giải quyết 3 chiều không? Nó sẽ thực sự tuyệt vời sau đó !!
TCSGrad

1
@ shan23 Để hợp nhất 3 chiều (đối với git), hãy kiểm tra điều này . Có ý kiến ​​trên svn quá. Vẫn đang cố gắng tìm ra các lệnh khi bạn có 4 bộ đệm (do / dp không hoạt động).
quornian

Để :set noscrollbindcó hiệu lực, nó cũng phải được :set nocursorbindsử dụng không phải là mặc định. Vì vậy, cả hai lựa chọn phải được điều chỉnh.
đẫm máu

4

đặt vimdiff để bỏ qua trường hợp

Đã bắt đầu vim diff với

 gvim -d main.sql backup.sql &

Tôi thấy rằng một tập tin khó chịu có các từ khóa MySQL viết thường chữ hoa khác cho thấy sự khác biệt trên thực tế mỗi dòng khác

:set diffopt+=icase

cái này cập nhật màn hình một cách linh hoạt và bạn có thể dễ dàng tắt nó lại


Mặc dù đây là một mẹo hay, tôi không thấy nó liên quan đến câu hỏi như thế nào (làm thế nào để mở rộng và thu gọn các phần khác nhau trong vimdiff).
Paul Stelian


0

ctrl + w, w như đã đề cập có thể được sử dụng để điều hướng từ khung này sang khung khác.

Bây giờ bạn có thể chọn một thay đổi cụ thể và dán nó vào khung khác như sau. Tôi đang đưa ra một ví dụ như thể tôi muốn thay đổi đoạn mã của mình từ khung 1 sang khung 2 và hiện tại con trỏ của tôi đang ở trong panel1

  • Sử dụng Shift-v để tô sáng một dòng và sử dụng các phím lên hoặc xuống để chọn đoạn mã bạn yêu cầu và tiếp tục từ bước 3 được viết dưới đây để dán các thay đổi của bạn vào khung khác.

  • Sử dụng chế độ trực quan và sau đó thay đổi nó

    1 lần nhấp 'v' này sẽ đưa bạn đến chế độ trực quan 2 sử dụng phím lên hoặc xuống để chọn mã yêu cầu của bạn 3 nhấp vào, Esc 'thoát phím 4 Bây giờ sử dụng' yy 'để sao chép hoặc' dd 'để cắt thay đổi 5 do' ctrl + w, w 'để điều hướng đến pane2 6 nhấp vào' p 'để dán thay đổi của bạn vào nơi bạn yêu cầu


1
Toàn bộ những gì bạn đã chỉ định (ngoại trừ dòng đầu tiên) là một tính năng của chính vim, không phải vimdiff mỗi lần nói.
TCSGrad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.