Чи є спосіб перетворити назви верблюдів, щоб використовувати підкреслення в 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

Якщо ви хочете сценарій, який фактично перетворює текст, я думаю, вам доведеться написати деякий елісп. Це питання краще задавати під час переповнення стека.


2

Я зміг це швидко зробити через весь файл, просто за допомогою заміни на 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.