2

在大多数情况下,我正在写德语文本。大多数单词以大写字母开头,后跟小写字母。有时我打字太快,而且一个单词的第二个字母是大写的。为了解决这个问题,我问自己是否可以编写一个自动更改第二个字母大小写的函数。可选的,只有当第三个和后面的都是小写时才会发生。你知道这是否可行,你有什么建议吗?

4

3 回答 3

3

如果第一个字母是大写并且单词中的所有其他字母都是小写,那么下面的命令会将每个单词的第二个字母转换为小写:

(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)))))

该命令将对从当前光标位置到缓冲区(可见)末端的所有单词起作用。

于 2010-08-07T20:45:00.473 回答
3

这是一个“始终在线”版本,可在您键入时修复。它会让你输入所有大写的单词,但是一旦它检测到混合大小写,它就会大写。

(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)
于 2010-08-08T12:08:26.973 回答
2

您可以设置一个次要模式,将所有大写字符映射到特殊输入功能。

看:

http://gist.github.com/516242

于 2010-08-09T22:31:33.843 回答