Emacs:删除前向/后向,直到变成大写字母



我正在尝试在emacs中添加一些自定义函数,以处理以下情况:例如,我想删除子字符串"苹果;在";TallAppleTree";。我想我需要这样的东西:

(defun delete-forward-to-cap ()
(interactive)
(delete-region (point) (save-excursion (skip-syntax-forward "???") (point))))

(defun delete-backward-to-cap ()
(interactive)
(delete-region (point) (save-excursion (skip-syntax-backward "???") (point))))

前面的有点复杂。当光标位于l和A之间时,搜索需要跳过第一个大写字母(去掉"Apple"(。我卡在标有"??"的零件上了&";。我应该在里面放什么?

愚蠢的我找到了一个解决方案。

(defun delete-backward-to-cap ()
(interactive)
(progn
(delete-region (point) (save-excursion (skip-chars-backward "a-z") (point)))
(delete-backward-char 1)))

(defun delete-forward-to-cap ()
(interactive)
(progn
(delete-forward-char 1)
(delete-region (point) (save-excursion (skip-chars-forward "a-z") (point)))))

要删除点和下一个大写字母之间的子字符串,可以使用带有"w";语法类。";w";语法类匹配任何单词组成字符,包括字母、数字和下划线。因此,skip-syntax-forward函数将跳过任何字母、数字和下划线,直到到达下一个大写字母。

以下是如何在delete forward to cap函数中使用跳过语法forward函数:

(defun delete-forward-to-cap ()
(interactive)
(delete-region (point) (save-excursion (skip-syntax-forward "w") (point))))

类似地,要删除点和前一个大写字母之间的子字符串,可以使用带有"的skip语法后退函数;w";语法类。以下是如何在delete backward to cap函数中使用跳过语法backward函数:

(defun delete-backward-to-cap ()
(interactive)
(delete-region (point) (save-excursion (skip-syntax-backward "w") (point))))

最新更新