【发布时间】:2010-08-07 20:23:36
【问题描述】:
在大多数情况下,我正在写德语文本。大多数单词以大写字母开头,后跟小写字母。有时我打字太快,而且一个单词的第二个字母也是大写的。为了解决这个问题,我问自己是否可以编写一个自动更改第二个字母大小写的函数。可选的,仅当第三个和以下是小写时才会发生。您知道这是否可行吗?您有什么建议吗?
【问题讨论】:
标签: emacs case-sensitive lowercase
在大多数情况下,我正在写德语文本。大多数单词以大写字母开头,后跟小写字母。有时我打字太快,而且一个单词的第二个字母也是大写的。为了解决这个问题,我问自己是否可以编写一个自动更改第二个字母大小写的函数。可选的,仅当第三个和以下是小写时才会发生。您知道这是否可行吗?您有什么建议吗?
【问题讨论】:
标签: emacs case-sensitive lowercase
这是一个“始终在线”版本,可在您键入时修复。它会让你输入所有大写单词,但一旦检测到大小写混合,它就会大写。
(defun blah (s e l)
(let ((letter (string-to-char (word-before-point))))
(if (and (eq letter (upcase letter))
(not (eq (char-before) (upcase (char-before)))))
(capitalize-word -1))))
(add-to-list 'after-change-functions 'blah)
【讨论】:
如果第一个字母是大写并且单词中的所有其他字母都是小写,这里有一个命令会将每个单词的第二个字母转换为小写:
(defun fix-double-uppercase-at-start-of-words ()
(interactive)
(let ((case-fold-search nil))
(save-match-data
(while (re-search-forward "\\b\\([[:upper:]]\\)\\([[:upper:]]\\)\\([[:lower:]]*\\)\\b" nil t)
(replace-match (concat (match-string 1)
(downcase (match-string 2))
(match-string 3))
t)))))
该命令将作用于从当前光标位置到缓冲区(可见)末端的所有单词。
【讨论】:
【讨论】: