Establecer región para incluir paréntesis

9

Comenzando con el punto o la región activa, ¿cómo puedo 'expandir' rápidamente (en una pulsación de tecla / comando) para incluir el siguiente conjunto de paréntesis?

Si empiezo con: ( |significa punto)

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

O si empiezo con: ( <y >pon entre corchetes la región seleccionada)

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

Quiero terminar con

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

Respuestas:

10

Utilice expand-region.el :

Expandir región aumenta la región seleccionada por unidades semánticas. Simplemente mantenga presionada la tecla hasta que seleccione lo que desea.

Un ejemplo:

(setq alphabet-start "abc def")

Con el cursor en la c, comienza marcando la palabra completa abc, luego se expande al contenido de las comillas abc def, luego a la comilla completa "abc def", luego al contenido del sexp setq alfabeto-inicio "abc def "y finalmente a todo el sexp.

Puedes configurarlo así:

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

Puede volver a contraer la región con un prefijo negativo, si se expande demasiado.

David J.
fuente
1
Como referencia, expand-regionse llama a la función específica para marcar la lista inmediatamente er/mark-outside-pairs.
niñera
4

Estoy de acuerdo en que debe intentar expand-regioncomo se sugiere en otra respuesta (por la que estoy votando).

Pero en caso de que no esté familiarizado con los comandos integrados relevantes:

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

En su primer ejemplo donde no hay una región que podría usar C-M-u C-M-SPCpara marcar la lista adjunta. Si ya hay una región seleccionada, estos comandos la extienden. Por lo tanto, si 42se selecciona y presiona C-M-u, extenderá la selección hacia atrás hasta el comienzo de la lista, pero no incluirá el par de cierre.

Entonces, en ausencia de algo así expand-region, presionaría C-gpara cancelar cualquier selección actual, luego C-M-uvolver a tantos padres como desee, y luego C-M-SPCmarcar

glucas
fuente
3

En el caso de la región activa, hen lispy hará lo que quiera. Vea mi reciente publicación de introducción .

En el primer caso, necesitas hacerlo M-m h.

actualización: todas las opciones que tiene con lispy

Empezando con:

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

Aquí, ~denota la marca (el comienzo de la región) y |denota el punto (el final de la región).

  1. Con husted obtienes:

    (defn foo [x] |(+ x 42)~)
    
  2. Con lusted obtienes:

    (defn foo [x] ~(+ x 42)|)
    
  3. Con kusted obtiene (deshacer con j):

    (defn foo [x] (+ ~x| 42))
    
  4. Con 2ko kkobtienes:

    (defn foo [x] (~+| x 42))
    
  5. Con dusted obtienes:

    (defn foo [x] (+ x |42~))
    
  6. Con d>usted obtiene (deshacer con <):

    (defn foo [x] (+ |x 42~))
    
  7. Con d2>o d>>obtienes:

    (defn foo [x] (|+ x 42~))
    
  8. Con musted obtienes:

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

Sólo para resumir, cuando la región está activo, h, j, k, l son las flechas que se mueven la región. >crece la región en una unidad semántica en la dirección del punto. <reduce la región en una unidad semántica en la dirección del punto. mdesactiva la marca. iselecciona el primer elemento de la región e dintercambia puntos y marcas.

abo-abo
fuente