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 2
abrirá 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-register
C-xrjcorre
jump-to-register
Escriba cualquier carácter para especificar un registro cuando se le solicite. 1
Marcadores:
C-xrmcorre
bookmark-set
C-xrbcorre
bookmark-jump
Marca 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-mark
cual 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-SPC
aparece 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-repeat
ybmkp-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-buffer
creará 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 0
oC-x 1
.Con
M-x winner-mode
usted puede cambiar fácilmente entre las dos ubicaciones.C-c <left>
/M-x winner-undo
yC-c <right>
/M-x winner-redo
cambia 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-undo
ywinner-redo
funcionan 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-redo
no es válida, en este casowinner-undo
volverá a la posición anterior.Para la situación del OP esto lleva al siguiente proceso;
M-x winner-mode
M-x clone-indirect-buffer
(nuevo nombre de búfer indirecto: File1.txt <2>)C-x 1
C-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-undo
para atrás yC-c <right>
/M-x winner-redo
para adelante.Un cambio es cualquier cosa que no sea otro
winner-undo
owinner-redo
.fuente
si usa
evil-mode
, la capa vim, entoncesC-o
yC-i
funcionará igual.Ejecutan los comandos
evil-jump-backward
/forward
.C-o
salta 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-i
va en reversa. También podemos usarTAB
después de un enC-o
lugar 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-o
y quéC-i
hacer?Si usa Icicles , puede navegar rápidamente entre los marcadores
mark-ring
de 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-mode
implementa 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'a
saltar para marcar "a" y'b
saltar 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> F4
la 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> o
la forma habitual.fuente