Si desea copiar alguna información en otro búfer y, a partir de ese momento, dejar que los búferes evolucionen de forma independiente, puede hacerlo .
Pero si desea que el otro búfer refleje el contenido original en tiempo real, Emacs proporciona esto con búferes indirectos . Un búfer indirecto es otro búfer que tiene el mismo contenido que el original (las modificaciones en un búfer se reflejan en el otro búfer), pero diferentes configuraciones: un modo principal diferente, modos menores diferentes, variables locales diferentes, un punto diferente, marcas diferentes , un estrechamiento diferente, etc.
Por lo tanto, puede obtener una vista de una parte de un búfer en un modo principal diferente, mientras realiza un seguimiento de las modificaciones en el búfer original y refleja las modificaciones en el búfer original. Primero haga un buffer indirecto con M-x clone-indirect buffer
; también hay clone-indirect-buffer-other-window
que está vinculado a C-x 4 c
( C-x 4
prefijo de ventana y c
para clonar ). En el búfer clonado, acérquese a la región que desea: seleccione la parte interesante y ejecute C-x n n
( narrow-to-region
). Cambie el modo principal como lo desee.
Puede automatizar eso con un comando como este para uso interactivo:
(defun edit-region-in-foo-mode (beg end)
(interactive "@r")
(let ((new-buffer (clone-indirect-buffer nil t)))
(narrow-to-region beg end)
(foo-mode)))
Para uso de programación:
(defmacro with-indirect-buffer-in-foo-mode (beg end &rest body)
`(with-current-buffer (clone-indirect-buffer nil nil)
(narrow-to-region beg end)
(foo-mode)
(unwind-protect
,body
(kill-buffer (current-buffer)))))
Gilles 'SO- deja de ser malvado'
fuente
M-x copy-to-buffer
, luego redimí la respuesta de @legoscia, que es probablemente lo que quieres. Si el proceso de extracción y el modo principal son los mismos, una función será mejorMe gustó lo que escribió @Gilles. Modifiqué lo que @Gilles escribió para preguntarle al usuario qué modo le gustaría usar. Puede editar lo que escribí para proporcionar los modos que prefiera o incluso alterar la llamada para completar la lectura, de modo que le permita proporcionar un modo no proporcionado en la lista predeterminada.
fuente
Para un caso de uso similar, escribí una función elisp
modi/switch-to-scratch-and-back
que le permite cambiar rápidamente entre un buffer FILE y un * scratch * buffer que tiene el mismo modo mayor que el buffer FILE. La función hipervinculada anterior lo llevará a una pregunta existente de emacs SE.Así es como puede usar esa función:
Aquí hay un ejemplo de función de contenedor
copy-current-buffer-to-scratch
a una clave si lo desea y ejecutarlo le dará un búfer * scratch * con el contenido de su búfer de trabajo.Esta es solo otra forma de hacer lo que quieres; Sin embargo, es posible que desee utilizar buffers indirectos de los que habla la solución de @Gilles. Este enfoque es útil si necesita hacer algunas ediciones pesadas en un búfer temporal sin correr el riesgo de guardar accidentalmente en el búfer original hasta que haya alcanzado una solución estable.
Un caso de uso de ejemplo es probar funciones experimentales de elisp antes de guardarlas en su emacs init.
fuente