Tùy chỉnh thụt lề cho các dòng cụ thể?


8

Tôi hiện đang cố gắng tìm hiểu, làm thế nào tôi có thể xử lý một số dòng cụ thể mà không làm hỏng vết lõm của phần còn lại của bộ đệm. Hãy xem xét các chức năng sau đây MyFunclàm ví dụ:

void MyFunc()
{
  unsigned y = 0;

DONOTINDENT;

  unsigned int x = 5 + 2;
  return x + 12;
}

Ở đây, tôi muốn dòng DONOTINDENT;được thụt vào cột 0, trong khi phần còn lại của hàm nên được thụt vào bình thường. Tôi đã cố gắng giải quyết điều này bằng cách sử dụng các tùy chỉnh sau c-special-indent-hook:

(defun my-c-mode-indent-hook ()
  (let (p1 p2 myline)
    (setq p1 (line-beginning-position))
    (setq p2 (line-end-position))
    (setq myLine (buffer-substring-no-properties p1 p2))

    (if (string-match-p "DONOTINDENT" myLine)
        (save-excursion
          (indent-line-to 0))
      )
    )
  )

(defun my-c-mode-common-hook ()
  ;; my customizations for all of c-mode and related modes
  (setq c-special-indent-hook 'my-c-mode-indent-hook)
  )

(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

OK, điều này hoạt động khá tốt cho dòng DONOTINDENT;, tuy nhiên nó không hoạt động cho tất cả các dòng tiếp theo, vì chúng được thụt lề tương đối DONOTINDENT;. Vì vậy, nếu DONOTINDENT;được thụt vào cột 0, unsigned int x = 5 + 2;cũng sẽ được thụt vào cột 0, nhưng nó phải được thụt vào cột c-basic-offset.

Làm thế nào tôi có thể sửa chữa vết lõm cho các dòng sau? Có một số biến nội bộ mà tôi có thể sử dụng để ảnh hưởng đến tính toán mức độ thụt lề của các dòng tiếp theo, hoặc tính toán này hoàn toàn dựa trên sự thụt dòng trước đó. Tôi nghĩ rằng, bằng cách nào đó có thể thực hiện được điều này vì các nhãn trong câu lệnh chuyển đổi được thụt vào theo cách tương tự, nhưng tôi đã đấu tranh để tìm ra điều này khi đào sâu vào mã chế độ cc.

Cảm ơn trước!

Trân trọng, Fabian

Câu trả lời:


0

Tôi nghĩ rằng nó có thể, tùy thuộc vào bản chất của dòng DONOTINDENT.

Một quy tắc cc-offsets-alist tùy chỉnh cho phép các quy tắc thụt lề khác nhau tùy thuộc vào yếu tố cú pháp để thụt lề. Bạn có thể thử kết hợp điều này với các ký hiệu cú pháp chính xác để thụt dòng cụ thể theo ý muốn.

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.