A veces me encuentro alternando frecuentemente entre dos funciones que estoy editando conjuntamente. En estas situaciones, es tedioso y doloroso seguir haciendo un C-s <functionname>cambio a la otra función y luego encontrar el lugar exacto que estaba editando anteriormente.
¿Cómo configuro marcadores y luego salto hacia adelante y hacia atrás entre dos ubicaciones en el búfer con facilidad?
navigation
cycling
mark-ring
registers
Vedaad Shakib
fuente
fuente

Respuestas:
Ventanas Emacs
C-x 2abrirá otra ventana (= dividir el marco) debajo de la actual, adjunta al mismo búfer. Puede mover el punto en cualquier ventana sin afectar a la otra.Puede moverse de una ventana a otra usando
C-x o. La biblioteca de movimiento de viento incorporada proporciona algunas funciones que facilitan la navegación entre ventanas.Si este método le conviene, es posible que también desee echar un vistazo a los buffers indirectos .
fuente
Registros:
C-xrSPCcorre
point-to-registerC-xrjcorre
jump-to-registerEscriba cualquier carácter para especificar un registro cuando se le solicite. 1
Marcadores:
C-xrmcorre
bookmark-setC-xrbcorre
bookmark-jumpMarca anillo:
C-SPCC-SPCempuja la posición actual al anillo de marca (sin dejarlo activo).
C-uC-SPCaparece el anillo de marca, saltando a la posición anterior. Puede usar esto repetidamente para navegar por todo el anillo.
Tenga en cuenta que algunos comandos (especialmente los que pueden desplazarlo a una distancia desconocida o arbitraria de su ubicación original) empujarán automáticamente al anillo de marca para que pueda usar C-uC-SPCpara regresar después. Esto incluye
isearch, así que después de usar C-spara ir a algún lugar, puede volver a saltar fácilmente.Punto de cambio y marca:
Y como comenta Tu Do, C-xC-xcorre , lo
exchange-point-and-markcual es muy útil para saltar entre dos ubicaciones. También activa la marca / región, pero puede usar C-SPCpara borrar el resaltado.1 Si está aprovechando la funcionalidad de registro en elisp, use algún símbolo no conflictivo para el nombre, en lugar de un carácter, para que no pueda entrar en conflicto con los registros configurados interactivamente (a menos, por supuesto, que desee hacer ese).
fuente
C-x C-x, ya que puede saltar de un lado a otro entre dos posiciones.C-u C-SPCaparece el anillo de marca y ejecutar nuevamente moverá el punto a otra parte.Además de la respuesta de phils, hay algunas opciones más:
helm-semantic-or-imenu : enumera todas las definiciones disponibles en el archivo actual. Si el cursor está dentro de una definición, al activar el resaltador preselecciona esa definición.
sr-speedbar : un navegador de archivos que enumera sus definiciones en cada archivo. Es similar al árbol de esquema en IDE.
fuente
Además de los registros y los marcadores (vea la respuesta de @ phils sobre ambos y mi otro, Icicles responde sobre los marcadores), los marcadores , particularmente los marcadores automáticos o temporales, pueden ser útiles para esto. Necesita la biblioteca Bookmark + para estos tipos de marcadores especiales.
Un marcador automático es uno que no necesita nombrar. Es rápido crear y eliminar: solo presione una tecla. La misma clave crea o elimina un marcador en el punto. (De forma predeterminada, esto está obligado a
C-x p RET, pero, por supuesto, puede usar cualquier tecla).Los marcadores automáticos son, como los marcadores en general, persistentes. Pero opcionalmente puede hacer que se eliminen automáticamente.
También puede crear marcadores temporales o hacer que los marcadores existentes sean temporales. Puede, por ejemplo, elegir que los marcadores automáticos sean temporales automáticamente.
Usted puede rápidamente ciclo de entre un conjunto dado de marcadores. Por ejemplo, para alternar entre marcadores automáticos, use comandos
bmkp-next-autonamed-bookmark-repeatybmkp-previous-autonamed-bookmark-repeat(vincularlos a teclas).Puede resaltar ubicaciones marcadas de diferentes maneras, por lo que es fácil detectarlas.
fuente
Con respecto a los amortiguadores indirectos mencionados en la respuesta aceptada ...
M-x clone-indirect-buffercreará un buffer indirecto para el buffer actual. El nombre del nuevo búfer tendrá '<2>' agregado (o un número mayor si ya tiene nombres de búfer duplicados). El nuevo búfer se abre en una nueva ventana. Puede volver a una sola ventana usandoC-x 0oC-x 1.Con
M-x winner-modeusted puede cambiar fácilmente entre las dos ubicaciones.C-c <left>/M-x winner-undoyC-c <right>/M-x winner-redocambia entre configuraciones de ventana. En este caso, las configuraciones serán posiciones en los dos búferes que visualizan el único archivo.Nota: las funciones
winner-undoywinner-redofuncionan en una lista de configuraciones. Si se cambia la configuración, por ejemplo, el punto de movimiento, la configuración actual se convierte en el encabezado de la lista ywinner-redono es válida, en este casowinner-undovolverá a la posición anterior.Para la situación del OP esto lleva al siguiente proceso;
M-x winner-modeM-x clone-indirect-buffer(nuevo nombre de búfer indirecto: File1.txt <2>)C-x 1C-x b(el valor predeterminado será el búfer original a menos que se haya cambiado a otro búfer desde el paso 3). Esto crea una nueva configuración para que el ganador vuelva a cambiar.Un cambio a la ubicación de edición anterior (configuración de la ventana) depende de si se realiza un cambio en la configuración de la ventana entre los cambios;
C-c <left>/M-x winner-undo.C-c <left>/M-x winner-undopara atrás yC-c <right>/M-x winner-redopara adelante.Un cambio es cualquier cosa que no sea otro
winner-undoowinner-redo.fuente
si usa
evil-mode, la capa vim, entoncesC-oyC-ifuncionará igual.Ejecutan los comandos
evil-jump-backward/forward.C-osalta a la posición anterior en la lista de saltos, que se establece automáticamente (las marcas se establecen en los comandos de movimiento).C-iva en reversa. También podemos usarTABdespués de un enC-olugar deC-i. Por lo tanto, el uso de ambas funciones lo llevará de un lado a otro en su búfer actual.Si desea que esta característica sea de buffers cruzados, consulte
evil-jumpers: http://melpa.org/#/evil-jumper«
Evil-jumper es un complemento para el modo malvado que reemplaza la implementación de la lista de salto de modo que se asemeja más al comportamiento de Vim. Específicamente, saltará a través de los límites del búfer y revivirá los búferes muertos si es necesario. La lista de salto también se puede guardar en un archivo y restaurar entre sesiones. »»
Nota: lo aprendí en este wiki
fuente
C-oy quéC-ihacer?Si usa Icicles , puede navegar rápidamente entre los marcadores
mark-ringde cada búfer o elglobal-mark-ring(que tiene un solo marcador en cada búfer).Para ello, use comandos múltiples
C-- C-SPC(para un búfermark-ring) oC-- C-x C-SPC(para elglobal-mark-ring). Después de presionar la tecla una vez, usa las teclas de ciclismo Icicles habituales , etc., para moverse entre los marcadores del anillo.(Las mismas teclas sin un prefijo arg establecen la marca (
set-mark-command) y hacen estallar la marca global (pop-global-mark), respectivamente, tal como lo hacen en Emacs vanilla.)El texto de la línea de cada marcador se utiliza como candidato de finalización. A medida que escribe, su entrada de minibúfer reduce los candidatos a los que coinciden (p. Ej., Subcadena o coincidencia de expresiones regulares). Puede alternar rápidamente entre marcadores coincidentes o visitar cualquiera de ellos directamente. Incluso puede cambiar el orden de clasificación (
C-,) para ciclismo.fuente
Una posibilidad mínima pero a menudo útil, cuando solo quiere ver la otra función, es configurar
que lo lleva de vuelta a la posición exacta del cursor inicial al cambiar entre C-vy M-v.
fuente
evil-modeimplementa marcadores de estilo Vim . Puede establecer marcadores con (m, es decir,evil-set-marker) y saltar a la marca con la marca de retroceso `(evil-goto-mark) o a la línea de la marca'(evil-goto-mark-line).Por lo tanto, puede crear la marca "a" en la primera ubicación con
ma, crear la marca "b" en la segunda ubicación conma, y luego'asaltar para marcar "a" y'bsaltar para marcar "b".fuente
use imenu y el siguiente código
fuente
Durante los últimos 20 años más o menos, he estado usando estas dos gemas:
Los ato a C-. y C-, respectivamente, y usarlos constantemente sin darse cuenta nunca más.
Sí, los registros y marcadores son mucho más flexibles y potentes, pero aún así, este es uno de esos pequeños y rápidos ayudantes que me imposibilitan cambiar a otros editores.
fuente
También puede aprovechar las macros, ya que pueden unirse rápidamente a teclas convenientes.
Por ejemplo, grabe un salto a la posición N usando
<F3> M-g g N <F4>y asígnelo a la tecla F5 conC-x C-k b <F5>. Luego haga lo mismo con la posición M y F6. De ahora en adelante, simplemente puede alternar F5 y F6 para saltar entre N y M.Aún más simple, ya que
<F4>ejecuta la última macro grabada y<C-u> F4la penúltima, puede omitir el paso de vinculación de teclas y simplemente alternar posiciones usando<F4>y<C-u> F4.Otra posibilidad bastante radical es crear un buffer indirecto en otra ventana con
<C-x> 4 c. Este búfer tiene el mismo contenido pero puede tener una posición de punto diferente. Ahora simplemente alterne entre ventanas con<C-x> ola forma habitual.fuente