2011-04-25 42 views
5

Tôi đang làm việc trên một tập lệnh đã trở nên khá phức tạp. Tôi nghi ngờ có một số phần có mã gần như giống hệt nhau. Tôi có thể (và làm thế nào tôi có thể) mở tập tin trong vim, với hai (hoặc nhiều) cửa sổ trên bộ đệm, và diff các nội dung của các cửa sổ trên cùng một tập tin? vimdiff dường như chỉ hoạt động trên hai tệp. Nếu tôi tạo một bản sao của tệp và cố gắng vimdiff hai phiên bản, nguồn gốc khác vẫn bị khóa ở đầu tệp. Mặc dù tôi có thể unscroll-lock các cửa sổ, và di chuyển các cửa sổ đến các phần của tập tin tôi muốn so sánh các diffs không hiển thị. Bất kỳ gợi ý hay mẹo nào? Tôi có thể cắt và dán các phần tôi muốn so sánh với các tệp khác nhau và sau đó áp dụng vimdiff nhưng sau đó tôi có nguy cơ bị mất trong phần nào đến từ đâu khi tôi cố vá các tệp riêng lẻ lại với nhau và tôi cảm thấy chắc chắn phải đơn giản hơn , cách dễ dàng hơn.Các cửa sổ khác nhau trong vim

Trả lời

2

Những gì tôi thường làm là diff để một bản sao

:%w %.alt 
:vert diffsplit %.alt 

Và sau đó happiliy sắp xếp lại các phiên bản 'alt' để các bit giả phù hợp được liên kết.


Lưu ý rằng (có lẽ) git chứa spiffy merge/diff bò-quyền hạn đó sẽ có thể phát hiện sub-file chuyển khối thay đổi.

Mặc dù tôi chưa thực sự đưa điều này vào thực tế, tôi có linh cảm rằng plugin git rất đẹp fugitive cho vim có thể tận dụng một số mã lực này để làm việc này dễ dàng hơn. Lưu ý: đầy đủ mong đợi này để yêu cầu scriptinh trước khi có thể sử dụng, nhưng tôi vẫn nghĩ rằng nó sẽ được tốt đẹp để chia sẻ ý tưởng này

+0

Được rồi, sử dụng% để tham chiếu đến tên tệp của bộ đệm hiện tại rất hay, tôi không biết điều đó! Nhưng tôi vẫn không chắc chắn làm thế nào để sắp xếp lại các phiên bản đúng alt để các bit phù hợp có được liên kết. : se noscrollbind dường như giúp đỡ, nhưng làm thế nào tôi có thể nhận được vim để làm nổi bật sự khác biệt giữa hai cửa sổ? – ChrisDR

+0

Tôi có nghĩa là sắp xếp lại (tôi sử dụng C/C#, vì vậy 'd2] M' xóa hai phương pháp, điều hướng đến điểm chèn,' P' và voila); Ngoài ra 'phiên bản đúng' là một lỗi đánh máy cho 'phiên bản alt'. Tôi biết đây vẫn là lao động thủ công, nhưng (ngoài ý tưởng sử dụng phát hiện bản sao/di chuyển của Git) tôi không biết cách nào tốt hơn. Bí quyết để sử dụng một bản sao tạm thời là loại gọn gàng. – sehe

1

Là một thay thế (có lẽ bạn có thể chia sẻ một kịch bản nếu bạn nhận được để nó đầu tiên!) giải pháp mà tôi đã sử dụng thỉnh thoảng và hoạt động rất độc đáo theo ý kiến ​​của tôi là linediff.vim.

Nó cho phép bạn sử dụng chế độ trực quan để chọn hai nội dung văn bản từ bộ đệm tùy ý (hoặc tương tự cho vấn đề đó) và chạy vimdiff trên chúng. Vẻ đẹp của nó, đó là khi bạn chỉnh sửa và lưu các bộ đệm diff tạm thời, bạn cập nhật các bộ đệm ban đầu với các thay đổi, mà không lưu.

Một trong các trường hợp sử dụng của tôi là khi tôi giải quyết các vấn đề hợp nhất liên quan đến việc tái cấu trúc tập lệnh và sắp xếp lại, trong đó một hàm đã được di chuyển và có lẽ cũng đã được sửa đổi. Để đảm bảo bạn không bị mất bất kỳ sự sửa đổi nào đến từ tổ tiên, bạn chỉ cần phân biệt hai phiên bản của hàm một cách trực quan bằng cách chọn chúng và chạy lệnh lót.

Các vấn đề liên quan