2011-12-25 40 views
18

Trong GNU Emacs, có một tính năng để làm nổi bật các dấu ngoặc phù hợp trong mã có cùng màu.Ghép nối dấu ngoặc ôm trong Emacs

Tuy nhiên khi mã mà dấu ngoặc kèm theo thực sự dài với một số lồng nhau nếu cho vv thì tính năng này không thực sự hữu ích vì một trong các dấu ngoặc sẽ không hiển thị.

Nói rằng tôi có những điều sau đây,

for(int i=0; i< N; ++i) 
{ 
    /*Long code*/ 

} 

Nếu con trỏ của tôi là trên } cú đúp Tôi muốn có một số tính năng mà sẽ cho phép tôi để nhảy/thấy { cú đúp, và sau đó, nếu hài lòng, quay lại cú đúp } cho bất kỳ mã hóa nào trong tương lai.

Điều này có thể thực hiện được ở Emacs không?

+0

Xem thêm http://stackoverflow.com/questions/9845661/with-emacs-how-to-go-to-the-pairing-balancing-parentheses –

Trả lời

25

Đây thực sự là một ràng buộc rất chuẩn: C-M-fC-M-b để quay lại và chuyển tiếp theo mặc định. Trong hầu hết các chế độ C-M-f sẽ đưa bạn tiến tới cú đúp phù hợp và C-M-b sẽ đưa bạn lùi về cú đúp khớp. Điều này cũng làm việc cho những thứ như báo giá, khá nhiều theo cùng một cách.

Các ràng buộc này rất dễ nhớ nếu bạn đã sử dụng C-fC-b để điều hướng. (Nếu bạn không, bạn nên.) Họ đang giống như di chuyển về phía trước và phía sau bởi một nhân vật nâng lên để di chuyển bởi biểu thức (mà phụ thuộc vào chế độ).

+0

Chính xác những gì tôi đang tìm kiếm. Cảm ơn! – smilingbuddha

+0

Tôi nghĩ trong trường hợp đủ khoảng cách giữa 2 niềng răng, thay vì chỉ hiển thị thông báo, hoặc điều hướng, nó 'nên' cũng chia màn hình thành 2 phần (với bộ đệm trùng lặp ở phần 2) và hiển thị cả hai dấu ngoặc. – aartist

1

lạc hậu-sexp là những gì tôi sử dụng. liên kết với ESC-left. Sau đó, ESC-right để quay lại nơi bạn đang ở

+2

Trong trường hợp của tôi (trong chế độ c) các hàm tương ứng ràng buộc với MCf và MCb – Daimrod

1

Điều đầu tiên có thể hữu ích là biết về tùy chọn này, nếu bạn chưa: blink-matching-paren-distance. Nếu sexp là rất lớn thì bạn cần phải tăng giá trị tùy chọn, hoặc người nào khác paren phù hợp cho lên quá sớm và nó cho thấy một sự không phù hợp khi không có sự không phù hợp.

Điều thứ hai có thể giúp là đảm bảo rằng blink-matching-parenblink-matching-paren-on-screen đều không phải là nil. Sau đó, để xem dấu tách mở, chỉ cần xóa dấu phân cách đóng và sau đó nhập lại dấu phân tách. Khi bạn chèn nó, một mở sẽ được thực hiện rõ ràng.

1

Hãy thử mic paren hiển thị mã dấu ngoặc đơn phù hợp ngay cả khi được tìm thấy bên ngoài màn hình hiện tại.

1
(defun px-match-paren (arg) 
    "Go to the matching paren if on a paren; otherwise insert <key>." 
    (interactive "p") 
    (cond 
    ((char-equal 41 (char-before)) (backward-list 1)) 
    ((char-equal 125 (char-before)) (backward-list 1)) 
    ((and 
    (char-equal 123 (char-before)) 
    (char-equal 10 (char-after))) 
    (backward-char 1) (forward-list 1)) 
    ((looking-at "\\s\(") (forward-list 1)) 
    ((looking-at "\\s\)") (backward-list 1)) 
    (t (self-insert-command (or arg 1))))) 

Các <key> to Witch bạn ràng buộc lệnh này sẽ chuyển đổi mở và cú đúp đóng cửa nếu điểm là trước hoặc sau nó, nếu không chèn <key> (giống như vi của "%")

Tôi cũng ràng buộc C-<key>-forward-sexpC-S-<key> đến backward-sexp để tôi thực sự có thể điều hướng nhanh chóng thông qua các chức năng trong tệp.

Các vấn đề liên quan