salir - ¿Cómo desplazarse línea por línea en GNU Emacs?
como usar emacs (13)
Dado que puede ser molesto usar M-up , M-down porque interfiere con el modo orgánico que sobrecarga estos comandos. Para evitar este problema, personalmente uso esos comandos que combinan M-page-up M-page-down . "Aquí definí el scroll hacia arriba y hacia abajo a 1 línea.
;;;scroll by `number-of-lines'' without the cursor attached to the screen
(global-set-key [M-prior] (lambda () (interactive) (let ((number-of-lines 1))
(scroll-down number-of-lines)
(forward-line (- number-of-lines)))))
(global-set-key [M-next] (lambda () (interactive) (let ((number-of-lines 1))
(scroll-up number-of-lines)
(forward-line number-of-lines))))
;;;scroll by `number-of-lines'' with the cursor attached to the screen
(global-set-key [S-M-prior] (lambda () (interactive) (let ((number-of-lines 1))
(scroll-down number-of-lines))))
(global-set-key [S-M-next] (lambda () (interactive) (let ((number-of-lines 1))
(scroll-up number-of-lines))))
En pocas palabras, estoy tratando de desplazarse en emacs como en vim y la mayoría de los otros editores; cuando estoy, por ejemplo, dos líneas desde la parte inferior / superior, y presiono hacia abajo / arriba ( Ctrl - p , n , ↑ , ↓ ) va solo una línea hacia arriba o hacia abajo, no la mitad de la pantalla.
Llego un poco tarde a la fiesta, pero si no te importa instalar un paquete, puede que lo que estás buscando sea un desplazamiento suave ( github , también disponible en MELPA ), sin duda me MELPA .
Una vez que lo haya instalado, puede mostrar lo siguiente en su init.el:
(require ''smooth-scrolling)
(smooth-scrolling-mode 1)
(setq smooth-scroll-margin 5)
La última línea es opcional; comienza a desplazarse cerca del borde de la pantalla en lugar de hacerlo, por lo que siempre tiene un pequeño contexto alrededor del punto. Ajustar al gusto.
Los he usado en mi archivo .emacs
desde 2000.
(global-set-key (quote [M-down]) (quote View-scroll-line-forward))
(global-set-key (quote [M-up]) (quote View-scroll-line-backward))
De esta forma, puedo mantener el comportamiento predeterminado de Emacs así como desplazarme línea por línea, dependiendo de lo que esté haciendo.
Esto funcionó hasta al menos GNU Emacs 22. Recientemente me actualicé a Emacs 24 y descubrí que View-scroll-line-forward
y View-scroll-line-backward
ya no están disponibles. Después de un poco de caza, descubrí que el scroll-up-line y el scroll-down-line funcionan. Entonces, si estás usando Emacs 24, puedes usar esto.
(global-set-key (quote [M-down]) (quote scroll-up-line))
(global-set-key (quote [M-up]) (quote scroll-down-line))
En su mayoría me salteé Emacs 23, así que si esa es la versión que estás usando, puedes experimentar con ambas cosas.
Nota: scroll-up-line
realmente desplaza una línea hacia abajo , porque el buffer se está moviendo una línea hacia arriba.
Mi solución no es cambiar el desplazamiento predeterminado de Emac, sino crear un comando de secuencia de teclas desde una macro. De esta manera, tiene una manera conveniente de desplazarse una línea a la vez cuando lo desee. No es ideal, pero es muy fácil. Simplemente sucede que M- (↓) y M- (↑) están disponibles, así que eso es lo que usé.
Así es como lo hice. Primero, debe registrar una macro para una línea de desplazamiento, arriba y abajo.
Comenzar macro
C-x (
Desplácese hacia abajo uno
C-u 1 C-v
Detener macro
C-x )
Para desplazarse hacia arriba, use
C-u 1 M-v
Luego necesitas nombrar la macro.
M-x name-last-kbd-macro
Déle un nombre cuando se le pida como:
down-one-line
Luego solo use lo siguiente para enlazar una secuencia de teclas a ese nombre de comando:
M-x global-set-key
Y cuando se le pregunte, use algo como:
M-(down arrow)
Luego, le preguntará qué comando desea vincular, y debe darle el nombre que inventó anteriormente, por ejemplo, down-one-line.
Aquí es donde obtuve esta información. También puede encontrar las instrucciones a continuación y en otros lugares sobre cómo agregar su macro al archivo .emacs.
Here para explicación de definición de macro
Para que el desplazamiento "vim" lo pongas en tu archivo .emacs:
(defun next-line-and-recenter () (interactive) (next-line) (recenter))
(defun previous-line-and-recenter () (interactive) (previous-line) (recenter))
(global-set-key (kbd "C-n") ''next-line-and-recenter)
(global-set-key (kbd "C-p") ''previous-line-and-recenter)
Si está buscando una forma rápida de crear un efecto de desplazamiento, ingrese Cn
y Cl
secuencialmente, lo cual mueve el cursor hacia abajo y luego lo centra.
Si inicia emacs en .xsession, en mi caso, configurar scroll-conservatively a 100+ no funcionará, ni scroll-step 1. Pero si inicia emacs después de X, funciona.
Si quiere posicionar la pantalla exactamente, puede usar Ctrl-L.
Por defecto, posiciona la línea actual en el medio de la pantalla.
ESC 0 Ctrl-L posiciona la línea actual en la parte superior.
Simples hacen esto:
(global-set-key [M-up] (lambda () (interactive) (scroll-up 1)))
(global-set-key [M-down] (lambda () (interactive) (scroll-down 1)))
a continuación, el cursor de meta se mueve hacia arriba y el cursor de meta hacia abajo se mueve hacia abajo.
QED. ¡No estoy seguro de qué fumaban todas las personas mencionadas!
Tengo lo siguiente en mi archivo .emacs para habilitar un buen comportamiento de desplazamiento ctrl-up, ctrl-down. También uso esto para la rueda del mouse.
(defun scroll-down-in-place (n)
(interactive "p")
(previous-line n)
(scroll-down n))
(defun scroll-up-in-place (n)
(interactive "p")
(next-line n)
(scroll-up n))
(global-set-key [mouse-4] ''scroll-down-in-place)
(global-set-key [mouse-5] ''scroll-up-in-place)
(global-set-key [C-up] ''scroll-down-in-place)
(global-set-key [C-down] ''scroll-up-in-place)
Vea algunas de las sugerencias en EmacsWIki:
(setq scroll-step 1 scroll-conservatively 10000)
Vuelvo a vincular mis teclas de flecha para realizar operaciones de desplazamiento.
(global-set-key [up] (lambda () (interactive) (scroll-down 1)))
(global-set-key [down] (lambda () (interactive) (scroll-up 1)))
(global-set-key [left] (lambda () (interactive) (scroll-right tab-width t)))
(global-set-key [right] (lambda () (interactive) (scroll-left tab-width t)))
Mx customize-variable scroll-conservatively
Establecerlo en 1.
Aunque en realidad no quieres hacer esto.