Sử dụng Emacs để tìm và thay thế đệ quy trong các tệp văn bản chưa được mở


212

Để theo dõi câu hỏi này , nó đang cố gắng tìm ra cách làm một việc như thế này thật dễ dàng, điều đó đặc biệt ngăn tôi làm quen với việc sử dụng Emacs và thay vào đó là khởi động trình soạn thảo mà tôi đã quen thuộc. Tôi sử dụng ví dụ ở đây khá thường xuyên trong việc chỉnh sửa nhiều tệp.

Trong Ultraedit, tôi sẽ thực hiện Alt + s để hiển thị hộp thoại với các tùy chọn: Tìm (bao gồm sử dụng các biểu thức chính quy trên nhiều dòng), Thay thế bằng, Trong Tệp / Loại, Thư mục, Trường hợp khớp, Chỉ toàn bộ từ, Danh sách Thay đổi tập tin và tìm kiếm thư mục phụ. Thông thường trước tiên tôi sẽ sử dụng chuột để nhấp-kéo chọn văn bản mà tôi muốn thay thế.

Chỉ sử dụng Emacs (trên Windows XP), mà không gọi bất kỳ tiện ích bên ngoài nào, làm thế nào để thay thế tất cả foo \ nbar bằng bar \ nbaz trong *.c*.hcác tệp trong một số thư mục và tất cả các thư mục bên dưới nó. Có thể Emacs không phải là công cụ tốt nhất để làm điều này, nhưng làm thế nào để thực hiện nó dễ dàng với một lệnh tối thiểu?

Câu trả lời:


370
  1. M-x find-name-dired: bạn sẽ được nhắc nhập thư mục gốc và mẫu tên tệp.
  2. nhấn t để "chuyển đổi dấu" cho tất cả các tệp được tìm thấy.
  3. Nhấn Q"Truy vấn thay thế trong tệp ...": bạn sẽ được nhắc về biểu thức truy vấn / thay thế.
  4. Tiếp tục như với query-replace-regexp: SPACEđể thay thế và chuyển sang trận đấu tiếp theo, nbỏ qua trận đấu, v.v.
  5. Nhấn C-x sđể lưu bộ đệm. (Sau đó y, bạn có thể nhấn nhoặc !để lưu tất cả cùng một lúc)

10
Không, đó là đệ quy. Phiên bản không đệ quy sẽ là% m ở chế độ dired.
Chris Conway

5
Có thể vì bạn đang gọi C: \ WINDOWS \ system32 \ find.exe, không phải GNU find.
Jazz

6
Steen, Chris: Có thể không chính xác những gì bạn muốn nhưng bạn có thể sử dụng 'Cx s' (lưu một số bộ đệm), nó sẽ nhắc bạn cho mỗi tệp đã sửa đổi, do đó bạn chỉ phải nhấn 'y' nhiều lần.
danielpoe

48
C-x s !để lưu tất cả các tập tin cùng một lúc.
cYrus

10
M-,để tiếp tục tìm kiếm và thay thế (ví dụ: sau dấu nhắc "hoàn nguyên tệp" nếu tệp thay đổi trên đĩa).
tfischbach

37
  • M-x find-name-dired RET
    • có thể mất một thời gian để tất cả các tệp xuất hiện trong danh sách, cuộn xuống dưới cùng ( M->) cho đến khi " find finished" xuất hiện để đảm bảo tất cả chúng đã được tải
  • Nhấn tđể "chuyển đổi dấu" cho tất cả các tệp được tìm thấy
  • Nhấn Q"Truy vấn thay thế trong tệp ...": bạn sẽ được nhắc về biểu thức truy vấn / thay thế.
  • Tiếp tục như với truy vấn-thay thế-regrec: SPACE hoặc yđể thay thế và di chuyển đến trận đấu tiếp theo, n để bỏ qua một trận đấu, v.v.
    • Kiểu ! để thay thế tất cả các lần xuất hiện trong tệp hiện tại mà không yêu cầu, Nbỏ qua tất cả các thay thế có thể cho phần còn lại của tệp hiện tại. ( Nchỉ emacs 23+)
    • Để thực hiện thay thế trên tất cả các tệp mà không cần hỏi thêm, hãy nhập Y.
  • Gọi tới ib iberer ( C-x C-bnếu bị ràng buộc với ibuffer hoặc M-x ibuffer RET) để liệt kê tất cả các tệp đã mở.
  • Kiểu * u để đánh dấu tất cả các tệp chưa được lưu, nhập Sđể lưu tất cả các tệp được đánh dấu
  • * * RET để bỏ đánh dấu tất cả các nhãn hiệu hoặc loại D để đóng tất cả các tệp được đánh dấu

