首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在emacs中的区域中切换字母情况

如何在emacs中的区域中切换字母情况
EN

Stack Overflow用户
提问于 2013-08-15 16:53:07
回答 5查看 3.6K关注 0票数 8

如何切换Emacs区域文本的字母大小写(将大写字母切换为小写字母和小写字母为大写字母)?

这里列出了用于转换的命令,但没有用于切换的命令。

示例:

PLease toggLE我的信箱

应成为:

plEASE TOGGle我的信箱

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-08-16 08:37:07

我给你写的;它没有经过彻底的测试,但它似乎能做你想要的。

其背后的逻辑是遍历文本中的每一个字符。如果字符与小写中的字符相等,则将其附加到大写的返回字符串中。如果没有,请将其以小写形式追加。最后,删除区域并插入返回字符串。

它可以立即在一页文本上工作,尽管我会小心地在巨大的文本上使用它(应该还可以)。

代码语言:javascript
复制
(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))))
票数 3
EN

Stack Overflow用户

发布于 2013-08-16 16:40:31

您可以使用regexp替换来完成此操作:

代码语言:javascript
复制
M-x replace-regexp RET
\([[:upper:]]+\)?\([[:lower:]]+\)? RET
\,(concat (downcase (or \1 "")) (upcase (or \2 ""))) RET

该由你来系钥匙了。

票数 6
EN

Stack Overflow用户

发布于 2013-08-15 17:15:52

命令upcase-regiondowncase-regioncapitalize-region不是切换,可能是您提到的“转换”命令。这里有一个在它们之间循环的命令。

代码语言:javascript
复制
 (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)))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18257573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档