En pocas palabras, estoy tratando de hacer scroll en emacs como en vim y la mayoría de los demás editores; cuando estoy por ejemplo, dos líneas de la parte inferior / superior, y presione hacia abajo / arriba ( Ctrl- p, n, ↑, ↓) que va sólo una línea hacia arriba o hacia abajo, ni la mitad de la pantalla.
87
z.
vim con más frecuencia para tener la sensación de Emacs ;-) Puede ser inusual, pero en realidad es más útil que desplazarse línea por línea en mi humilde opinión.Respuestas:
Vea algunas de las sugerencias en EmacsWIki:
fuente
scroll-conservatively
. Las advertencias contra esto son un poco extrañas: si causa un problema, ¡es bastante fácil eliminar la línea de su init.el!Si desea colocar la pantalla exactamente, puede usar Ctrl-L.
De forma predeterminada, coloca la línea actual en el medio de la pantalla.
ESC 0 Ctrl-L coloca la línea actual en la parte superior.
fuente
Llego un poco tarde a la fiesta, pero si no le importa instalar un paquete, entonces el desplazamiento suave ( github , también disponible en MELPA ) puede ser lo que está buscando, ciertamente funciona para mí.
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 en él, por lo que siempre tienes un poco de contexto alrededor del punto. Ajustar al gusto.
fuente
Mi solución no es cambiar el desplazamiento predeterminado de Emac, sino crear un comando de secuencia de teclas a partir de una macro. De esta manera, tiene una forma 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 grabar una macro para desplazamientos de una línea, hacia arriba y hacia abajo.
Comenzar macro
Desplácese hacia abajo uno
C-u 1 C-v
Detener macro
Para desplazarse hacia arriba uno, use
C-u 1 M-v
A continuación, debe nombrar la macro.
Déle un nombre cuando se le solicite como:
Luego, use lo siguiente para vincular una secuencia de teclas a ese nombre de comando:
Y cuando se le solicite, 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 instrucciones a continuación y en otros lugares sobre cómo agregar su macro al archivo .emacs.
Aquí para la explicación de la definición macro
Aquí para saber cómo controlar el desplazamiento
fuente
Los he estado usando en mi
.emacs
archivo 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 manera, puedo mantener el comportamiento predeterminado de Emacs y desplazarme una línea a la vez, dependiendo de lo que esté haciendo.
Esto funcionó hasta al menos GNU Emacs 22. Recientemente actualicé a Emacs 24 y descubrí que
View-scroll-line-forward
yaView-scroll-line-backward
no están disponibles. Después de un poco de caza, descubrí que funcionan las líneas de desplazamiento hacia arriba y hacia abajo. Entonces, si está usando Emacs 24, puede usar esto.(global-set-key (quote [M-down]) (quote scroll-up-line)) (global-set-key (quote [M-up]) (quote scroll-down-line))
Casi siempre me salté Emacs 23, así que si esa es la versión que estás usando, puedes experimentar con las dos anteriores.
Nota: en
scroll-up-line
realidad, se desplaza una línea hacia abajo , porque el búfer se mueve una línea hacia arriba.fuente
Vuelvo a enlazar 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)))
fuente
Los simples hacen esto:
(global-set-key [M-up] (lambda () (interactive) (scroll-up 1))) (global-set-key [M-down] (lambda () (interactive) (scroll-down 1)))
luego el meta cursor hacia arriba se mueve hacia arriba y el meta cursor hacia abajo se mueve hacia abajo.
QED. ¡No estoy seguro de qué estaban fumando todas las personas mencionadas!
fuente
Tengo lo siguiente en mi archivo .emacs para habilitar un buen comportamiento de desplazamiento ctrl-up, ctrl-down. También utilizo 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)
fuente
Para que el desplazamiento "vim" ponga esto en su 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)
fuente
Dado que puede ser molesto usar el M-up, M-downporque interfiere con el modo org que sobrecarga estos comandos. Para evitar este problema, personalmente utilizo los comandos que combinan M-page-up M-page-down". Aquí definí el desplazamiento hacia arriba y hacia abajo hasta 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))))
fuente
M-x customize-variable scroll-conservatively
Póngalo en 1.
Sin embargo, realmente no quieres hacer esto.
fuente
Si está buscando una forma rápida de crear un efecto de desplazamiento, ingrese
C-n
yC-l
secuencialmente lo que mueve el cursor hacia abajo y luego lo centra.fuente
Si inicia emacs en .xsession, en mi caso, configurar scroll-conservadoramente en 100+ no funcionará, ni scroll-step 1. Pero si inicia emacs después de X, funciona.
fuente
Si no le importa usar el mouse y tiene una rueda de desplazamiento, puede personalizar la variable mouse-wheel-scroll-amount por:
Ch v mouse-wheel-scroll-amount (haga clic en personalizar, cambie el valor a "Número específico de líneas" 1, Aplicar y guardar).
o agregue a .emacs la línea: '(mouse-wheel-scroll-amount' (1 ((shift). 1) ((meta)) ((control). text-scale)))
Hay muchas posibilidades enumeradas en https://www.emacswiki.org/emacs/Scrolling
fuente