2012-05-23 38 views
8

Trong vim, tôi muốn hoàn tác qua tất cả thay đổi trong tất cả bộ đệm theo trình tự thời gian.vim - hoàn tác trên tất cả bộ đệm/cửa sổ/tệp mở vv

ví dụ: trong phiên vim, tôi thường có nhiều tab đang mở, có nhiều cửa sổ trong mỗi tab. Sử dụng u để hoàn tác (hoặc g;/g, để di chuyển qua danh sách thay đổi), vim di chuyển qua các thay đổi được thực hiện cho rằng bộ đệm, ngay cả khi có nhiều thay đổi gần đây hơn trong các bộ đệm khác. (Mà tôi thừa nhận, là những gì tôi muốn hầu hết thời gian.)

Nhưng có cách nào để di chuyển trở lại thông qua các thay đổi trong tất cả các bộ đệm theo trình tự thời gian? (Tôi tưởng tượng vim sẽ nhảy xung quanh từ tab này sang tab khác.)

Tại sao điều này hữu ích? ... chủ yếu là như vậy khi tôi tiếp tục viết mã sau khi nghỉ ngơi, tôi có thể nhắc nhở bản thân mình về "nơi tôi đến", tức là tất cả những thay đổi tôi đã thực hiện lần trước.

(sử dụng MacVim 7.3)

UPDATE: phản ứng về việc sử dụng git/lanh lợi làm cho điểm tốt (nhờ đặc biệt đối với git stash), nhưng tôi vẫn muốn thấy tính năng này hữu ích vì nó bước tôi trở lại qua những thay đổi gần đây, trật tự, với màu cú pháp, bên trong vim vv)

+5

Tôi cho rằng nhật ký cam kết là chỉ báo tiến bộ tốt hơn bất kỳ thứ gì khác. Ngay cả khi bạn có những thay đổi chưa hoàn thành, bạn có thể thêm một tin nhắn vào 'git stash'. – derekerdmann

+0

FTR Tôi đồng ý với tình cảm chung ở đây: sử dụng VCS. Tốt hơn, hãy sử dụng DVCS và microcommit! – sehe

+0

Trường hợp sử dụng khác: Tôi chỉ dành 5 phút để tái cấu trúc quá tích cực. Bây giờ một tấn các bài kiểm tra đơn vị đang thất bại và tôi không có ý tưởng những gì tôi đã phá vỡ. Tôi muốn hoàn tác cho đến khi các bài kiểm tra lại xuất hiện. Có, nếu tôi nghĩ rằng để kiểm tra vào kiểm soát phiên bản trước khi refactoring nó sẽ có được tốt, nhưng tôi không nghĩ về điều đó. – alexanderbird

Trả lời

4

Bạn có thể đi một chặng đường dài với undolist:

:bufdo echo expand('%') | undolist 

Kết quả trong, ví dụ cho một phiên chỉnh sửa đơn giản:

SpiritParser.cpp 
number changes when    saved 
    1  1 13:57:51 
SpiritParser.h 
number changes when    saved 
    1  1 13:57:55 

Để thực hiện điều này cho tất cả các cửa sổ có thể nhìn thấy, làm windo thay vì bufdo. Nếu bạn có nhiều tab, hãy làm cho rằng

:tabdo windo echo expand('%') | undolist 
1

bạn nên sử dụng một số loại điều khiển phiên bản: Git, Mercurial, Subversion, bất cứ điều gì ...

Mỗi buổi sáng bạn có thể đọc nhật ký của dự án của bạn và đi qua các cam kết trước để xem những gì đã thay đổi, bạn có thể tạo các chi nhánh để làm việc trên các tính năng cụ thể, bạn viết thông điệp cam kết rõ ràng và mang tính mô tả để hiểu rõ hơn về những thay đổi trước đó của bạn, v.v.

Hoặc bạn có thể làm điều gì đó như :windo u. Nhưng điều đó nghe có vẻ lộn xộn.

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