如何切换Emacs中区域文本的字母大小写(将大写字母切换为小写和小写字母为大写)?
列出了转换命令但没有用于切换的命令.
例:
请切换我的信件
应成为:
请仔细阅读我的信件CASE
您可以使用正则表达式替换来执行此操作:
M-x replace-regexp RET
\([[:upper:]]+\)?\([[:lower:]]+\)? RET
\,(concat (downcase (or \1 "")) (upcase (or \2 ""))) RET
Run Code Online (Sandbox Code Playgroud)
由你来绑定密钥取决于你.
我为你写的;它没有经过彻底的测试,但它似乎可以满足您的要求。
其背后的逻辑是循环文本中的每个字符。如果该字符等于小写字符,则将其附加到大写返回字符串中。如果没有,请将其以小写形式附加。最后,删除区域并插入返回字符串。
它可以立即在一页文本上运行,尽管我会谨慎地在大文本上使用它(应该仍然没问题)。
(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))))
Run Code Online (Sandbox Code Playgroud)