Comment puis-je me débarrasser de la chaîne «par défaut» (dernière utilisée) dans certaines fonctions emacs?

12

J'ai le problème suivant: lorsque j'utilise 'Cx rt' (string-rectangle), je suis invité à entrer une chaîne, pour remplacer le rectangle sélectionné. Disons que je tape ";;" (pour commenter le rectangle). Cela fonctionne très bien, mais la prochaine fois que j'appellerai la même fonction et que je veux remplacer par rien (chaîne vide), je ne peux pas le faire, car il y a une chaîne "par défaut" ;; " que j'ai déjà utilisé, et si je viens de taper, la commande utilisera ce ";;" chaîne au lieu d'une chaîne vide. Comment le définir sur une chaîne vide?

Problème similaire que j'ai eu avec certaines fonctions de recherche / remplacement. Fondamentalement, quand il se souvient de la dernière chaîne que j'ai utilisée et la définit par défaut, comment puis-je "entrer" une chaîne vide à la place?

ÉDITER :

Kill-rectangle, mentionné par YoungFrog résout le problème spécifique, mais j'avais une autre chose à l'esprit: fondamentalement, dans quelle fonction emacs se souvient de la dernière valeur que vous avez entrée et l'utilise comme "par défaut" lorsque vous appuyez simplement sur entrée, vous devriez être capable d'effacer ce "défaut" à tout ce qui était réel par défaut avant la première utilisation de la fonction. Voici un autre exemple:

En mode dired, si vous 'Mx rgrep' il vous demande 3 entrées:

1) Que rechercher: tout ce que vous entrez ici sera utilisé par défaut la prochaine fois que vous utiliserez rgrep. Comme quelqu'un l'a souligné, cela n'a aucun sens de rechercher une chaîne vide, donc effacer cette valeur "par défaut" n'est en effet jamais nécessaire, je suppose.

2) Ensuite, il demandera dans quels fichiers rechercher. Son véritable défaut est "tous" les fichiers. Si j'entre * .txt et recherche, la prochaine fois que j'utilise rgrep, * .txt sera utilisé comme "défaut". Maintenant, je souhaite effacer ce "default" * .txt, et revenir à sa valeur par défaut d'origine, "all", tout comme je voulais effacer ";;" "default" dans la fonction string-rectangle à sa vraie chaîne vide par défaut.

Bien sûr, ce problème spécifique pour tous les fichiers pourrait probablement être résolu en tapant *? Mais ce problème général subsiste potentiellement avec d'autres commandes qui se souviennent de la dernière valeur utilisée.

3) Il demandera ensuite le répertoire de base, pas de problème ici.

Donc, comme je le vois, chaque fois qu'emacs essaie de m'aider en se souvenant de ma dernière valeur utilisée dans une commande (que je trouve très utile la plupart du temps), il devrait y avoir un moyen d'effacer cette valeur utilisée comme si je ne l'ai jamais utilisée. commande avant.

PS Je suis encore nouveau sur emacs, et peut-être que les fonctionnalités dont j'ai besoin ne sont pas nécessaires, car il y a toujours une solution?

mation
la source
1
Je crois que c'est difficile, car la lecture et l'échange de la valeur par défaut pour la chaîne vide ne se produisent pas dans la même fonction dans la plupart des cas. Dans ce cas spécifique delete-rectangleest une option.
politza
Si vous avez l'intention d'insérer des espaces dans le rectangle sélectionné, vous pouvez utiliser clear rectangle.
Kaushal Modi
Si vous souhaitez simplement bloquer les commentaires / décommentations, pourquoi ne pas les utiliser comment-dwim? Entrer également une chaîne "vide" pour la recherche n'aurait pas de sens, mais vous pouvez entrer une chaîne vide pour la pièce de remplacement. Je suis curieux de voir plus d'exemples où la saisie d'une chaîne vide pourrait être nécessaire à un utilisateur.
Kaushal Modi
3
Je viens de regarder rapidement votre description, mais il semble qu'il puisse y avoir un problème avec la conception de la commande string-rectangle. Chaque fois qu'une chaîne vide a un sens en tant qu'entrée possible, il devrait y avoir un moyen de la saisir, par opposition à l'acceptation d'une valeur par défaut. Regardez attentivement le doc de la commande (et son code source, si vous êtes à l'aise avec cela), pour voir s'il y a en fait un défaut de conception ici. Si vous pensez qu'il est, alors s'il vous plaît le signaler: M-x report-emacs-bug.
Drew
Pour 2), vous pouvez littéralement entrer all, ce qui est légèrement différent de *: il correspond .*aussi.
npostavs

Réponses:

3

N'utilisez pas C-x r t( string-rectangle), utilisez C-x r k( kill-rectangle) à la place.

YoungFrog
la source
1
Je n'ai répondu qu'à l'exemple spécifique donné parce que l'OMI le cas général (la question dans le titre) n'admet aucune réponse (générale). Pourtant, je tiens à mentionner que C-j(au lieu de RET) pourrait aider dans certains cas, par exemple en mode ido.
YoungFrog
3

Dans le cas général, ce que vous voulez ne peut pas être atteint. Cela est dû au fait que plusieurs utilitaires et modes dans Emacs stockent leur historique de lecture dans différentes variables, pas dans un seul emplacement. Vous pouvez définir manuellement ces variables d'historique sur nil(pour votre C-x r texemple, (setq string-rectangle-history nil)), mais elles ne sont pas mises à l' échelle. Il n'est pas facile non plus de découvrir les noms des variables d'historique sans lire le code.

Faried Nawaz
la source