Vâng, cách paredit xuất hiện để hoạt động là nó kiểm tra các bảng cú pháp để xem bạn đang chèn một cặp ngay sau một từ/ký hiệu/v.v. trong trường hợp này, nó buộc một khoảng trống được chèn vào. Bạn cần ghi đè chức năng đó - có thể thực hiện một số cách khác nhau: tư vấn, xác định lại hàm quyết định không gian g, thay đổi bảng cú pháp vv
Tôi muốn thử thẳng về phía trước:
(defun paredit-space-for-delimiter-p (endp delimiter)
(and (not (if endp (eobp) (bobp)))
(memq (char-syntax (if endp (char-after) (char-before)))
(list ?\" ;; REMOVED ?w ?_
(let ((matching (matching-paren delimiter)))
(and matching (char-syntax matching)))))))
Điều này rõ ràng sẽ áp dụng cho tất cả những nơi mà bạn sử dụng paredit
. Nếu bạn muốn một chế độ cụ thể hơn, bạn có thể thêm một số điều kiện vào câu lệnh and
đó (ví dụ: (and ... (memq major-mode '(c-mode lisp-mode)))
).
Vì vậy ... Tôi đoán tôi đã thay đổi "nguồn", nhưng bạn có thể làm điều tương tự với một đoạn defadvice
... tất cả đều là elisp, do đó, sự khác biệt là tối thiểu. Dường như không có cài đặt để kiểm soát loại hành vi này.
Nguồn
2009-05-27 03:36:21
Tôi đã muốn này trong một thời gian dài, kể từ khi tôi tìm autopair.el _very_ chậm. Paredit bây giờ hoạt động như một nét duyên dáng trong 'c-mode'. Cảm ơn bạn! :) –
Đối với chế độ cụ thể, người ta cũng có thể viết '(defvar-local my-paredit-no-insert-space nil)' và sử dụng '(và ... my-paredit-no-insert-space)' thay vì '(và ... (memq major-mode '(chế độ lisp mode c))))' và sau đó đặt 'my-paredit-no-insert-space' thành' t' từ 'c-mode-common- hook'. Bằng cách này, hai người có sở thích khác nhau có thể sử dụng cùng một định nghĩa mới của 'paredit-space-for-delimiter-p' –
' Nếu bạn muốn chế độ cụ thể hơn, bạn có thể thêm một số điều kiện vào đó và câu lệnh' - tôi muốn không ghi đè điều này cho một số chế độ, nhưng tôi không hiểu câu lệnh 'if 'nào tôi có thể thêm điều kiện vào. Bạn có thể làm rõ? – Max