Có cách nào để chuyển đổi tên vỏ lạc đà để sử dụng dấu gạch dưới trong emacs không?


8

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?


4
Câu trả lời ngắn gọn cho bất kỳ câu hỏi nào của mẫu "Có cách nào để _____ trong emacs không?" luôn luôn là "CÓ"
Brian Postow

Câu trả lời:


4

Đ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)))



2

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.


2

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
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.