【问题标题】:Emacs should set the second character of a word in lower caseEmacs 应该将单词的第二个字符设置为小写
【发布时间】:2010-08-07 20:23:36
【问题描述】:

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

【问题讨论】:

    标签: emacs case-sensitive lowercase


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 这并不像宣传的那样有效。 “TEXT”改成“TeXT”,“TExT”改成“TexT”。
      • 糟糕,case-fold-search 需要为 nil。固定。
      【解决方案3】:

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

      见:

      http://gist.github.com/516242

      【讨论】:

        猜你喜欢
        • 2014-04-12
        • 1970-01-01
        • 1970-01-01
        • 2022-11-06
        • 2018-08-06
        • 1970-01-01
        • 1970-01-01
        • 2021-11-27
        相关资源
        最近更新 更多