2010-04-30 25 views
25

Surround.vim es una ingeniosa extensión vim que le permite rodear bloques de texto con corchetes, llaves y casi cualquier carácter arbitrario "surround". Es compatible con el párrafo y la palabra envolvente, pero con frecuencia lo uso en modo visual. Estoy jugando con Emacs y me pregunto si hay algo similar; algo que me permitirá resaltar una región y luego tener la región marcada (o rectángulo) rodeada de llaves, corchetes o etiquetas.¿Hay una extensión o modo en Emacs similar a surround.vim?

+1

Algo relacionado: http://stackoverflow.com/questions/1023770/automatically-closing-braces-in-emacs – Chow

+0

Terminé usando Vimpulse-surround: https://github.com/timcharper/vimpulse-surround. el – Chow

+2

_edit_ [Evil-surround] (https://github.com/timcharper/evil-surround) es el nuevo vimpulses-surround. – Chow

Respuesta

28

Tal wrap-region es lo que necesita.

smartparens es otra excelente opción si es necesario para envolver algo con delimitadores, etiquetas, etc.

+0

Sí, esto funciona muy bien! ¡Muchas gracias! – Chow

+0

Corral (https://github.com/nivekuil/corral) acaba de salir que también hace esto. – Squidly

+0

Tenga en cuenta que el modelo de uso de Corral es diferente y no parece respetar el ajuste de la selección. –

-2

¿Desea seleccionar una región o similar y luego hacer un recuadro a su alrededor como lo hacen varios modos para hacer comentarios? Creo que emacs-wiki (http://www.emacswiki.org/) tiene algunas artes de línea (y también una herramienta de figlet) que harán eso. La búsqueda de la caja, bastante, arte lineal ...

############################ 
#       # 
# I AM REGION, WE ARE MANY # 
#       # 
############################ 
+0

no ............. – aehlke

1

No sé de ninguna manera de hacer eso en Emacs, ni siquiera con un módulo.

Mi Elisp es un poco oxidado, comprar aquí es una función simple que encierre la región actual (texto marcado) o la palabra entre comillas ("):

 
(defun insert-quotes() 
    "Inserts quotes (\") around the current region or work." 
    (interactive) 
    (let (start end bounds) 
    (if (and transient-mark-mode mark-active) 
     (setq start (region-beginning) 
       end (region-end)) 
     (progn 
     (setq bounds (bounds-of-thing-at-point 'symbol)) 
     (setq start (car bounds) 
       end (cdr bounds)))) 
    (goto-char start) 
    (insert "\"") 
    (goto-char (+ end 1)) 
    (insert "\""))) 
4

No creo que haya nada construido en las etiquetas, pero para parens que puede hacer M- ( para escuadras/apoyos/cotizaciones que podría hacer:.

(global-set-key (kbd "M-[") 'insert-pair) 
(global-set-key (kbd "M-{") 'insert-pair) 
(global-set-key (kbd "M-\"") 'insert-pair) 

tenga en cuenta que si usted no tiene una región resaltada, se acaba de insertar el par de whatevers y coloque el cursor entre t dobladillo. También es útil para eliminar whatevers juego es

(global-set-key (kbd "M-)") 'delete-pair) 

Si desea insertar pares de etiquetas, que es algún elisp simple:

(defun my-insert-tags (tag) 
    (interactive "sTag: ") 
    (if (region-active-p) 
     (let ((beg (region-beginning))) 
     (save-excursion 
      (goto-char (region-end)) 
      (insert "</" tag ">") 
      (goto-char beg) 
      (insert "<" tag ">"))) 
    (insert "<" tag ">") 
    (save-excursion 
     (insert "</" tag ">")))) 
8

Yo uso evil-surround. Emula el comportamiento de vim, pero desafortunadamente no es lo que la mayoría de los usuarios de emacs desean ya que requiere el modo evil vim. Sin embargo, puede o no ser adecuado para usted ya que hizo referencia a surround.vim en primer lugar.

evil-surround parece ser compatible con la mayoría de las funciones de Surround.vim, incluida la modificación de entornos.