2013-06-30 35 views
6

Khi sử dụng Paredit, tôi thường phải đối mặt với những điều sau đây (ống char đại diện cho con trỏ):Làm thế nào để tránh thêm nhân vật không gian khi slurping biểu hiện đầu tiên

(foo |bar baz) 

Tôi muốn kèm bar trong dấu ngoặc, vì vậy tôi sử dụng paredit-wrap-around (M - () để có được điều này:

(foo (|bar) baz) 

cũng áp dụng khi tôi muốn đưa thanh bên trong một chuỗi thay vào đó, tôi có thể sử dụng M - " để có được điều này:

(foo "|bar" baz) 

Tuy nhiên, Clojure cũng sử dụng dấu ngoặc vuông [] và dấu ngoặc nhọn {} cho vector, bản đồ và bộ. Các lệnh này dường như không có lệnh "quấn xung quanh" paredit. Vì vậy, trong trường hợp này, ví dụ: đặt thanh vào một vector, tôi thường sử dụng [ chìa khóa để tạo ra một vector mới:

(foo [|] bar baz) 

theo sau là một paredit-forward-slurp-sexp (C - ), mà kết quả trong:

(foo [| bar] baz) 

Tôi muốn xóa ký tự khoảng trắng đã được chèn trước bar. Điều này có thể không? Tại sao paredit giữ lại một khoảng trắng khi chuyển từ một biểu thức rỗng sang một biểu thức có chứa một mục? Không phải mục đầu tiên được thêm vào biểu thức S luôn được đẩy ngay trước dấu mở đầu?

+0

Giả định có thể là bạn sẽ đặt thứ gì đó khác vào đầu danh sách mới. Tôi đoán bạn có thể sử dụng kết hợp C- C-d. – d11wtq

+2

Tôi phải đề cập rằng 'paredit-forward-slurp-sexp' từ phiên bản paredit mới nhất 20130722.1324 (từ MELPA) tự động xóa ký tự khoảng trắng. Vì vậy, bạn có thể nhấn '[C-)' để lấy '[bar]'. Ngoài ra, '[' được liên kết với 'paredit-open-square' là một lệnh dwim: chọn một biểu thức và nhấn' ['sẽ bọc biểu thức đó thành một vectơ. Vì vậy, nhấn 'C-M-SPC [' là một cách khác. Tôi sử dụng cách thứ hai vì nó trực quan hơn, và tôi có thể thay đổi ý định để chọn hai biểu thức, và tôi giữ thói quen tương tự giữa các bộ đệm không lisp trong chế độ autopair và bộ đệm lisp trong chế độ paredit. –

Trả lời

4

Paredit có, trong một thời gian dài, có paredit-wrap-curlyparedit-wrap-square. Nếu bạn muốn sử dụng chúng, chỉ cần gắn chúng vào một phím có khả năng nghe, và có nó. Nếu bạn đang sử dụng một phiên bản cũ của paredit mà các chức năng này không tồn tại, bạn nên nâng cấp (nhưng tôi không nghĩ rằng bạn đang có, kể từ khi lệnh slurp làm việc với họ).

1

Phiên bản phát triển mới nhất của liên kết paredit M-[ đến paredit-wrap-square thực hiện chính xác những gì bạn muốn. Emacs đã liên kết với M-{backward-paragraph, nhưng nếu bạn không bao giờ sử dụng, bạn có thể tùy chỉnh paredit để shadow nó:

(eval-after-load 'paredit 
    '(progn 
    (define-key paredit-mode-map (kbd "M-{") 'paredit-wrap-curly))) 

Nếu bạn muốn xóa tất cả không gian xung quanh điểm, bạn luôn có thể gõ M-\ cho delete-horizontal-space.

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