当我在Emacs上使用matlab模式(我使用Aquamacs)时,RET会在下面添加一行,但不会跳转到该行(即,它应该充当C-o)。 RET在其他模式下不会发生这种行为,即在预期的行为,即在下面添加一行并将光标移动到它。
当我在matlab模式下按RET时,我收到此消息
错误的类型参数" wholenump -1"
我不知道这是从哪里来的。我已将所有与matlab相关的文件重新安装到.emacs,我查看了.emacs,Preferences.el,customizations.el,并查看了custom-apropos' matlab'的所有选项。我还没找到能给我一些线索的东西。虽然我已经使用emacs几年了,但我不知道任何口齿不清并且可以被认为是菜鸟。有人可以帮我跟踪问题吗?
我使用的是Aquatics 3.2 GNU Emacs 24.4.51.2。我几年前最初运行matlab-mode
未知来源,但在尝试解决此问题时,我通过运行https://github.com/pronobis/matlab-mode从update script升级到最新版本。这对我来说没有解决问题。
正如在this SO chat中发现的那样,某些内容正在将fill-column
设置为值-1
:
fill-column is a variable defined in `C source code'.
Its value is -1
Original value was 70
Local in buffer funfzero.m; global value is the same.
手动将其重新设置为70可以暂时解决问题。但究竟是什么导致它被设置为虚假价值呢?我怎样才能知道这个设置在哪里?
这是调试输出
Debugger entered--Lisp error: (wrong-type-argument wholenump -1)
move-to-column(-1)
(save-excursion (move-to-column fill-column) (if (not (bobp)) (forward-char -1)) (if (matlab-cursor-in-string (quote incomplete)) 4 3))
(if matlab-fill-count-ellipsis-flag (save-excursion (move-to-column fill-column) (if (not (bobp)) (forward-char -1)) (if (matlab-cursor-in-string (quote incomplete)) 4 3)) 0)
(- fill-column (if matlab-fill-count-ellipsis-flag (save-excursion (move-to-column fill-column) (if (not (bobp)) (forward-char -1)) (if (matlab-cursor-in-string (quote incomplete)) 4 3)) 0))
(let ((fill-prefix fill-prefix) (fill-column (- fill-column (if matlab-fill-count-ellipsis-flag (save-excursion (move-to-column fill-column) (if (not ...) (forward-char -1)) (if (matlab-cursor-in-string ...) 4 3)) 0)))) (if (> (current-column) fill-column) (cond ((matlab-ltype-comm-ignore) nil) ((or (matlab-ltype-comm) (and (save-excursion (move-to-column fill-column) (matlab-cursor-in-comment)) (matlab-lattr-comm))) (matlab-set-comm-fill-prefix) (do-auto-fill) (matlab-reset-fill-prefix)) ((and (matlab-ltype-code) (not (matlab-lattr-cont)) matlab-fill-code) (let ((m (make-marker))) (move-marker m (point)) (set-marker-insertion-type m t) (if (not (matlab-find-convenient-line-break)) nil (if (not ...) (progn ... ... ...) (if matlab-fill-strings-flag ...))) (goto-char m))))))
matlab-auto-fill()
self-insert-command(1)
newline()
matlab-plain-ret()
funcall(matlab-plain-ret)
matlab-return()
call-interactively(matlab-return nil nil)
command-execute(matlab-return)
答案 0 :(得分:1)
虽然这可能无法找到导致fill-column
设置为-1的任何内容的根,但一个简单的解决方法是将set-fill-column
的调用添加到matlab-mode-hook
:< / p>
(add-hook 'matlab-mode-hook
(lambda ()
(set-fill-column 70)))
将此添加到init.el
,fill-column
后,matlab-mode
将自动设为70。
答案 1 :(得分:1)
总是这样吗?
从你的调试器日志中,看起来像matlab-mode将RET绑定到它自己的matlab-return,其目的看起来像auto-pretty-indent。
在该代码中设置了填充列。在(let ...)行。
所以,看起来,它是代码的逻辑错误。
一个简单的解决方法就是将换行符绑定到RET,如
(defun my-matlab-mode-stuff ()
(local-set-key (kbd "RET") 'newline))
(add-hook 'matlab-mode-hook 'my-matlab-mode-stuff)
您可能会将&#39;换行符更改为&mat; -lab-ret,因为这似乎只是插入返回的方法。