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

Pour le dire simplement, j’essaie de faire défiler les emacs comme dans vim et la plupart des autres éditeurs; Quand je suis par exemple deux lignes du bas / haut et que j’appuie vers le bas / haut ( Ctrlp , n , , ), il n’y a qu’une ligne vers le haut ou le bas, pas la moitié de l’écran.

Voir certaines des suggestions sur le EmacsWIki:

 (setq scroll-step 1
       scroll-conservative 10000)

Si vous voulez positionner l’écran exactement, vous pouvez utiliser Ctrl-L.

  • Par défaut, il positionne la ligne actuelle au milieu de l’écran.

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

Je suis un peu en retard pour la fête, mais si cela ne vous dérange pas d’installer un paquet, alors le défilement en douceur ( github , également disponible dans MELPA ) est peut-être ce que vous cherchez – cela fonctionne certainement pour moi.

Une fois installé, vous pouvez afficher les éléments suivants dans votre init.el:

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

La dernière ligne est facultative. il commence à défiler près du bord de l’écran plutôt que sur celui-ci, vous avez donc toujours un peu de contexte autour du point. Ajuster au goût

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 pouvez faire défiler une ligne à la fois lorsque 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é.

C’est comme ça que je l’ai fait. Tout d’abord, vous devez enregistrer une macro pour une ligne de défilement, de haut en bas.

Commencer la macro

 Cx ( 

Faites défiler un

 Cu 1 Cv 

Arrêter la macro

 Cx ) 

Pour faire défiler vers le haut, utilisez

 Cu 1 Mv 

Ensuite, vous devez nommer la macro.

 Mx name-last-kbd-macro 

Donnez-lui un nom lorsque vous y êtes invité comme:

 down-one-line 

Ensuite, utilisez simplement ce qui suit pour lier une séquence de touches à ce nom de commande:

 Mx global-set-key 

Et à l’invite, utilisez quelque chose comme:

 M-(down arrow) 

Ensuite, il vous demandera quelle commande vous voulez lier, et vous devriez lui donner le nom que vous avez inventé plus tôt, par exemple, une ligne en bas.

Voici où j’ai eu 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

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. J’ai récemment effectué une mise à niveau vers Emacs 24 et j’ai découvert que View-scroll-line-forward et View-scroll-line-backward n’étaient plus disponibles. Après avoir chassé, j’ai découvert que le défilement des lignes et le défilement fonctionnent. 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é sur Emacs 23, donc si c’est la version que vous utilisez, vous pouvez expérimenter les deux.

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

Je relis mes touches fléchées 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))) 

Simples fait ceci:

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

puis le méta-curseur se déplace vers le haut et le méta-curseur descend vers le bas.

QED. Pas sûr de ce que toutes les personnes ci-dessus fumaient!

J’ai ce qui suit dans mon fichier .emacs pour activer un comportement de défilement de Ctrl-up, ctrl-down agréable. Je l’utilise aussi 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) 

Mx customize-variable scroll-conservatively

Définissez-le sur 1.

Vous ne voulez pas vraiment faire cela, cependant.

Pour que le défilement “vim” soit placé 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 "Cn") 'next-line-and-recenter) (global-set-key (kbd "Cp") 'previous-line-and-recenter) 

Si vous cherchez un moyen rapide de créer un effet de type défilement, entrez Cn et Cl manière séquentielle, ce qui déplace le curseur vers le bas et le centre ensuite.

Comme il peut être gênant d’utiliser le M-up , M-down car cela interfère avec le mode org qui surcharge ces commandes. Pour éviter ce problème, j’utilise personnellement les commandes combinant M-page-up M-page-down “. Ici, j’ai défini le défilement vers le haut et le bas jusqu’à 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 [SM-prior] (lambda () (interactive) (let ((number-of-lines 1)) (scroll-down number-of-lines)))) (global-set-key [SM-next] (lambda () (interactive) (let ((number-of-lines 1)) (scroll-up number-of-lines)))) 

Si vous démarrez emacs dans .xsession, dans mon cas, le paramètre scroll-conservativement à 100+ ne fonctionnera pas, ni à l’étape 1. Mais si vous lancez emacs après X, cela fonctionne.