@Malabarba đã đề cập đến việc sử dụng wgrep
gó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 ag
gói và wgrep-ag
gói để đạt được chỉnh sửa kết quả đã sử dụng multiple-cursors
gói.
Các gói này có sẵn thông qua Melpa. Bạn cũng cần phải có ag
aka 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 ag
tìm thấy.
Cài đặt ag
trên hệ thống của bạn và các gói emacs đã đề cập ở trên.
ag
hỗ 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 ag
nơi gốc của dự án là đặt một .git
thư 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-mode
hoặc sử dụng wgrep
rà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-edit
hoặ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-this
và 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-map
trong tôi ~/.emacs.d/
.
Khi tôi tìm kiếm bind-to-modi-map
trong 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-map
chọ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-this
và 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 !
.