Ustaw region tak, aby zawierał nawiasy zamykające

9

Zaczynając od punktu lub regionu aktywnego, jak szybko (jednym naciśnięciem klawisza / polecenia) „rozwinąć”, aby uwzględnić następny zestaw nawiasów otaczających?

Jeśli zacznę od: ( |oznacza punkt)

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

Lub jeśli zacznę od: ( <i >zaznacz wybrany region)

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

Chcę z tym skończyć

(defn foo [x] <(+ x 42)>|)
David J.
źródło

Odpowiedzi:

10

Użyj expand-region.el :

Rozwiń region zwiększa wybrany region o jednostki semantyczne. Naciskaj klawisz, dopóki nie wybierzesz tego, co chcesz.

Przykład:

(setq alphabet-start "abc def")

Z kursorem na c zaczyna się od zaznaczenia całego słowa abc, następnie rozwinięcie do treści cytatów abc def, następnie do całego cytatu „abc def”, a następnie do treści sexp setq alfabet-start „abc def ”i wreszcie do całego sexp.

Możesz to skonfigurować w następujący sposób:

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

Możesz ponownie zawęzić region z ujemnym prefiksem, jeśli rozszerzysz się za daleko.

David J.
źródło
1
W celach informacyjnych expand-regionwywoływana jest specjalna funkcja oznaczania listy natychmiast er/mark-outside-pairs.
niania
4

Zgadzam się, że powinieneś spróbować expand-regionzgodnie z sugestią zawartą w innej odpowiedzi (na którą głosuję).

Ale na wypadek, gdyby nie znasz odpowiednich wbudowanych poleceń:

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

W pierwszym przykładzie, w którym nie ma regionu, którego można użyć C-M-u C-M-SPCdo zaznaczenia załączonej listy. Jeśli istnieje już wybrany region, polecenia go rozszerzają. Więc jeśli 42zostanie wybrane, a ty wciśniesz C-M-u, rozszerzy to zaznaczenie do tyłu na początek listy, ale nie będzie zawierało paren zamykających.

Więc w przypadku braku czegoś takiego expand-regionuderzyłbym, C-gaby anulować bieżący wybór, a następnie C-M-ucofnąć tyle parenów, ile chcesz, a następnie C-M-SPCzaznaczyć

glucas
źródło
3

W przypadku aktywnego regionu, hw lispy będą robić to, co chcesz. Zobacz mój ostatni wpis wprowadzający .

W pierwszym przypadku musisz M-m h.

aktualizacja: wszystkie dostępne opcje lispy

Począwszy od:

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

Tutaj ~oznacza znak (początek regionu) i |punkt (koniec regionu).

  1. Otrzymasz h:

    (defn foo [x] |(+ x 42)~)
    
  2. Otrzymasz l:

    (defn foo [x] ~(+ x 42)|)
    
  3. Z ktobą otrzymujesz (nieodwracalne j):

    (defn foo [x] (+ ~x| 42))
    
  4. Z 2klub kkotrzymasz:

    (defn foo [x] (~+| x 42))
    
  5. Otrzymasz d:

    (defn foo [x] (+ x |42~))
    
  6. Z d>tobą otrzymujesz (nieodwracalne <):

    (defn foo [x] (+ |x 42~))
    
  7. Z d2>lub d>>otrzymasz:

    (defn foo [x] (|+ x 42~))
    
  8. Otrzymasz m:

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

Wystarczy, aby podsumować, kiedy region ten jest aktywny, h, j, k, l są strzałki, które poruszają ten region. >powiększa region o jedną jednostkę semantyczną w kierunku punktu. <zmniejsza region o jedną jednostkę semantyczną w kierunku punktu. mdezaktywuje znak. iwybiera pierwszy element regionu i dwymienia punkt i znak.

abo-abo
źródło