Chạy các lệnh dọn dẹp chỉ cho các dòng chỉnh sửa có thể?


8

Đề cập đến các nhiệm vụ dọn dẹp như (nhưng không giới hạn) các nhiệm vụ chi tiết trong các câu hỏi sau:

Có cách nào để áp dụng các lệnh đó chỉ các dòng của các tệp đã được sửa đổi thực sự không? Điều này là để giữ cho đầu ra khác biệt tập trung vào thay đổi thực tế sau khi chỉnh sửa mã nguồn (một người đánh giá mã tiềm năng sẽ không bị nhầm lẫn bởi những thay đổi liên quan đến việc làm sạch toàn bộ tệp), trong khi không đưa ra các vấn đề định dạng mới.


vim.wikia.com/wiki/... ... Có thể là một nơi tốt để bắt đầu ... Không có thời gian để viết một câu trả lời đầy đủ tại ;-)
Martin Tournoij

@Carpetsmoker thx for the link
Guido

Tôi đã đào thêm một chút và tôi không nghĩ điều này là có thể. :changeskhông hoạt động mà không có nhiều tin tặc; vì có vẻ như thông tin này được lưu trữ trong tệp viminfo và không có cách nào để xem bạn đã thực hiện thay đổi nào trong phiên này và phiên bản trước đó ... Trừ khi bạn vô hiệu hóa tệp viminfo, nhưng điều đó khá nặng tay ... muốn được chứng minh là sai ở đây, mặc dù :-)
Martin Tournoij

@Carpetsmoker Tôi không nghĩ rằng danh sách thay đổi chứa đủ thông tin để thực hiện tính năng này, ngay cả khi bạn có thể cô lập các thay đổi được thực hiện trong mỗi phiên. Nó chứa một vị trí con trỏ cho mỗi thay đổi, vì vậy bạn không thể biết mức độ chỉnh sửa đã được thực hiện.
Giàu

@Rich Vâng, tôi đã đi đến kết luận tương tự ...
Martin Tournoij

Câu trả lời:


4

Bạn có thể sử dụng lệnh folddoopenđể thực thi lệnh chỉ trên các dòng không nằm trong một nếp gấp.

Ví dụ: bạn có thể xóa khoảng trắng từ cuối dòng bằng lệnh:

:%s/\s\+$//

Để chỉ áp dụng điều này cho các dòng hiện không nằm trong một nếp gấp, hãy thêm folddopen, như thế này:

:%folddoopen s/\s\+$//

folddoopencũng có thể được viết tắt thành foldd.

Nếu bạn đang sử dụng Vim làm công cụ tìm khác biệt của kiểm soát nguồn, thì bạn có thể sử dụng công cụ này để chỉ áp dụng các chỉnh sửa cho các dòng đã thay đổi trong khi xem khác biệt.

Lưu ý rằng theo mặc định, chế độ khác của Vim hiển thị một vài dòng trước và sau mỗi phần thay đổi. Vì vậy, để không ảnh hưởng đến dòng mà là ngay trước hoặc sau khi dòng thay đổi bạn sẽ cần phải thiết lập đầu tiên contexttrong diffoptđể 0ví dụ như:

:set diffopt=filler,context:0

Đối với các chỉnh sửa thủ công, bạn cũng có thể thấy foldopentùy chọn này hữu ích. Nó xác định loại lệnh nào sẽ khiến các nếp gấp mở ra. Mặc dù lưu ý rằng nó không ngăn việc chỉnh sửa diễn ra trong các nếp gấp theo cách mà folddoopenlệnh thực hiện.

(Nếu bạn có ý gì khác bằng "các dòng của tệp đã được sửa đổi" thì bạn sẽ phải tìm cách gấp các dòng không thay đổi trước khi bạn chạy lệnh: cách dễ nhất là giữ một bản sao không thay đổi của tệp và sử dụng vimdiff bằng tay.)


2
Đây là một ý tưởng rất sáng tạo! Tôi không biết :folddoopen, có vẻ như là một lệnh rất hữu ích. Tôi cũng muốn cung cấp rằng nếu sử dụng fugitive.vim , bạn có thể dễ dàng thấy sự khác biệt của bộ đệm hiện tại của bạn bằng :Gdifflệnh.
tommcdo 8/2/2015

Công việc này độc đáo; Tôi có thể mở một bộ đệm đầu với bản sửa đổi trước đó khác với hiện tại với :vsp new, sau đó :read !git show HEAD~1:pathvà cuối cùng :windo diffthis(và sau đó sử dụng giải pháp của bạn).
guido 9/2/2015
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.