Chẳng hạn, tôi muốn chuyển đổi "CamelCasingName" thành "camel_casing_name". Có cách nào để làm điều này trong emacs?
Chẳng hạn, tôi muốn chuyển đổi "CamelCasingName" thành "camel_casing_name". Có cách nào để làm điều này trong emacs?
Câu trả lời:
Đoạn mã nhỏ này từ trang này , với chức năng trình bao bọc và dấu gạch dưới thay thế dấu gạch nối bằng dấu gạch dưới, có thể dễ dàng được chuyển thành lệnh để thực hiện điều đó. (Kiểm tra xem nó xử lý các mũ hàng đầu phù hợp với bạn):
Mã EmacsLisp mẫu để hủy bỏ CamelCase một chuỗi (từ http://www.friendsnippets.com/snippet/101/ ):
(defun un-camelcase-string (s &optional sep start)
"Convert CamelCase string S to lower case with word separator SEP.
Default for SEP is a hyphen \"-\".
If third argument START is non-nil, convert words after that
index in STRING."
(let ((case-fold-search nil))
(while (string-match "[A-Z]" s (or start 1))
(setq s (replace-match (concat (or sep "-")
(downcase (match-string 0 s)))
t nil s)))
(downcase s)))
Emacs có chế độ kính hiển thị tên lạc đà với dấu gạch dưới ở giữa. (Xem thêm http://www.emacswiki.org/emacs/GlassMode ).
Nếu bạn muốn thực sự thay đổi văn bản của tập tin M-x query-replace-regexp
có lẽ là phù hợp.
Moritz Bunkus đã viết một hàm elisp để chuyển đổi giữa CamelCase và c_style
string-inflection
hiện đã hoàn thiện hơn: github.com/akicho8/opes-inflection (lưu ý rằng cũng string-inflection-camelize-lower
phải thay đổi hello_world
thành helloWorld
).
Chỉ dành cho mục đích hiển thị, bạn có thể sử dụng điều này:
M-x glasses-mode
Nếu bạn muốn một kịch bản thực sự chuyển đổi văn bản, tôi tưởng tượng bạn phải viết một số elisp. Câu hỏi đó được hỏi tốt hơn về stack overflow.
Tôi đã có thể thực hiện việc này trên toàn bộ tệp một cách nhanh chóng chỉ bằng một truy vấn thay thế regrec .
Các mô hình tìm kiếm là \([a-z]+\)\([A-Z]\)\([a-z]+\)
và thay thế là \1_\,(downcase \2)\3
.
Mẫu thay thế sử dụng elisp ngay trong mẫu. Điều này đòi hỏi Emacs 22 trở lên.
Trong phong cách tài liệu emacs:
M-C-% \([a-z]+\)\([A-Z]\)\([a-z]+\) RET \1_\,(downcase \2)\3