ตัวอย่างเช่นฉันต้องการแปลง "CamelCasedName" เป็น "camel_cased_name" มีวิธีการทำเช่นนี้ใน emacs หรือไม่?
ตัวอย่างเช่นฉันต้องการแปลง "CamelCasedName" เป็น "camel_cased_name" มีวิธีการทำเช่นนี้ใน emacs หรือไม่?
คำตอบ:
โค้ดเล็ก ๆ น้อย ๆ จากหน้านี้ที่มีฟังก์ชั่น wrapper และเครื่องหมายขีดล่างแทนที่เครื่องหมายขีดกลางด้วยเครื่องหมายขีดล่างสามารถเปลี่ยนเป็นคำสั่งได้อย่างง่ายดาย (ตรวจสอบว่ามันใช้แคปชั้นนำเพื่อให้เหมาะกับคุณ):
ตัวอย่างโค้ด EmacsLisp เพื่อยกเลิกการ CamelCase สตริง (จาก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 มีโหมดแว่นตาซึ่งแสดงชื่ออูฐที่มีขีดล่าง (ดูที่http://www.emacswiki.org/emacs/GlassesMode )
หากคุณต้องการเปลี่ยนข้อความของไฟล์M-x query-replace-regexp
นั้นอาจจะเหมาะสม
Moritz Bunkus เขียนฟังก์ชัน elispเพื่อสลับระหว่าง CamelCase และ c_style
string-inflection
เสร็จสมบูรณ์มากขึ้นในขณะนี้: github.com/akicho8/string-inflection (โปรดทราบว่ายังมีstring-inflection-camelize-lower
การเปลี่ยนhello_world
เป็นhelloWorld
)
สำหรับการแสดงผลเท่านั้นคุณสามารถใช้สิ่งนี้:
M-x glasses-mode
หากคุณต้องการสคริปต์ที่แปลงข้อความได้จริง ๆ ฉันคิดว่าคุณต้องเขียนอะไรบางอย่าง คำถามนั้นดีกว่าในการล้นสแต็ค
ผมสามารถที่จะทำเช่นนี้ข้ามไฟล์ทั้งหมดได้อย่างรวดเร็วด้วยเพียงแบบสอบถามแทนที่ regexp
รูปแบบการค้นหาและเปลี่ยนเป็น \([a-z]+\)\([A-Z]\)\([a-z]+\)
\1_\,(downcase \2)\3
รูปแบบการแทนที่ใช้ elisp ที่ถูกต้องในรูปแบบ ต้องใช้ Emacs 22 หรือใหม่กว่า
ในสไตล์เอกสาร emacs:
M-C-% \([a-z]+\)\([A-Z]\)\([a-z]+\) RET \1_\,(downcase \2)\3