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

18

Existe-t-il un moyen de ne pas Emacsdéplacer automatiquement ma position de curseur de texte (aka, point) pendant le défilement? Je continue 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)

(J'utilise Emacs24.2 sur Ubuntu et sur OS X.)

NVaughan
la source

Réponses:

11

Je pense que vous voulez que le comportement du curseur (point) et zone visible devrait être comme dans notepad, gedit, d' autres éditeurs modernes: capacité de changer la zone visible indépendamment de la position du point et retourner immédiatement zone visible à la position du point après le point en mouvement. Mais emacsa une autre conception: la zone visible suit toujours la position du point et vice versa.

Voir aussi /programming/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, puis pour ramener le point exactement à la position précédente, vous devriez avoir l'habitude d'utiliser mark-ring. Il y a toujours une voie à travers mark ringla position de travail en cours: de nombreuses commandes, comme isearch-forward, beginning-of-buffer, ace-jump-modesauvegarde automatiquement la position précédente mark ringet vous ne devriez pas utiliser C-<SPC> C-<SPC>avant, mais seulement C-u C-<SPC>pour le saut en arrière. Les commandes de défilement, comme scroll-upou mwheel-scroll, ne sauvegardent pas automatiquement la position précédente par défaut car cela peut produire trop de marques excessives.

Vous pouvez utiliser des commandes clone-indirect-bufferou view-buffer-other-windowpour un travail indépendant avec tampon à quelques endroits. Et utilisez la commande recenter-top-bottom( C-l) pour maintenir en permanence le point au centre de la zone visible.

artscan
la source
2
Merci. Réponse intéressante. Cependant, il semble y avoir un problème avec mes Emacs (à la fois sur Mac et dans Ubuntu): C-u C-<SPC>il ne semble pas fonctionner. Je ne sais pas si c'est un problème cua-modeou quelque chose. J'ai essayé d'exécuter Emacs avec -qoption, mais rien n'a changé. Des idées?
NVaughan
C'est dommage ... Je trouve ça super ennuyeux, car j'utilise highlight-symbol-mode. J'ai placé le curseur sur une variable et il met en évidence toutes les occurrences. Lorsque je commence à faire défiler, le curseur quitte la variable et toutes les hautes lumières sont perdues. Emacs serait beaucoup mieux si au moins il se comportait comme d'autres éditeurs contemporains en ce qui concerne le défilement.
itmuckel
7

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 position pour y revenir plus tard, vous pouvez utiliser l' anneau de marquage .

Autrement dit, tapez C-<SPC> C-<SPC>pour pousser l'emplacement actuel du point sur l'anneau de repère, puis tapez plus tard C-u C-<SPC>pour définir le point à l'emplacement précédent dans l'anneau de repère.

Kirill
la source
3

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")
Sergey
la source
0

Ce qui suit fonctionne pour moi:

(custom-set-variables
 '(scroll-conservatively 1000)
 '(scroll-margin 3)
 )
l'un des utilisateurs japonais Emacs
la source