You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:01:24