Sélection de texte sans déplacer le curseur

8

Je voudrais agrandir une sélection sans déplacer le point (le curseur) de son emplacement. Je sais que je peux toujours utiliser C-u C-spcpour déménager à l'emplacement précédent, mais je voudrais éviter cela.

Plus précisément, je voudrais effectuer ces deux opérations:

  • Sélectionner tout le texte dans le tampon
  • Ajoutez progressivement les lignes / paragraphes suivants à la sélection

tout en gardant le curseur où il se trouve.

Emacs a-t-il des fonctions interactives pour cela? Sont-ils liés à des raccourcis clavier?

Amelio Vazquez-Reina
la source
Vous pouvez toujours revenir à l'emplacement du point précédent avec C-u C-spc.
Malabarba
1
pouvez-vous me dire s'il vous plaît, quel pourrait être l'intérêt de sélectionner du texte sans déplacer le curseur?
Nsukami _

Réponses:

12

Il existe une réponse distincte pour chacun des points que vous avez énumérés:

  1. La liaison par défaut emacs C-x hsélectionnera tout le tampon, quel que soit l'emplacement du curseur.

  2. Le paquet expansion-région aidera à atteindre le deuxième objectif d'élargir progressivement la sélection. expand-regionsélectionnera également éventuellement la totalité du tampon pendant que vous continuez à étendre la région. Jetez un œil à son readme sur github pour plus d'informations. Ce package est disponible via MELPA.

Voici une brève introduction à ce paquet depuis son github:

Développer la région augmente la région sélectionnée par unités sémantiques. Continuez simplement à appuyer sur la touche jusqu'à ce qu'elle sélectionne ce que vous voulez.

Un exemple:

 (setq alphabet-start "abc def") 

Avec le curseur sur le c, il commence par marquer le mot entier abc, puis développe le contenu des guillemets abc def, puis le guillemet entier "abc def", puis le contenu du sexp setq alphabet-start "abc def "et enfin à l'ensemble sexp.

Je voudrais ajouter cependant que la modification de la sélection de région dans les deux cas déplacera toujours le curseur.

Kaushal Modi
la source
+1, mais notez que C-x hcela déplace le curseur: à la fin du tampon puis au début du tampon. Vous avez besoin de C-u C-spcdeux fois pour revenir là où vous étiez.
ShreevatsaR
9

Si la région s'agrandit, le curseur change de position. En effet, le curseur se trouve toujours à une extrémité de la région.

Si vous sélectionnez tout le texte du tampon ( C-x het utilisez ensuite C-x C-xpour permuter le point et le marquer, de sorte que le curseur se trouve à la fin du texte), puis que vous tapez un peu plus de texte, alors vous avez accompli ce que vous voulez: la région a été étendu pour inclure le texte que vous avez tapé. (Cela suppose que vous ne l'avez pas delete-selection-modeactivé.)

La région a également été désactivée automatiquement, de sorte que le texte de la région n'est plus mis en surbrillance. Pour réactiver la région, faites C-x C-x(que vous pouvez répéter, si vous voulez garder le curseur à l'extrémité du tampon.

A dessiné
la source
4

Comme mentionné, le expand-regionpackage est génial mais je pense aussi qu'il vaut la peine d'être mentionné easy-kill. Il est facturé comme une baisse de remplacement kill-ring-savequi transforme la M-w"copie" normale en une commande de copie dynamique qui agit également comme un préfixe pour enregistrer diverses choses. Par exemple, M-wcopierait la région active, l'URL, l'e-mail ou la ligne actuelle (dans l'ordre de easy-kill-try-things), mais suivi d'un "d", M-w dil copierait de force le défaut actuel.

Il existe également une méthode pour agrandir / réduire la sélection actuelle, un peu comme expand-region, ainsi qu'une commande appelée easy-markpour marquer les régions sans changer votre point actuel.

waymondo
la source
1

Lorsque vous avez copié quelque chose, vous pouvez ajouter du texte à la sélection ultérieurement en utilisant C-M-w:

  • copier une ligne / région
  • faire autre chose
  • vous voulez ajouter sthg au texte copié précédemment: tapez C-M-w( append-next-kill) puis copiez ce que vous voulez ( M-w).
Ehvince
la source
1

Comme indiqué dans d'autres réponses:

C-xh sélectionnera la totalité du tampon; (mark-whole-buffer)

Si vous souhaitez élargir votre sélection, la manière la plus simple serait d'utiliser les mark-*commandes.

Comme exemple de raccourci clavier:

C-M-SPC (mark-sexp)marquera le sexp au point. Si vous répétez la commande, cela ajoutera le sexp suivant à la sélection. Le curseur restera à la position actuelle ou se déplacera au début de l'objet (paragraphe / sexp) pour s'assurer qu'il est entièrement marqué.

Jonathan Leech-Pepin
la source
Prelude est mappé (mark-whole-buffer)à <kbd> Cmd-a </kbd> sur OSX pour conserver une certaine similitude avec la fonctionnalité OSX typique.
Aaron Lee
1

Si vous êtes d'accord avec l'utilisation de la souris, vous pouvez utiliser la sélection secondaire . Appuyez sur Meta, puis cliquez et faites glisser le bouton gauche de la souris ( M-drag-mouse-1). Cela ne déplace pas le point tant que vous ne copiez que du texte visible à l'écran. Vous pouvez copier la sélection secondaire avec M-mouse-3et tirer dessus avec M-mouse-2.

En dehors de la sélection secondaire, vous devrez déplacer le curseur pour sélectionner du texte arbitraire, car le curseur est une extrémité de la sélection (l'autre est la marque).

Si vous souhaitez travailler dans un tampon sans affecter le point, vous pouvez ouvrir le tampon dans une deuxième fenêtre ( C-x 2ouC-x 3 ). Chaque fenêtre a son propre point. Lorsque vous avez terminé de sélectionner et sinon de modifier, fermez la fenêtre ( C-x 0) et revenez à l'autre.

Pour plus de flexibilité, vous pouvez cloner le tampon actuel. Exécutez M-x clone-indirect-bufferou C-x 4 cpour créer également une nouvelle fenêtre affichant ce tampon. Le clone a le même texte que l'original, mais il a sa propre marque et son propre point.

Si vous avez déjà tué du texte, vous pouvez ajouter plus de texte en tapant C-M-w( append-next-kill) puis en utilisant une commande kill. Par exemple, C-M-w C-kajoute la queue de la ligne actuelle au texte qui se trouve déjà à l'avant de l'anneau de suppression et supprime le texte copié. C-M-w M-wajoute la sélection au texte à l'avant du kill ring (contrairement à M-wce qui pousse le texte sélectionné en tant que nouvelle entrée sur le kill ring).

Gilles 'SO- arrête d'être méchant'
la source