21 votes

Ne pas changer la position du curseur lors du défilement dans Emacs

Y a-t-il un moyen d'arrêter Emacs de déplacer automatiquement la position de mon curseur de texte (c'est-à-dire le point) pendant que je fais défiler le texte ? Je n'arrête pas de perdre ma position et mes marques avec ce comportement ennuyeux.

J'ai testé la suggestion suivante, sans succès :

(setq scroll-preserve-screen-position t
scroll-conservatively 0)

(Je suis en train de courir Emacs 24.2 sur Ubuntu et sur OS X).

12voto

Detective Chimp Points 808

Je pense que vous voulez que le comportement du curseur (point) et de la zone visible soit semblable à celui de l'application suivante notepad , gedit d'autres éditeurs modernes : capacité de changer la zone visible indépendamment de la position du point et de ramener immédiatement la zone visible à la position du point après avoir déplacé le point. Mais emacs a une autre conception : la zone visible suit toujours la position du point et vice versa.

Voir aussi https://stackoverflow.com/questions/9616623/ctrl-up-down-style-scrolling-in-emacs

La réponse précédente montre un idiome spécial : si vous voulez déplacer la zone visible (avec le point ensemble) loin de la position actuelle et ensuite retourner le point exactement à la position précédente, vous devriez avoir l'habitude d'utiliser mark-ring . Il y a toujours un moyen de s'en sortir mark ring à la position de travail actuelle : de nombreuses commandes, telles que isearch-forward , beginning-of-buffer , ace-jump-mode enregistrer automatiquement la position précédente dans mark ring et vous ne devriez pas utiliser C-<SPC> C-<SPC> avant, mais seulement C-u C-<SPC> pour avoir sauté en arrière. Les commandes de défilement, comme scroll-up o mwheel-scroll En revanche, ne sauvegardez pas automatiquement la position précédente par défaut, car cela pourrait produire trop de marques excessives.

Vous pouvez utiliser les commandes clone-indirect-buffer o view-buffer-other-window pour un travail indépendant avec buffer dans quelques endroits. Et utilisez la commande recenter-top-bottom ( C-l ) pour maintenir continuellement le point au centre de la zone visible.

8voto

James John Points 101

Je ne sais pas s'il existe un moyen d'empêcher emacs de déplacer votre point lors du défilement. Mais si vous souhaitez enregistrer votre emplacement pour y revenir plus tard, vous pouvez utiliser la fonction anneau de marquage .

C'est-à-dire que le type C-<SPC> C-<SPC> pour pousser l'emplacement actuel du point sur l'anneau de marquage, puis tapez plus tard C-u C-<SPC> pour remettre le point à l'emplacement précédent dans l'anneau de marquage.

4voto

jevon Points 121

J'utilise ceci :

;;; scrollers - M-f, M-b
(global-set-key "\M-f" "\C-u1\C-v")
(global-set-key "\M-b" "\C-u1\M-v")

0voto

Ce qui suit fonctionne pour moi :

(custom-set-variables
 '(scroll-conservatively 1000)
 '(scroll-margin 3)
 )

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X