Stellen Sie die Region so ein, dass sie Klammern enthält

9

Wie kann ich, beginnend mit dem Punkt oder der aktiven Region, schnell (in einem Tastendruck / Befehl) 'erweitern', um den nächsten Satz einschließender Klammern einzuschließen?

Wenn ich anfange mit: ( |bedeutet Punkt)

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

Oder wenn ich beginne mit: ( <und >die ausgewählte Region einklammern)

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

Ich möchte mit enden

(defn foo [x] <(+ x 42)>|)
David J.
quelle

Antworten:

10

Verwenden Sie expand-region.el :

Region erweitern erhöht die ausgewählte Region um semantische Einheiten. Drücken Sie einfach die Taste so lange, bis Sie das gewünschte auswählen.

Ein Beispiel:

(setq alphabet-start "abc def")

Wenn sich der Cursor auf c befindet, markiert er zunächst das gesamte Wort abc und erweitert es dann zum Inhalt der Anführungszeichen abc def, dann zum gesamten Anführungszeichen "abc def" und dann zum Inhalt des sexp setq alphabet-start "abc def "und schließlich zum gesamten sexp.

Sie können es folgendermaßen einrichten:

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

Sie können die Region erneut mit einem negativen Präfix kontrahieren, wenn Sie zu weit expandieren.

David J.
quelle
1
Als Referenz wird die spezifische expand-regionFunktion zum sofortigen Markieren der Liste aufgerufen er/mark-outside-pairs.
Kindermädchen
4

Ich bin damit einverstanden, dass Sie es versuchen sollten, expand-regionwie in einer anderen Antwort vorgeschlagen (für die ich stimme ).

Aber nur für den Fall, dass Sie mit den relevanten integrierten Befehlen nicht vertraut sind:

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

In Ihrem ersten Beispiel, in dem es keine Region gibt, können Sie C-M-u C-M-SPCdie umschließende Liste markieren. Wenn bereits eine ausgewählte Region vorhanden ist, erweitern diese Befehle diese. Wenn 42also ausgewählt ist und Sie C-M-udarauf klicken, wird die Auswahl rückwärts bis zum Anfang der Liste erweitert, ohne dass der schließende Paren enthalten ist.

In Abwesenheit von so etwas wie expand-regionwürde ich drücken C-g, um eine aktuelle Auswahl abzubrechen, dann C-M-uso viele Parens zurückzugehen, wie Sie möchten, und dann C-M-SPCzu markieren

Glucas
quelle
3

Im Falle der aktiven Region, hin lispy wird tun , was Sie wollen. Siehe meinen letzten Intro-Beitrag .

Im ersten Fall müssen Sie M-m h.

Update: Alle Optionen, mit denen Sie haben lispy

Beginnen mit:

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

Hier ~bezeichnet die Markierung (den Beginn der Region) und |den Punkt (das Ende der Region).

  1. Mit hdir bekommen:

    (defn foo [x] |(+ x 42)~)
    
  2. Mit ldir bekommen:

    (defn foo [x] ~(+ x 42)|)
    
  3. Mit kdir bekommen (rückgängig machen mit j):

    (defn foo [x] (+ ~x| 42))
    
  4. Mit 2koder kkdu bekommst:

    (defn foo [x] (~+| x 42))
    
  5. Mit ddir bekommen:

    (defn foo [x] (+ x |42~))
    
  6. Mit d>dir bekommen (rückgängig machen mit <):

    (defn foo [x] (+ |x 42~))
    
  7. Mit d2>oder d>>du bekommst:

    (defn foo [x] (|+ x 42~))
    
  8. Mit mdir bekommen:

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

Nur zusammenzufassen, wenn Region aktiv ist, h, j, k, l sind die Pfeile, die die Region bewegen. >vergrößert die Region um eine semantische Einheit in Richtung des Punktes. <verkleinert die Region um eine semantische Einheit in Richtung des Punktes. mdeaktiviert die Markierung. iwählt das erste Element der Region aus und dtauscht Punkt und Markierung aus.

abo-abo
quelle