Наприклад, я хочу перетворити "CamelCasedName" в "camel_cased_name". Чи є спосіб це зробити в emacs?
Наприклад, я хочу перетворити "CamelCasedName" в "camel_cased_name". Чи є спосіб це зробити в emacs?
Відповіді:
Цей невеликий шматочок коду на цій сторінці , з функцією обгортки та підкресленням, що замінює дефіс на підкреслення, легко можна перетворити на команду для цього. (Переконайтеся, що вона ставиться до провідних ковпачків, які вам відповідають)
Зразок коду 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
, можливо, підходить.
Моріц Бункус написав функцію 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