在大多数情况下,我正在写德语文本。大多数单词以大写字母开头,后跟小写字母。有时我打字太快,而且一个单词的第二个字母是大写的。为了解决这个问题,我问自己是否可以编写一个自动更改第二个字母大小写的函数。可选的,只有当第三个和后面的都是小写时才会发生。你知道这是否可行,你有什么建议吗?
问问题
531 次
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
于 2010-08-09T22:31:33.843 回答