Câu trả lời này được kết hợp từ câu trả lời này , từ trang web này và từ ghi chú của riêng tôi. Sử dụng Emacs 23+.


3
ibufferkhông bị ràng buộc C-x C-btheo mặc định.
phils

2
Vâng Cá nhân tôi khuyên mọi người rằng đừng ràng buộc C-x C-bđể ibuffer, bởi vì nó là tốt hơn rất nhiều so với mặc định ràng buộc. Chỉ cần thêm (global-set-key (kbd "C-x C-b") 'ibuffer)vào tập tin .emacs của bạn. Không, sử dụng M-x ibuffer RETtrong các hướng dẫn ở trên.
phils

đồng ý. Tôi nghĩ rằng tôi có bộ công cụ khởi động emacs, đó là lý do tại sao của tôi bị ràng buộc
Frank Henard

1
Tệp bla-bla-blađược truy cập chỉ đọc và nó dừng để tìm kiếm. Làm thế nào để tránh / bỏ qua điều đó và tiếp tục thay thế? Cảm ơn.
Felipe

3
Tại sao ibufferkhi bạn có thể C-x s( save-some-buffers) và gõ !? Tôi không muốn giận dữ, chỉ tò mò. PS cộng để mô tả !, NY.
d12frosted

17

Các câu trả lời được cung cấp rất hay, tuy nhiên tôi nghĩ tôi nên thêm một cách tiếp cận hơi khác.

Đó là một phương pháp tương tác nhiều hơn, và yêu cầu wgrep, rgrepiedit. Cả hai ieditwgrepphải được cài đặt qua MELPA hoặc Marmalade (sử dụngM-x package-list-packages )

Lần chạy đầu tiên M-x rgrep để tìm chuỗi bạn đang tìm kiếm.

Bạn sẽ có thể chỉ định loại / mẫu tệp và thư mục để lặp lại.

Tiếp theo bạn sẽ cần chạy wgrepbắt đầu vớiC-s C-p .

Wgrep sẽ cho phép bạn chỉnh sửa rgrepkết quả, vì vậy hãy đặt một vùng trên chuỗi để khớp và bắt đầu iedit-modevớiC-; (tùy thuộc vào thiết bị đầu cuối của bạn, bạn có thể cần phải tái ràng buộc này)

Tất cả các lần xuất hiện sẽ có thể chỉnh sửa cùng một lúc. C-x C-sđể cam kết wgrep. Sau đó C-x s !để lưu các tập tin thay đổi.

Lợi ích chính của phương pháp này là bạn có thể sử dụng iedit-modeđể tắt các trận đấu nhất định M-;. Bạn cũng có thể sử dụng các kết quả rgrepđể nhảy vào các tệp, ví dụ nếu bạn có một kết quả không mong muốn.

Tôi thấy nó rất hữu ích để thực hiện các chỉnh sửa nguồn và đổi tên các ký hiệu (biến, tên hàm, v.v.) trong một dự án.

Nếu bạn chưa biết / sử dụng chế độ iedit thì đây là một công cụ rất tiện dụng, tôi thực sự khuyên bạn nên xem thử.


Kỹ thuật này khá mạnh mẽ ngay cả khi không sử dụng iedit. Nó biến việc biết cách grep (dễ dàng với lgrep / rgrep) thành biết cách thay thế hàng loạt tìm kiếm!
NeilenMarais

Kết hợp rgrep / wgrep / macro là tuyệt vời.
ocodo

2
Keybinding để bắt đầu wgrepC-c C-pbtw.
Techniao


13

Tôi thường sử dụng các công cụ khác để thực hiện tác vụ này và có vẻ như nhiều cách tiếp cận được đề cập tại mục nhập Tìm và Thay thế tệp trên EmacsWiki , nhưng Gói Findr vẻ rất hứa hẹn.

Ăn cắp một phần của tập tin nguồn :

(defun findr-query-replace (from to name dir)
  "Do `query-replace-regexp' of FROM with TO, on each file found by findr.

Làm cách nào để thử tìm chuỗi "Sưu tập" trong tất cả các tệp có phần mở rộng java và hxx bằng findr.el?
swdev

@swdev: Mx findr-query-thay thế RET Sưu tập RET <thay thế> RET. * \. java RET <thư mục để bắt đầu tìm kiếm trong> RET
ShreevatsaR

Tôi thích cách tiếp cận này (nó tránh được tất cả các vấn đề liên quan đến cách tiếp cận trực tiếp). Tôi sử dụng một số chức năng tiện lợi để kết hợp điều này với Projectile (project-root-Discover) và thay thế điều đó tại điểm: gist.github.com/anonymous/055a9d62f9fc824153599724b8f44d57
Att Righ

6

Nguồn thông tin: 1

Đối với người dùng emacs pro:

  1. Gọi dired để liệt kê các tập tin trong thư mục, hoặc gọi find-dired nếu bạn cần tất cả các thư mục con.
  2. Đánh dấu các tập tin bạn muốn. Bạn có thể đánh dấu bằng regex bằng cách nhập 【% m】.
  3. Gõ Q để gọi dired-do-query-thay-regapi.
  4. Nhập regex tìm của bạn và thay thế chuỗi. Mẫu regex elisp chung
  5. Đối với mỗi lần xuất hiện, gõ y để thay thế, n để bỏ qua. Nhập 【Ctrl + g】 để hủy bỏ toàn bộ thao tác.
  6. Kiểu ! để thay thế tất cả các lần xuất hiện trong tệp hiện tại mà không yêu cầu, N bỏ qua tất cả các thay thế có thể cho phần còn lại của tệp hiện tại. (N chỉ emacs 23)
  7. Để thực hiện thay thế trên tất cả các tệp mà không cần hỏi thêm, hãy nhập Y. (chỉ Emacs 23)
  8. Gọi ibuffer để liệt kê tất cả các tệp đã mở. Nhập 【* u】 để đánh dấu tất cả các tệp chưa được lưu, nhập S để lưu tất cả các tệp được đánh dấu, nhập D để đóng tất cả.

Hướng dẫn từng bước cho người mới bắt đầu Emacs

Chọn tệp mục tiêu

Bắt đầu emacs bằng cách gõ vào emacss trong dấu nhắc giao diện dòng lệnh. (Hoặc, nhấp đúp vào biểu tượng Emacs nếu bạn đang ở trong môi trường Giao diện người dùng đồ họa)

Chọn tệp trong thư mục

Trước tiên, bạn cần chọn các tập tin bạn muốn thay thế. Sử dụng menu đồ họa 〖Tệp ▸ Mở thư mục. Emacs sẽ yêu cầu bạn cho một đường dẫn thư mục. Nhập đường dẫn thư mục, sau đó nhấn Enter.

Bây giờ, bạn sẽ được hiển thị danh sách các tệp và bây giờ bạn cần đánh dấu các tệp bạn muốn regex find / thay thế hoạt động. Bạn đánh dấu một tệp bằng cách di chuyển con trỏ đến tệp bạn muốn, sau đó nhấn m. Bỏ đánh dấu nó bằng cách nhấn u. . Ví dụ: nếu bạn muốn đánh dấu tất cả các tệp HTML, hãy nhập 【% m】 rồi .html $. (Bạn có thể tìm thấy danh sách các lệnh đánh dấu trong menu đồ họa của Mark Mark (menu này xuất hiện khi bạn ở chế độ chuyển hướng).)

Chọn tệp trong thư mục và tất cả các thư mục con của nó

Nếu bạn muốn tìm / thay thế các tệp trong một thư mục, bao gồm hàng trăm thư mục con, đây là phương pháp để chọn tất cả các tệp này.

Gọi find-dired. (bạn gọi một lệnh bằng cách nhấn [Alt + x】) Sau đó, nhập tên thư mục, ⁖ / Users / mary / myfiles

Lưu ý: nếu bạn đang sử dụng emacs trên thiết bị đầu cuối văn bản không có đồ họa và nếu 【Alt + x】 không hoạt động, hành trình phím tương đương là 【Esc x】.

Emacs sẽ hỏi bạn với lời nhắc Tìm Run Run (với args):. Nếu bạn cần thực hiện thay thế trên tất cả các tệp HTML, hãy nhập -name "* html". Nếu bạn không quan tâm đến loại tệp nào mà chỉ đơn giản là tất cả các tệp trong thư mục đó, thì hãy đưa ra -type f.

Bây giờ, đánh dấu các tập tin như được mô tả ở trên.

Tìm / Thay thế tương tác

Bây giờ, bạn đã sẵn sàng để thực hiện thay thế tìm tương tác. Để đơn giản, giả sử bạn chỉ muốn thay thế từ nhanh chóng bằng cách sử dụng siêu nhanh. Bây giờ, hãy gọi dired-do-query-thay-regapi. Nó sẽ nhắc bạn cho chuỗi regex và chuỗi thay thế. Nhập vào loại nhanh, nhập vào, sau đó là siêu siêu thị.

Bây giờ, emacs sẽ sử dụng mẫu của bạn và kiểm tra các tệp, đồng thời dừng lại và hiển thị cho bạn bất cứ khi nào có trận đấu xảy ra. Khi điều này xảy ra, emacs sẽ nhắc bạn và bạn có lựa chọn thực hiện thay đổi hoặc bỏ qua thay đổi. Để thực hiện thay đổi, gõ y. Để bỏ qua, gõ n. Nếu bạn chỉ đơn giản muốn emacs đi trước và thực hiện tất cả các thay đổi như vậy đối với tệp hiện tại, hãy nhập !.

Nếu bạn muốn hủy toàn bộ thao tác mà không lưu bất kỳ thay đổi nào bạn đã thực hiện, hãy nhập 【Ctrl + g】, sau đó thoát emacs bằng menu 〖Tệp ▸ Thoát Emacs.

Lưu tập tin đã thay đổi

Bây giờ, sau khi bạn trải qua thử thách trên, bạn cần phải thực hiện thêm một bước nữa và đó là lưu các tệp đã thay đổi.

Nếu bạn đang sử dụng emacs phiên bản 22 trở lên, hãy gọi ibuffer để chuyển sang chế độ liệt kê bộ đệm, sau đó nhập 【* u】 để đánh dấu tất cả các tệp chưa được lưu, sau đó nhập S để lưu tất cả. (đó là ca-s)

Nếu bạn đang sử dụng emacs phiên bản 21, thì bạn có thể thực hiện việc này: gọi bộ đệm danh sách, sau đó di chuyển con trỏ đến tệp bạn muốn lưu và nhập s. Nó sẽ đánh dấu các tập tin để lưu hành động sau này. Nhập u để bỏ đánh dấu. Khi bạn đã hoàn tất, hãy nhập x để thực hiện lưu tất cả các tệp được đánh dấu để lưu. (trong emacs, tập tin đã mở được gọi là bộ đệm bộ đệm. Bỏ qua những thứ khác ở đó.)

Thay thế cho các tùy chọn ở trên, bạn cũng có thể gọi save-some-buffers 【Ctrl + xs】. Sau đó, emacs sẽ hiển thị từng tệp chưa được lưu và hỏi bạn có muốn lưu nó không.

Lưu ý: regex của emacs không giống với Perl hoặc Python, nhưng tương tự nhau. Để biết tóm tắt và các mẫu phổ biến, xem: Emacs Regex.


2
Câu trả lời này sẽ làm cho nó thân thiện hơn so với câu trả lời được bình chọn nhiều nhất mà tôi hy vọng. Cảm ơn nhân tiện đã thúc đẩy tôi đặt toàn bộ thay vì liên kết.
Sharma Prashant

Câu trả lời bắt đầu với nguồn: là dòng đầu tiên. Lý do để dán sao chép là: đôi khi liên kết bên ngoài đến blog trở nên lỗi thời và sau đó câu trả lời sẽ trở nên vô dụng. Và như vậy theo đề xuất của meta wiki. Tôi quyết định sao chép toàn bộ.
Sharma Prashant

5

Sử dụng dired để lặp lại một cây thư mục sâu sẽ hơi chậm cho nhiệm vụ này. Bạn có thể cân nhắc sử dụng thẻ-truy vấn-thay thế . Điều này không có nghĩa là tách ra để tạo bảng thẻ, nhưng dù sao thì nó cũng hữu ích và nhanh chóng.


Chỉ cần thử trên một thư mục với hơn 14.000 tập tin. Mất vài giây để bật lên trong Emacs. Vì vậy, chắc chắn không chậm (nữa).
Berend de Boer

3

Đối với bộ đệm mở, đây là những gì tôi làm:

(defun px-query-replace-in-open-buffers (arg1 arg2)
  "query-replace in all open files"
  (interactive "sRegexp:\nsReplace with:")
  (mapcar
   (lambda (x)
     (find-file x)
     (save-excursion
       (goto-char (point-min))
       (query-replace-regexp arg1 arg2)))
   (delq
    nil
    (mapcar
     (lambda (x)
       (buffer-file-name x))
     (buffer-list)))))

3

M-X Diredvà t để đánh dấu tất cả các tệp và Qtruy vấn thay thế văn bản trong tất cả các tệp. Bạn có thể mở rộng thư mục con bằng cách sử dụng ilệnh trước khi thay thế truy vấn. Thông tin chính mà chúng tôi thêm vào là nếu bạn đưa tiền tố (control-u) cho lệnh i, nó sẽ nhắc bạn lập luận và đối số -R sẽ mở rộng đệ quy tất cả subdirs vào diredbộ đệm. Vì vậy, bây giờ bạn có thể truy vấn tìm kiếm mọi tệp trong toàn bộ thư mục.


2

Một lựa chọn khác là sử dụng tìm kiếm Icicles . Đây là một loại tìm kiếm gia tăng khác nhau, sử dụng hoàn thành đầu vào xe buýt nhỏ của bạn chống lại các lượt truy cập tìm kiếm. Khi bạn sửa đổi đầu vào hiện tại của mình, bộ truy cập phù hợp được cập nhật trong bộ đệm*Completions* .

Bạn có thể tìm kiếm bất kỳ số lượng tệp, bộ đệm hoặc vị trí được đánh dấu nào mà bạn có thể chọn bằng cách sử dụng mô hình khớp nối (ví dụ regrec).

Khi bạn truy cập một lần truy cập tìm kiếm, bạn có thể thay thế theo yêu cầu hoặc toàn bộ lần truy cập hoặc chỉ một phần của lần truy cập phù hợp với đầu vào xe buýt nhỏ hiện tại của bạn. Thay thế theo yêu cầu có nghĩa là bạn không được truy vấn lần lượt về mỗi lần tìm kiếm; bạn truy cập các lượt truy cập bạn muốn trực tiếp, theo bất kỳ thứ tự nào. Cách tiếp cận này có thể hiệu quả hơn thay thế truy vấn nếu bạn có số lần thay thế hạn chế để thực hiện: bạn bỏ qua y/nlời nhắc đầy đủ .

Tìm kiếm trên các bối cảnh tìm kiếm mà bạn xác định - bạn không bị giới hạn trong việc tìm kiếm tất cả văn bản trong các tệp mục tiêu (ví dụ: bạn có thể bỏ qua nhận xét hoặc các loại phần chương trình cụ thể). Một ví dụ đơn giản về bối cảnh tìm kiếm là một dòng, như trong grep, nhưng một bối cảnh có thể là bất kỳ khối văn bản phù hợp với mẫu nào bạn muốn. Thông thường, bạn xác định bối cảnh tìm kiếm bằng cách sử dụng biểu thức chính, nhưng thay vào đó bạn có thể sử dụng hàm. Ngoài việc xác định riêng của bạn, còn có các lệnh tìm kiếm Icicles được xác định trước cho các loại bối cảnh khác nhau: các khối thuộc tính văn bản hoặc thuộc tính lớp phủ, các thứ tại điểm, v.v.

Bạn cũng có thể sắp xếp các lượt truy cập tìm kiếm theo các thứ tự sắp xếp khác nhau để truy cập / điều hướng dễ dàng hơn.


2

find-name-dired không sao, nhưng:

  • Tất cả các tệp bạn nhận được khớp nhau, regrec đơn.
  • find-diredlinh hoạt hơn trong vấn đề đó, nhưng nó cũng được tạo ra để sử dụng các quy tắc chung (ngay cả khi chúng có thể phức tạp tùy ý). Và tất nhiên findcó ngôn ngữ riêng, phức tạp.
  • nếu sau đó bạn chỉ muốn hành động trên một số tệp có tên được thu thập trong find(-name)-diredbộ đệm, bạn cần đánh dấu chúng hoặc xóa / bỏ qua các dòng của những tệp bạn không muốn hành động.

Một cách khác là sử dụng các lệnh Dired + hoạt động trên (a) các tệp được đánh dấu và (b) tất cả các tệp được đánh dấu (hoặc tất cả các tệp, nếu không được đánh dấu) trong các thư mục con được đánh dấu ... được tìm thấy theo cách đệ quy . Điều này cung cấp cho bạn cả tính tổng quát và dễ dàng kiểm soát lựa chọn tệp. Các lệnh "ở đây và bên dưới" đều nằm trên khóa tiền tố M-+ở chế độ Dired.

Ví dụ, M-+ Qgiống như Q--- truy vấn thay thế, nhưng các tệp mục tiêu là tất cả những tệp được đánh dấu trong thư mục hiện tại và trong bất kỳ thư mục con được đánh dấu nào, xuống, xuống, xuống ...

Có, một cách khác để sử dụng các lệnh dưới đây và dưới đây là chèn tất cả các thư mục con và thư mục con của chúng, theo cách đệ quy, sau đó sử dụng lệnh cấp cao nhất như Q. Nhưng nó thường có thể thuận tiện không làm phiền với các thư mục con được chèn.

Và để làm điều đó, dù sao bạn cũng cần một cách nhanh chóng để chèn tất cả các thư mục con như vậy một cách đệ quy . Ở đây cũng vậy, Dired + có thể giúp đỡ. M-+ M-ichèn tất cả các thư mục con được đánh dấu và các thư mục con được đánh dấu riêng của chúng, theo cách đệ quy. Đó là, nó giống như M-i(chèn các thư mục con được đánh dấu trong Dired + ), nhưng nó hoạt động đệ quy trên các thư mục con.

(Tất cả các lệnh Dired + "ở đây và bên dưới" như vậy đều có trên menu Nhiều > Được đánh dấu ở đây và bên dưới .)

Bạn cũng có thể thực hiện các thao Dired trên một Emacs fileset , mà là một tập hợp lưu tên của file nằm ở bất cứ đâu. Và nếu bạn sử dụng Icicles thì bạn có thể mở bộ đệm Dired cho chỉ các tệp trong tập tin hoặc các loại danh sách tệp đã lưu khác.

Bạn cũng có thể đánh dấu bất kỳ bộ đệm Dired nào, bao gồm cả bộ đệm mà bạn tạo bằng cách sử dụng find(-name)-dired. Điều này cung cấp cho bạn một cách nhanh chóng để quay lại một bộ như vậy (ví dụ: một bộ dự án) sau này. Và nếu bạn sử dụng Bookmark + sau đó đánh dấu một bản ghi bộ đệm được điều hướng (a) các lscông tắc của nó , (b) tập tin nào được đánh dấu, (c) thư mục con nào được chèn và (d) thư mục (phụ) nào bị ẩn. Tất cả điều đó được khôi phục khi bạn "nhảy" đến dấu trang. Bookmark + cũng cho phép bạn đánh dấu toàn bộ cây của bộ đệm Dired --- nhảy đến dấu trang khôi phục tất cả các bộ đệm trong cây.


Bất cứ ai: Quan tâm để giải thích lý do tại sao bạn đánh giá thấp câu trả lời này?
vẽ

1

Tôi muốn đề xuất thêm một công cụ tuyệt vời chưa được đề cập, đó là Helm .

Nó là một sự thay thế tuyệt vời cho nhiều hoạt động Emacs tiêu chuẩn liên quan đến việc hoàn thành, tìm kiếm, v.v. Đặc biệt, helm-find-filescho phép thực hiện thay thế truy vấn (bao gồm cả regrec) trong nhiều tệp được chọn.

Chỉ cần mở helm-find-files, đánh dấu các tệp có liên quan M-SPCvà sau đó sử dụng F6hoặc F7để chạy thay thế truy vấn hoặc truy vấn thay thế regrec trong các tệp đã chọn.


Có thể helm-find-filesđánh dấu bằng regrec thay vì M-SPC?
Nordlöw

-2

Đó không phải là Emacs, mà là xxdiff đi kèm với một công cụ có tên là xx-rename sẽ thực hiện điều đó cho nhiều chuỗi cùng một lúc (ví dụ: Từ Đến từ TỪ đến), với lời nhắc tương tác, lưu bản sao lưu của tất cả các tệp đã sửa đổi và tạo ra một đoạn ngắn nhật ký thay đổi được thực hiện với bối cảnh. Đó là những gì tôi có xu hướng sử dụng khi tôi thực hiện đổi mới lớn / toàn cầu.

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.