emacs 23.2.1:前一行的逐字符复制似乎已经破碎

时间:2011-09-27 04:03:13

标签: emacs

在使用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

2 个答案:

答案 0 :(得分:4)

我认为你陷入了目标栏问题。你可能不应该使用next-line / previous-line,而是试试这个:

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

来自前线的文件:

  

如果您打算在Lisp程序中使用它,请考虑使用   相反,带有负面参数的“前线”。通常更容易   使用和更可靠(不依赖于目标栏等)。

 (describe-function 'previous-line)

答案 1 :(得分:0)

不要提出这样的观点:

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