Comment retransmettre l'historique de recherche avec la commande reverse-i-search (ctrl + r)?

12

Dans le manuel de lecture

# man readline

Ce qui suit décrit comment rechercher en arrière et en avant.

reverse-search-history (C-r)
Search backward starting at the current line and moving `up' through the history as necessary.  This is an incremental search.

forward-search-history (C-s)
Search forward starting at the current line and moving `down' through the  history  as  necessary.   This  is  an  incremental search.

Lorsque j'appuie sur ctrl + r et que je tape "apt-get", je peux faire un historique de recherche inversée en appuyant continuellement sur ctrl + r. Mais ensuite, j'appuie sur ctrl + s et le terminal ne va pas de l'avant. Suis-je en train de faire quelque chose de mal?

Quelle clé représente également le préfixe Meta "M-"?

user784637
la source

Réponses:

15

La séquence C-sest extraite du pilote de terminal, comme vous pouvez le voir sur

stty -a | grep '\^S'

Pour libérer la séquence pour une utilisation par readline, définissez la séquence du terminal d'arrêt sur une autre séquence, comme par exemple

stty stop ^J

ou supprimez-le complètement avec

stty stop undef

Après cela C-sfonctionnerait dans le terminal donné.

Configurez-le ~/.bashrcpour le faire fonctionner dans chaque terminal.

La M-séquence signifie la Altclé, comme déjà indiqué.

enzotib
la source
^ J est un bon choix car pour stop, il n'est utilisé pour rien d'autre
plaques de cuisson
3

En plus d'attribuer un caractère "stop" TTY différent comme suggéré ci-dessus, vous pouvez le supprimer entièrement si vous ne prévoyez pas de l'utiliser (j'ai tendance à ne pas le faire), comme ceci:

$ stty stop undef

Ensuite, readline peut utiliser control-s pour la recherche directe et vous n'obtiendrez aucun comportement étrange en raison de l'ajout d'un nouveau caractère d'arrêt.

ntnt
la source
C'est une bien meilleure façon.
A.Danischewski
1

forward-search-history (Cs) ne fonctionne pas (bien qu'il soit dans la page de manuel).

'M-' représente le modificateur de touche Alt.

Gödel
la source
1
Pas de correction de la C-spartie, voir ma réponse.
enzotib
0

Veuillez ne pas utiliser:

stty stop ^J

mais

stty stop ^P

ou autre chose, car cela ^Jcrée de gros problèmes avec ssh. (Je ne sais pas pourquoi de toute façon.) Après ma connexion Enteret la barre oblique inverse ne fonctionnait pas. ou je devais taper:

stty sane 
export TERM=linux

avant de taper

ssh root@192...

donc

stty stop ^P

résolu les deux problèmes en même temps.

xerostomus
la source
0

Vous pouvez désactiver le contrôle de flux XON / XOFF:

stty -ixon

dans votre ~ / .profile ou similaire, alors Ctrl + S sera reconnu.

Exemple

Steven Penny
la source
0

Pour basculer vers l'avant lors de l'utilisation de la recherche inversée (avec la commande Ctrl-R):

  1. Ouvrez votre fichier .bashrc:
    sudo gedit ~/.bashrc

  2. ajouter cette ligne (la lettre "f" peut être remplacée par une autre non encore utilisée par le système)

    bind '"\C-f": forward-search-history' 
    
  3. Fermez votre fichier et mettez à jour votre .bashrc (ou ouvrez un autre terminal) avec la commande:
    source ~/.bashrcou. ~/.bashrc

MAINTENANT, VOUS POUVEZ AVANCER DANS L'HISTOIRE AVEC LE RACCOURCI: Ctrl + f

Travailler sur Ubuntu 18.04 LTS

Franklin TN
la source
0

Notez que j'avais utilisé

stty stop ^J
stty -ixoff

dans .bashrc pour activer la recherche vers l'avant et désactiver le message ennuyeux "La sortie a été suspendue en appuyant sur Ctrl + S. Appuyez sur Ctrl + Q pour reprendre" dans Konsole lorsque ctrl + s a été enfoncé, mais les deux commandes ont rompu individuellement l'intégration de Konsole dans Dolphin ( le raccourci "F4") de la façon dont j'ai dû faire deux fois ctrl + c pour le faire fonctionner, et les commandes automatiques "cd" n'étaient pas injectées lors de la navigation graphique.

Je préfère donc maintenant:

stty stop undef
stty -ixon

Cela a le même effet, un tout semble fonctionner comme prévu;)

NoGa
la source