web-dev-qa-db-fra.com

Comment faire défiler ligne par ligne dans GNU Emacs?

Pour le dire simplement, j'essaie de faire défiler dans emacs comme dans vim et la plupart des autres éditeurs; quand je suis par exemple, deux lignes du bas/haut, et je presse bas/haut (Ctrl-p,n,) il ne va que vers le haut ou le bas, pas la moitié de l’écran.

79
Rook

Si vous voulez positionner l'écran avec précision, vous pouvez utiliser Ctrl-L.

  • Par défaut, il positionne la ligne en cours au milieu de l'écran.

  • ESC 0 Ctrl-L positionne la ligne actuelle en haut.

46
starblue

Voir quelques suggestions sur EmacsWIki:

 (setq scroll-step 1 
 scroll-conservatory 10000) 
46
ars

Je suis un peu en retard pour la fête, mais si cela ne vous dérange pas d'installer un paquet, alors smooth-scrolling ( github , également disponible en MELPA ) est peut-être ce que vous préférez. cherche - cela fonctionne certainement pour moi.

Une fois que vous l'avez installé, vous pouvez afficher les informations suivantes dans votre init.el:

(require 'smooth-scrolling)
(smooth-scrolling-mode 1)
(setq smooth-scroll-margin 5)

La dernière ligne est optionnelle. il commence à faire défiler près de l'écran Edge plutôt que vers lui, vous avez donc toujours un peu de contexte autour du point. Ajustez au goût.

36

Ma solution n'est pas de changer le défilement par défaut d'Emac, mais plutôt de créer une commande de séquence de touches à partir d'une macro. De cette façon, vous disposez d'un moyen pratique de faire défiler une ligne à la fois quand vous le souhaitez. Pas idéal, mais super facile. Il se trouve que M- (↓) et M- (↑) sont disponibles, c'est ce que j'ai utilisé.

Voici comment je l'ai fait. Tout d'abord, vous devez enregistrer une macro pour les défilements d'une ligne, de haut en bas.

Commencer la macro

C-x ( 

Faites défiler un

C-u 1 C-v

Arrêter la macro

C-x )

Pour faire défiler un, utilisez

C-u 1 M-v

Ensuite, vous devez nommer la macro.

M-x name-last-kbd-macro

Donnez-lui un nom lorsque vous y êtes invité, par exemple:

down-one-line

Utilisez simplement ce qui suit pour lier une séquence de clés à ce nom de commande:

M-x global-set-key

Et sur invite, utilisez quelque chose comme:

M-(down arrow)

Ensuite, il vous demandera quelle commande vous souhaitez lier et vous devrez lui donner le nom que vous avez inventé précédemment, par exemple, une ligne.

Voici où j'ai obtenu cette information. Vous pouvez également trouver des instructions ci-dessous et ailleurs sur l’ajout de votre macro au fichier .emacs.

Ici pour l'explication de la définition de macro

Ici pour savoir comment contrôler le défilement

24
Josh Cason

Je les utilise dans mon fichier .emacs depuis 2000.

(global-set-key (quote [M-down]) (quote View-scroll-line-forward))
(global-set-key (quote [M-up]) (quote View-scroll-line-backward)) 

De cette façon, je peux conserver le comportement par défaut d'Emacs et faire défiler une ligne à la fois, en fonction de ce que je fais.

Cela a fonctionné jusqu'à au moins GNU Emacs 22. Je suis récemment passé à Emacs 24 et j'ai découvert que View-scroll-line-forward et View-scroll-line-backward ne sont plus disponibles. Après quelques recherches, j'ai découvert que le travail de défilement vers le haut et le défilement vers le bas. Donc, si vous utilisez Emacs 24, vous pouvez l'utiliser.

(global-set-key (quote [M-down]) (quote scroll-up-line))
(global-set-key (quote [M-up]) (quote scroll-down-line)) 

J'ai surtout sauté Emacs 23, donc si c'est la version que vous utilisez, vous pouvez expérimenter les deux solutions ci-dessus.

Remarque: scroll-up-line fait défiler une ligne en bas , car le tampon est déplacé d’une ligne vers le haut.

20
Rajesh J Advani

Je relie mes touches de direction pour effectuer des opérations de défilement.

(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)))
12
Derek Slager

Les Simples font ceci:

(global-set-key [M-up] (lambda () (interactive) (scroll-up 1)))
(global-set-key [M-down] (lambda () (interactive) (scroll-down 1)))

puis le curseur méta vers le haut monte et le curseur meta vers le bas.

CQFD Je ne sais pas ce que toutes les personnes ci-dessus fumaient!

11
Adam

J'ai les éléments suivants dans mon fichier .emacs pour permettre un comportement de défilement Nice ctrl-up, ctrl-down. J'utilise aussi cela pour la molette.

(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)
4
Alex B

M-x customize-variable scroll-conservatively

Réglez-le sur 1.

Vous ne voulez pas vraiment faire cela, cependant.

2
jrockway

Comme il peut être ennuyant d’utiliser le M-upM-down car il interfère avec le mode org qui surcharge ces commandes. Pour éviter ce problème, j’utilise personnellement les commandes combinant M-page-upM-page-down". Ici, j'ai défini le défilement vers le haut et le bas sur 1 ligne.

;;;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))))
2
romwel

Pour que le défilement "vim" mette ceci dans votre fichier .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)
2
jjpikoov

Si vous recherchez un moyen rapide de créer un effet de défilement, saisissez C-n et C-l séquentiellement, ce qui déplace le curseur vers le bas puis le centre.

2

Si vous démarrez emacs dans .xsession, dans mon cas, régler scroll prudemment à 100+ ne fonctionnera pas, pas plus que scroll-step 1. Mais si vous démarrez emacs après X, cela fonctionne.

0
seb