Các dòng bình luận bắn tới cột 32 ở chế độ quãng tám


8

Tôi đang sử dụng chế độ chính quãng tám để chỉnh sửa mã MATLAB của mình, vì nó thuận tiện hơn các gói MATLAB không được hỗ trợ cho các emacs trên internet.

Một nhược điểm là bất cứ khi nào tôi cố gắng tự động thụt dòng nhận xét, ký tự nhận xét được chuyển sang cột 32, điều này làm cho việc thụt các khối mã lớn trở thành một vấn đề.

Tôi nên lưu ý rằng tôi đã làm

(setq comment-start "%")

để sử dụng dấu phần trăm làm ký tự nhận xét mặc định. Tuy nhiên, tôi có cùng một vấn đề khi sử dụng #. Khi tôi sử dụng comment-region, nó thực sự chèn ##vào đầu các dòng và các dòng ##không bắn ra như các dòng với #.

Câu hỏi tương tự đã được hỏi vài lần như tôi đã tìm thấy trên Google, như câu hỏi này . Nhưng không ai trong số họ giúp tôi.

Tôi muốn giải quyết vấn đề này để các dòng bắt đầu bằng %hoặc #được tự động thụt lề một cách chính xác mà không bị bắn vào cột 32. Tôi đang sử dụng GNU Emacs 24.5.1.

Câu trả lời:


8

Tôi đã đạt được những gì tôi muốn bằng cách ghi đè một số định nghĩa từ chế độ chính ban đầu. Trong /lisp/progmodes/octave.el(tập tin đã được nén, tôi phải giải nén nó để xem nguồn), tôi đã xác định lại octave-indent-commentcái ban đầu như thế này:

(defun octave-indent-comment ()
  "A function for `smie-indent-functions' (which see)."
  (save-excursion
    (back-to-indentation)
    (cond
     ((octave-in-string-or-comment-p) nil)
     ((looking-at-p "\\(\\s<\\)\\1\\{2,\\}")
      0)
     ;; Exclude %{, %} and %!.
     ((and (looking-at-p "\\s<\\(?:[^{}!]\\|$\\)")
           (not (looking-at-p "\\(\\s<\\)\\1")))
      (comment-choose-indent)))))

Tôi đã loại bỏ bit cuối cùng và thêm vào octave-mode-hooktrong cấu hình của mình như sau:

(setq octave-mode-hook
      (lambda () (progn (setq octave-comment-char ?%)
                        (setq comment-start "%")
                        (setq indent-tabs-mode t)
                        (setq comment-add 0)
                        (setq tab-width 2)
                        (setq tab-stop-list (number-sequence 2 200 2))
                        (setq octave-block-offset 2)

                        (defun octave-indent-comment ()
                          "A function for `smie-indent-functions' (which see)."
                          (save-excursion
                            (back-to-indentation)
                            (cond
                             ((octave-in-string-or-comment-p) nil)
                             ((looking-at-p "\\(\\s<\\)\\1\\{2,\\}") 0)))))))

mà tôi đoán đã loại bỏ tất cả các chức năng gắn liền với số lượng ký tự nhận xét khác nhau. Vì chức năng đó không được tôi mong muốn ngay từ đầu, tôi hài lòng với kết quả này. Bây giờ, các dòng nhận xét luôn được căn chỉnh với các dòng trước khi tôi sử dụng comment-region.

Chỉnh sửa: Tôi đoán sẽ rất hữu ích khi thêm liên kết này vào cấu hình của mình, vì các phần ghi đè tôi đã làm để thực hiện octave-modehành vi dễ chịu hơn trong khi chỉnh sửa mã MATLAB.


Tôi không muốn trả lời câu hỏi của riêng mình, nhưng tôi đã tự mình giải quyết nó bằng cách may mắn và không nghĩ câu trả lời sẽ đến từ một nơi khác.
osolmaz

1
Hãy làm trả lời câu hỏi của riêng bạn, nếu bạn cung cấp câu trả lời. Điều này cho mọi người biết rằng câu hỏi không được trả lời. Mặt khác, nếu bạn vẫn đang tìm kiếm câu trả lời thì bạn có thể muốn để nó không được chấp nhận.
vẽ

7

Hãy thử sử dụng nhiều hơn một %hoặc #một hàng: %%hoặc %%%vv

Theo mặc định, số lượng ký tự nhận xét liên tiếp xác định loại nhận xét và hành vi của nó (ví dụ: liên quan đến thụt lề).

Xem hướng dẫn Elisp, Mẹo Nhận xét nút .


1
Thật ra, đó là hành vi tôi muốn thay đổi. Trong trình soạn thảo riêng của MATLAB, ###có ý nghĩa khác nhau về tài liệu và những người tôi đang làm việc để sử dụng trình soạn thảo đó, vì vậy tôi phải tuân thủ các tiêu chuẩn của họ.
osolmaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.