괄호를 포함하도록 영역 설정


9

포인트 또는 활성 영역으로 시작하여 다음 엔 클로징 괄호 세트를 포함하기 위해 '한 번의 키 입력 / 명령으로' '확장'하는 방법은 무엇입니까?

내가 시작하면 : ( |점을 의미)

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

아니면 내가 함께 시작하는 경우 : ( <>선택 영역을 브래킷)

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

나는 결국

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

답변:


10

expand-region.el을 사용하십시오 .

영역 확장은 선택한 영역을 의미 단위로 증가시킵니다. 원하는 것을 선택할 때까지 키를 계속 누르십시오.

예를 들면 :

(setq alphabet-start "abc def")

커서가 c에 있으면 전체 단어 abc를 표시 한 다음 인용 부호 abc def의 내용으로 확장 한 다음 전체 인용 부호 "abc def"로 확장 한 다음 sexp setq의 알파벳 순서로 시작합니다. def "그리고 마지막으로 전체 sexp.

다음과 같이 설정할 수 있습니다.

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

너무 멀리 확장하면 음수 접두사로 리전을 다시 축소 할 수 있습니다.


1
참고로 expand-region목록을 즉시 표시 하는 특정 함수를 호출 er/mark-outside-pairs합니다.
nanny

4

expand-region다른 답변에서 제안한대로 시도해야한다는 것에 동의합니다 (투표합니다).

그러나 관련 내장 명령에 익숙하지 않은 경우를 대비하여 :

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

영역이없는 첫 번째 예에서는 C-M-u C-M-SPC둘러싸는 목록을 표시하는 데 사용할 수 있습니다 . 이미 선택된 영역이있는 경우이 명령은 해당 영역을 확장합니다. 따라서 42를 선택하고 C-M-u눌렀을 때 선택은 목록의 시작 부분으로 뒤로 확장되지만 닫는 파엔은 포함되지 않습니다.

그래서 뭔가가 없을 경우처럼 expand-region나는 칠 것이다 C-g다음, 현재의 모든 선택을 취소하는 C-M-u당신이 원하는대로 다음, 많은 괄호로 돌아가 C-M-SPC마크


3

활성 지역의 경우 lispyh 에서 원하는 것을 수행합니다. 최근 소개 글을 참조하십시오 .

첫 번째 경우 M-m h.

업데이트 : 가지고있는 모든 옵션 lispy

로 시작:

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

여기서, ~마크 (영역의 시작)를 |나타내고, 포인트 (영역의 끝)를 나타낸다.

  1. h당신 과 함께 :

    (defn foo [x] |(+ x 42)~)
    
  2. l당신 과 함께 :

    (defn foo [x] ~(+ x 42)|)
    
  3. 으로 k당신은 (와 취소 수 j) :

    (defn foo [x] (+ ~x| 42))
    
  4. 와 함께 2k또는 kk당신은 얻는다 :

    (defn foo [x] (~+| x 42))
    
  5. d당신 과 함께 :

    (defn foo [x] (+ x |42~))
    
  6. 으로 d>당신은 (와 취소 수 <) :

    (defn foo [x] (+ |x 42~))
    
  7. 함께 d2>또는 d>>얻을 :

    (defn foo [x] (|+ x 42~))
    
  8. m당신 과 함께 :

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

다만 영역이 활성 상태이면, 요약 h, j, k, l 영역을 이동 화살표이다. >점의 방향으로 하나의 의미 단위로 영역을 성장시킵니다. <점의 방향으로 하나의 의미 단위로 영역을 축소합니다. m마크를 비활성화합니다. i영역의 첫 번째 요소를 선택하고 d포인트와 마크를 교환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.