Đặt vùng để bao gồm dấu ngoặc đơn kèm theo


9

Bắt đầu với điểm hoặc vùng hoạt động, làm thế nào để tôi nhanh chóng (trong một lần nhấn phím / lệnh) 'mở rộng' để bao gồm tập hợp dấu ngoặc đơn tiếp theo?

Nếu tôi bắt đầu bằng: ( |có nghĩa là điểm)

(defn foo [x] (+ x |42))

Hoặc nếu tôi bắt đầu bằng: ( <và đặt >khung cho vùng đã chọn)

(defn foo [x] (+ x <42>|))

Tôi muốn kết thúc với

(defn foo [x] <(+ x 42)>|)

Câu trả lời:


10

Sử dụng mở rộng-area.el :

Mở rộng vùng làm tăng vùng được chọn theo đơn vị ngữ nghĩa. Chỉ cần nhấn phím cho đến khi nó chọn những gì bạn muốn.

Một ví dụ:

(setq alphabet-start "abc def")

Với con trỏ tại c, nó bắt đầu bằng cách đánh dấu toàn bộ từ abc, sau đó mở rộng sang nội dung của dấu ngoặc kép abc def, sau đó đến toàn bộ trích dẫn "abc def", sau đó đến nội dung của sexp setq alph-start "abc def "và cuối cùng là toàn bộ sexp.

Bạn có thể thiết lập nó như thế này:

(require 'expand-region)
(global-set-key (kbd "C-=") 'er/expand-region)

Bạn có thể ký hợp đồng lại khu vực với tiền tố phủ định, nếu bạn mở rộng quá xa.


1
Để tham khảo, expand-regionchức năng cụ thể để đánh dấu danh sách ngay lập tức được gọi er/mark-outside-pairs.
mẫu

4

Tôi đồng ý bạn nên thử expand-regiontheo đề xuất trong câu trả lời khác (mà tôi đang bỏ phiếu).

Nhưng chỉ trong trường hợp bạn không quen với các lệnh tích hợp có liên quan:

C-M-u, backward-up-list
C-M-SPC, mark-sexp

Trong ví dụ đầu tiên của bạn, nơi không có khu vực bạn có thể sử dụng C-M-u C-M-SPCđể đánh dấu danh sách kèm theo. Nếu đã có một vùng được chọn, các lệnh này sẽ mở rộng nó. Vì vậy, nếu 42được chọn và bạn nhấn, C-M-unó sẽ mở rộng lựa chọn lùi về đầu danh sách nhưng sẽ không bao gồm paren đóng.

Vì vậy, trong trường hợp không có thứ gì đó như expand-regiontôi sẽ nhấn C-gđể hủy bất kỳ lựa chọn hiện tại nào, sau đó C-M-uquay lại bao nhiêu parens như bạn muốn, sau đó C-M-SPCđánh dấu


3

Trong trường hợp vùng hoạt động, htrong lispy sẽ làm những gì bạn muốn. Xem bài giới thiệu gần đây của tôi .

Trong trường hợp đầu tiên, bạn cần phải M-m h.

cập nhật: tất cả các tùy chọn mà bạn có lispy

Bắt đầu với:

(defn foo [x] (+ x ~42|))

Ở đây, ~biểu thị nhãn hiệu (điểm bắt đầu của khu vực) và |biểu thị điểm (điểm cuối của khu vực).

  1. Với hbạn nhận được:

    (defn foo [x] |(+ x 42)~)
    
  2. Với lbạn nhận được:

    (defn foo [x] ~(+ x 42)|)
    
  3. Với kbạn nhận được (không thể hoàn tác với j):

    (defn foo [x] (+ ~x| 42))
    
  4. Với 2khoặc kkbạn nhận được:

    (defn foo [x] (~+| x 42))
    
  5. Với dbạn nhận được:

    (defn foo [x] (+ x |42~))
    
  6. Với d>bạn nhận được (không thể hoàn tác với <):

    (defn foo [x] (+ |x 42~))
    
  7. Với d2>hoặc d>>bạn nhận được:

    (defn foo [x] (|+ x 42~))
    
  8. Với mbạn nhận được:

    (defn foo [x] (+ x 42|))
    

Chỉ cần để tóm tắt, khi khu vực đang hoạt động, h, j, k, l là những mũi tên di chuyển khu vực. >phát triển vùng bằng một đơn vị ngữ nghĩa theo hướng của điểm. <thu nhỏ vùng bằng một đơn vị ngữ nghĩa theo hướng của điểm. mhủy kích hoạt nhãn hiệu ichọn yếu tố đầu tiên của khu vực, và dtrao đổi điểm và đánh dấu.

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.