Есть ли способ конвертировать имена в верблюжьей оболочке, чтобы использовать подчеркивания в emacs?


8

Например, я хочу преобразовать «CamelCasedName» в «camel_cased_name». Есть ли способ сделать это в Emacs?


4
Краткий ответ на любой вопрос формы "Есть ли способ _____ в Emacs?" всегда "ДА"
Брайан Постоу

Ответы:


4

Этот небольшой кусочек кода с этой страницы с функцией-оберткой и подчеркиванием, заменяющим дефис подчеркиванием, можно легко превратить в команду для этого. (Убедитесь, что он подходит для ведущих заглавных букв):

Пример кода 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)))



2

Только для отображения, вы можете использовать это:

M-x glasses-mode

Если вам нужен скрипт, который на самом деле преобразует текст, я думаю, вам придется написать немного elisp. Этот вопрос лучше задать при переполнении стека.


2

Я смог быстро сделать это для всего файла с помощью регулярного выражения замены запроса .

Шаблон поиска есть \([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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.