@Malabarba đã đề cập đến việc sử dụng wgrepgói để chỉnh sửa kết quả grep / ack / ag.
Tôi muốn viết hướng dẫn chi tiết về cách tôi sử dụng aggói và wgrep-aggói để đạt được chỉnh sửa kết quả đã sử dụng multiple-cursorsgói.
Các gói này có sẵn thông qua Melpa. Bạn cũng cần phải có agaka the_silver_searcher được cài đặt trên hệ thống của bạn.
Hướng dẫn này áp dụng cho các trường hợp bạn đang tìm cách thực hiện các chỉnh sửa dòng đơn tại tất cả / các vị trí đã chọn được agtìm thấy.
Cài đặt agtrên hệ thống của bạn và các gói emacs đã đề cập ở trên.
aghỗ trợ tìm kiếm tệp có nội dung phù hợp với biểu thức chính quy định của bạn. Cách đơn giản nhất để biết agnơi gốc của dự án là đặt một .gitthư mục trống ở đó. Sau đó thực hiện tìm kiếm bằng cách sử dụng M-x ag-project-regexp.
Bộ đệm kết quả của tìm kiếm ag không thể chỉnh sửa theo mặc định. Để làm cho nó có thể chỉnh sửa, hãy làm M-x wgrep-change-to-wgrep-modehoặc sử dụng wgrepràng buộc -default C-c C-p.
Bây giờ nếu bạn cần thay đổi 'abcdef' thành 'ghijkl' trong tất cả các tệp của mình, bạn sẽ tìm kiếm 'abcdef' và bộ đệm kết quả ag sẽ hiển thị tất cả các dòng có chứa chuỗi đó. Sau đó, bạn làm cho bộ đệm đó có thể chỉnh sửa và thay đổi các chuỗi đó theo cách thủ công và những thay đổi đó sẽ phản ánh trong bộ đệm tệp thực tế khi thực hiện M-x wgrep-finish-edithoặc sử dụng liên kết mặc định C-c C-e. Bạn cũng có thể sử dụng query-replace-regexpđể làm thay thế tìm kiếm.
Tôi thích sử dụng multiple-cursorsđể tái cấu trúc nhanh để tôi có thể thấy phản hồi theo thời gian thực về nơi nhiều lần chỉnh sửa của tôi diễn ra đồng thời. Đánh dấu chuỗi bạn muốn thay thế trong bộ đệm kết quả ag đó và gọi M-x mc/mark-all-like-thisvà sau đó chỉnh sửa trong sự sợ hãi khi bạn thấy nội dung được chỉnh sửa tại nhiều điểm cùng một lúc.
Khi bạn hài lòng với các chỉnh sửa, như tôi đã đề cập ở trên, hãy thực hiện C-c C-eđể "phản ánh" các thay đổi trong bộ đệm thực tế. Bộ đệm chưa được lưu.
Để lưu tất cả các bộ đệm, tôi thường làm điều đó trong một lần, sử dụng C-x s !ràng buộc mặc định của emacs .
Dưới đây là một ví dụ sử dụng với ảnh chụp màn hình:
Nó cho thấy quá trình thay thế tất cả các trường hợp bind-to-modi-mapđến bind-to-my-maptrong tôi ~/.emacs.d/.
Khi tôi tìm kiếm bind-to-modi-maptrong thư mục cài đặt emacs của mình, tôi nhận được kết quả như sau:
Bộ đệm này là chỉ đọc.
Sau M-x wgrep-change-to-wgrep-mode, tôi nhấn mạnh, -modi-mapchọn tất cả các phiên bản của lựa chọn đó bằng cách sử dụng M-x mc/mark-all-like-thisvà sau khi chỉnh sửa các lựa chọn -my-mapđó, nó trông như dưới đây:

Màu xanh lam cho biết dòng nào sẽ được sửa đổi khi tôi nhấn C-c C-e.
Khi nhấn C-c C-e, bạn có thể thấy thay đổi được phản ánh trong tệp thực tế trong ảnh chụp màn hình này:

Sau đó tôi sẽ lưu tất cả các tập tin sửa đổi bằng cách sử dụng C-x s !.