Emacs自定义函数:如何向前/向后删除至大写字母?
针对驼峰字符串的片段删除函数实现
你的需求核心是处理驼峰命名字符串(如TallAppleTree)的中间片段删除,原代码使用skip-syntax-forward/backward并不合适——Emacs语法类(syntax class)没有单独区分大小写字母的类别,改用skip-chars-forward/backward能精准匹配大小写,实现需求。
向前删除到下一个大写字母前(删除Apple片段)
(defun delete-forward-to-cap () (interactive) (let ((start (point))) ;; 若光标紧跟在大写字母前,先跳过该大写字母 (when (looking-at "[A-Z]") (forward-char 1)) ;; 跳过所有后续小写字母,直到碰到大写字母或非单词字符 (skip-chars-forward "[a-z]") (delete-region start (point))))
- 场景示例:光标在
Tall最后一个l之后(Apple的A之前),执行函数会直接删除整个Apple片段。 - 逻辑:先判断当前位置后是否为大写字母,是的话先跳过,再跳过所有后续小写字母,最终删除原光标位置到目标位置的区域。
向后删除到上一个大写字母后(删除Apple片段)
(defun delete-backward-to-cap () (interactive) (let ((start (point))) ;; 向前跳过所有小写字母,直到碰到大写字母或非单词字符 (skip-chars-backward "[a-z]") ;; 若光标紧跟在大写字母后,再向前跳过该大写字母 (when (looking-back "[A-Z]") (backward-char 1)) (delete-region (point) start)))
- 场景示例:光标在
Tree的T之前(Apple的e之后),执行函数会删除整个Apple片段。
如果一定要用skip-syntax系列函数,需要自定义语法类,步骤繁琐且没必要,字符集匹配的方式更直接高效。
内容的提问来源于stack exchange,提问作者clin
相关产品推荐
相关产品推荐

