Quelle est l'utilité de «point-and-mark d'échange»?


16

La exchange-point-and-markcommande est liée à C-x C-x, mais je ne peux penser à aucun cas d'utilisation qui la rendrait digne d'une liaison aussi importante.

Comment puis-je utiliser le exchange-point-and-markpour améliorer ma technique de montage?

Réponses:


19

Je peux penser à deux cas: réactiver la région et ajuster la taille de la région.

J'utilise le plus souvent cette liaison pour réactiver la région après avoir exécuté une commande qui la désactive, ou faire quelque chose qui définit la marque et déplace le point sans activer la région.

Par exemple, faites un C et recherchez quelque chose. Appuyez sur RET pour quitter la recherche, puis sur Cx Cx pour tout marquer à partir de l'endroit où vous avez commencé la recherche.

Un autre exemple que je fais beaucoup lorsque je veux inclure un exemple d'élisp dans une réponse StackExchange:

  1. Marquez le morceau de code que je veux copier.
  2. Appuyez sur Cu Cx TAB pour indenter le code de 4 espaces. De cette façon, il sera rendu sous forme de code ici sur le site. Cette étape désactive la région.
  3. Appuyez sur Cx Cx pour réactiver la région, puis sur Mw pour la copier dans le presse-papiers afin que je puisse la coller dans ma réponse StackExchange.

L'autre cas est lorsque vous marquez une région et que vous souhaitez l'agrandir / la réduire. Dans ce cas, il est pratique de pouvoir sauter à «l'autre extrémité» de la région, la déplacer, puis reculer. Si la région est déjà active, le fait de frapper Cx Cx la laissera active, vous permettant de déplacer l'une ou l'autre extrémité.


17

Demandez à Emacs: C-h r i exchange-point-and-mark RETou mieux encore C-h r i C-x C-x RET. Cela vous amène aux informations ci-dessous.

Voici ce que dit le manuel Emacs, node Setting Mark en réponse à votre question:

C-x C-xest utile lorsque vous êtes satisfait de la position du point mais que vous souhaitez déplacer l'autre extrémité de la région (où se trouve la marque) . En utilisant C-x C-xune seconde fois, le cas échéant, la marque met à la nouvelle position avec le dos point à sa position d' origine. Normalement, si la marque est inactive, cette commande réactive d'abord la marque là où elle a été définie pour la dernière fois, afin de s'assurer que la région reste en surbrillance. Cependant, si vous l'appelez avec un argument préfixe, il laisse la marque inactive et la région non mise en surbrillance; vous pouvez l' utiliser pour sauter à la marque d'une manière similaire à C-u C-<SPC>.

Et voici ce qu'il en dit dans le nœud Disabled Transient Mark :

Si vous transient-mark-modedésactivez [ ], Emacs passe à un autre mode de fonctionnement:

  • La définition de la marque, avec des commandes comme C-<SPC>ou C-x C-x, ne met pas la région en surbrillance. Par conséquent, vous ne pouvez pas dire en regardant où se trouve la marque; Vous devez vous rappeler.

    La solution habituelle à ce problème consiste à définir la marque, puis à l'utiliser rapidement, avant d'oublier où elle se trouve. Vous pouvez également vérifier où se trouve la marque en utilisantC-x C-x , qui échange les positions du point et de la marque - voir Définition de la marque .

Lorsque le mode Transient Mark est désactivé, vous pouvez l'activer temporairement à l'aide de C-<SPC> C-<SPC>ou C-u C-x C-x.

et:

C-u C-x C-x Échangez le point et la marque, activez la marque et activez temporairement le mode de marque transitoire, jusqu'à ce que la marque soit ensuite désactivée. (Il s'agit de la C-x C-xcommande exchange-point-and-mark,, avec un argument préfixe.)


8

Je l'utilise lorsque j'ai perdu une sélection en raison d'une opération qui l'a supprimée et je veux restaurer la sélection. Un tel scénario serait:

  1. Sélectionnez un rectangle.
  2. Tue le.
  3. Annuler la suppression du rectangle.
  4. C-x C-x pour restaurer la sélection dans un rectangle.

Cela se produit lorsque je veux faire une sauvegarde ad hoc d'une zone sélectionnée et expérimenter sur la copie, comme, par exemple, je veux faire une recherche et un remplacement, mais je ne peux pas penser à un moyen de le faire il d'une manière qui ne détruit pas un texte qui doit rester, donc je le retirerai plus tard de la copie.


8

Les autres réponses se concentrent sur l'utilité de C-x C-xquand transient-mark-modeest actif. Mais C-x C-xest antérieur transient-mark-modeet utile indépendamment de celui-ci.

Le rôle principal de C-x C-xest de permuter le point et le marquer. Cela est utile lorsque vous modifiez deux points dans un seul tampon et que vous ne voulez pas, pour une raison quelconque, diviser la fenêtre actuelle. Faites un peu d'édition, définissez une marque, déplacez-vous vers un autre point dans le tampon, faites un peu d'édition C-x C-x, faites un peu d'édition à l'emplacement précédent C-x C-x, faites un peu plus d'édition, ad nauseam. (Si vous ne prévoyez pas de revenir au deuxième point, cela C-u C-SPCpeut être plus intuitif. Recherchez l' anneau de marque dans le manuel Emacs.)

Lorsqu'il transient-mark-modeest désactivé, il C-x C-xa un autre objectif important: il vous permet de savoir où se trouve la région. C-x C-x, aperçu rapide au point, C-x C-xencore une fois.

(Et au cas où vous vous poseriez la question - oui, certains d'entre nous préfèrent toujours utiliser Emacs avec transient-mark-modedésactivé.)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.