Définir une région pour inclure des parenthèses englobantes


9

En commençant par le point ou la région active, comment puis-je rapidement (en une seule touche / commande) «développer» pour inclure le prochain ensemble de parenthèses englobantes?

Si je commence par: ( |signifie point)

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

Ou si je commence par: ( <et >entre parenthèses la région sélectionnée)

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

Je veux finir avec

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

Réponses:


10

Utilisez expand-region.el :

Développer la région augmente la région sélectionnée par unités sémantiques. Continuez simplement à appuyer sur la touche jusqu'à ce qu'elle sélectionne ce que vous voulez.

Un exemple:

(setq alphabet-start "abc def")

Avec le curseur sur le c, il commence par marquer le mot entier abc, puis développe le contenu des guillemets abc def, puis le guillemet entier "abc def", puis le contenu du sexp setq alphabet-start "abc def "et enfin à l'ensemble sexp.

Vous pouvez le configurer comme ceci:

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

Vous pouvez contracter à nouveau la région avec un préfixe négatif, si vous développez trop loin.


1
Pour référence, la expand-regionfonction spécifique pour marquer immédiatement la liste est appelée er/mark-outside-pairs.
nounou

4

Je suis d'accord que vous devriez essayer expand-regioncomme suggéré dans une autre réponse (pour laquelle je vote).

Mais juste au cas où vous n'êtes pas familier avec les commandes intégrées pertinentes:

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

Dans votre premier exemple où il n'y a pas de région, vous pouvez utiliser C-M-u C-M-SPCpour marquer la liste englobante. S'il existe déjà une région sélectionnée, ces commandes l'étendent. Donc, si 42est sélectionné et que vous le frappez, C-M-ucela étendra la sélection vers le début de la liste, mais n'inclura pas le paren de fermeture.

Donc, en l'absence de quelque chose comme expand-regionje frapperais C-gpour annuler toute sélection en cours, puis C-M-upour revenir en arrière autant de parens que vous le souhaitez, puis C-M-SPCpour marquer


3

Dans le cas d'une région active, hen lispy fera ce que vous voulez. Voir mon récent article d' introduction .

Dans le premier cas, vous devez M-m h.

mise à jour: toutes les options que vous avez avec lispy

Commençant par:

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

Ici, ~dénote la marque (le début de la région) et |dénote le point (la fin de la région).

  1. Avec hvous obtenez:

    (defn foo [x] |(+ x 42)~)
    
  2. Avec lvous obtenez:

    (defn foo [x] ~(+ x 42)|)
    
  3. Avec kvous obtenez (annulable avec j):

    (defn foo [x] (+ ~x| 42))
    
  4. Avec 2kou kkvous obtenez:

    (defn foo [x] (~+| x 42))
    
  5. Avec dvous obtenez:

    (defn foo [x] (+ x |42~))
    
  6. Avec d>vous obtenez (annulable avec <):

    (defn foo [x] (+ |x 42~))
    
  7. Avec d2>ou d>>vous obtenez:

    (defn foo [x] (|+ x 42~))
    
  8. Avec mvous obtenez:

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

Pour résumer, quand la région est active, h, j, k, l sont les flèches qui se déplacent dans la région. >agrandit la région d'une unité sémantique en direction du point. <rétrécit la région d'une unité sémantique dans la direction du point. mdésactive la marque. isélectionne le premier élément de la région et déchange le point et la marque.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.