Sự cố của bạn xuất phát từ thực tế là bạn bật lại enter
đến newline-and-indent
, dường như không thành ngữ khi sử dụng scala-mode
. newline-and-indent
kết thúc bằng cách gọi indent-according-to-mode
, kiểm tra một số cài đặt không mong muốn, hoạt động xung quanh nếu cần và nếu mọi thứ đều ổn, hãy gọi số indent-line-function
, là biến cục bộ bộ đệm.
Vì đây là chế độ dành riêng cho từng chế độ, các chế độ tự xác định indent-line-function
của riêng chúng. Hầu hết có hành vi khá nhất quán, nhưng chức năng Scala là scala-indent-line
, nhìn thấy ở đây:
(defun scala-indent-line()
"Indent current line as smartly as possible.
When called repeatedly, indent each time one stop further on the right."
(interactive)
(if (or (eq last-command this-command)
(eq last-command 'scala-undent-line))
(scala-indent-line-to (+ (current-indentation) scala-mode-indent:step))
(let
((indentation (scala-indentation)))
(scala-indent-line-to indentation))))
Điều buồn cười về việc này là nó phát hiện các cuộc gọi lặp đi lặp lại và indents hơn nữa trong mỗi lần. Khi sử dụng M-x, last-command
không phải là scala-indent-line
, là execute-extended-command
. Vì vậy, khi sử dụng M-x, nó tiếp tục thụt lề ở mức thụt lề chính xác. Tuy nhiên, khi bị ràng buộc với một khóa, nó sẽ thông báo rằng nó đã được thực hiện ngay lập tức trước đó và thụt thêm một mức.
Hiệu ứng không tích lũy ... Tôi nghĩ điều này là do lệnh lẻ được đặt ở cuối hàm, ban đầu thụt lề dòng, nhưng sau đó kiểm tra thụt lề chính xác với (scala-indentation)
và thụt lề tương ứng.
Tôi không phải là 100% về điều này, nhưng ngay từ cái nhìn đầu tiên đó là những gì dường như đang diễn ra.
Nguồn
2010-09-01 04:59:04
Sau đó, giải pháp là không để cho nó vào đường dẫn mã đó. Các công trình sau: (local-set-key [return] '(lambda() (tương tác) (setq last-command nil) (newline-and-indent)))))) – qrest