如何切换Emacs区域文本的字母大小写(将大写字母切换为小写字母和小写字母为大写字母)?
这里列出了用于转换的命令,但没有用于切换的命令。
示例:
PLease toggLE我的信箱
应成为:
plEASE TOGGle我的信箱
发布于 2013-08-16 08:37:07
我给你写的;它没有经过彻底的测试,但它似乎能做你想要的。
其背后的逻辑是遍历文本中的每一个字符。如果字符与小写中的字符相等,则将其附加到大写的返回字符串中。如果没有,请将其以小写形式追加。最后,删除区域并插入返回字符串。
它可以立即在一页文本上工作,尽管我会小心地在巨大的文本上使用它(应该还可以)。
(defun toggle-case ()
(interactive)
(when (region-active-p)
(let ((i 0)
(return-string "")
(input (buffer-substring-no-properties (region-beginning) (region-end))))
(while (< i (- (region-end) (region-beginning)))
(let ((current-char (substring input i (+ i 1))))
(if (string= (substring input i (+ i 1)) (downcase (substring input i (+ i 1))))
(setq return-string
(concat return-string (upcase (substring input i (+ i 1)))))
(setq return-string
(concat return-string (downcase (substring input i (+ i 1)))))))
(setq i (+ i 1)))
(delete-region (region-beginning) (region-end))
(insert return-string))))发布于 2013-08-16 16:40:31
您可以使用regexp替换来完成此操作:
M-x replace-regexp RET
\([[:upper:]]+\)?\([[:lower:]]+\)? RET
\,(concat (downcase (or \1 "")) (upcase (or \2 ""))) RET该由你来系钥匙了。
发布于 2013-08-15 17:15:52
命令upcase-region、downcase-region和capitalize-region不是切换,可能是您提到的“转换”命令。这里有一个在它们之间循环的命令。
(defvar cycle-region-capitalization-last 'upper)
(defun cycle-region-capitalization (&optional msgp)
"Cycle the region text among uppercase, lowercase and capitalized (title case)."
(interactive "p")
(setq cycle-region-capitalization-last
(case cycle-region-capitalization-last
(upper (call-interactively #'downcase-region) 'lower)
(lower (call-interactively #'capitalize-region) 'title)
(title (call-interactively #'upcase-region) 'upper)))
(when msgp (message "Region is now %scase" cycle-region-capitalization-last)))https://stackoverflow.com/questions/18257573
复制相似问题