有没有办法将驼峰式名称转换为在 emacs 中使用下划线?

有没有办法将驼峰式名称转换为在 emacs 中使用下划线?

例如,我想将“CamelCasedName”转换为“camel_cased_name”。在 emacs 中有没有办法做到这一点?

答案1

这段代码来自这一页,使用包装函数和下划线将连字符替换为下划线,可以轻松转换为执行此操作的命令。(检查它是否适合您处理前导大写字母):

示例 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

Emacs 有眼镜模式它显示带有下划线的驼峰式名称。(另请参阅http://www.emacswiki.org/emacs/GlassesMode)。

如果您想要实际更改文件的文本,M-x query-replace-regexp这可能是合适的。

答案3

Moritz Bunkus 写了一篇elisp 函数在 CamelCase 和 c_style 之间切换

答案4

我只需一个查询就可以快速地对整个文件执行此操作替换正则表达式

搜索模式是\([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

相关内容