【问题标题】:emacs 23.2.1: character-by-character copying from the previous line seems brokenemacs 23.2.1:从上一行逐字符复制似乎已损坏
【发布时间】:2011-09-27 04:03:12
【问题描述】:

在使用 Fedora 15 升级到 emacs 23.2.1 后,我的 emacs 功能之一坏了,我似乎找不到问题所在。有些东西必须改变,但我肯定在 elisp 文档中找不到。

非常感谢任何建议!

它应该做什么:按下 Ctl-hyphen 应该复制光标上方的字符并将点向前移动 1。

它的作用: 继续复制上面的字符而不推进点。但是,使用“M-x insert-char-from-previous-line”调用它或在 Ctl-hypens 之间按 RightArrow 可以正常工作。在脚本末尾添加 (forward-char 1) 没有帮助。

(defun insert-char-from-previous-line ()
  "Copy previous line character by character"
   (interactive)
   (previous-line 1)
      (let ((char-above (following-char) ))
      (next-line 1)
   (if (not (char-equal char-above ?\n ))
       (insert char-above))))

(global-set-key [?\C--] 'insert-char-from-previous-line) ;copy char above

【问题讨论】:

    标签: emacs


    【解决方案1】:

    我认为您遇到了目标栏问题。您可能不应该为此使用下一行/上一行,而是试试这个:

     (defun insert-char-from-previous-line ()
       "Copy previous line character by character"
       (interactive)
       (let ((curpoint (point))
        (curcolumn (current-column)))
          (forward-line -1)
          (forward-char curcolumn)
          (let ((char-above (following-char) ))
          (goto-char curpoint)
          (if (not (char-equal char-above ?\n ))
         (insert char-above)))))
    

    来自 pervious-line 上的文档:

    如果您想在 Lisp 程序中使用它,请考虑使用 'forward-line' 使用否定参数代替。通常更容易 使用更可靠(不依赖于目标列等)。

     (describe-function 'previous-line)
    

    【讨论】:

      【解决方案2】:

      不要为这样的事情移动点:

      (defun i-char (arg)
        (interactive "*p")
        (let ((start (+ (point-at-bol 0)
                        (current-column)))))
        (insert (buffer-substring-no-properties start (+ start arg))))
      

      【讨论】:

        猜你喜欢
        • 2015-11-12
        • 2013-05-23
        • 2020-03-18
        • 2016-01-14
        • 1970-01-01
        • 1970-01-01
        • 2018-08-09
        • 2021-12-10
        • 2016-05-27
        相关资源
        最近更新 更多