Nous pouvons utiliser les flèches haut et bas pour naviguer dans l'historique des commandes.
Dans certains IDE, tels que Matlab, si nous saisissons quelque chose, puis que nous appuyons sur les touches fléchées, nous ne faisons défiler que les commandes d'historique commençant par ce que nous avons entré. C'est vraiment pratique, mais dans un terminal shell, cela ne fonctionne pas.
Est-il possible d'obtenir une fonction similaire dans un terminal shell? Et d'autres astuces pour améliorer l'efficacité d'utilisation du terminal?
fish
;)\e[5~
et\e[6~
, l' utilisation\e[A
,\e[B
.Réponses:
Ce que vous cherchez, c'est CtrlR.
Tapez CtrlRpuis tapez une partie de la commande souhaitée. Bash affichera la première commande correspondante. Continuez à taper CtrlRet bash fera défiler les commandes correspondantes précédentes.
Pour rechercher dans l'historique, tapez CtrlSplutôt. (Si CtrlScela ne fonctionne pas ainsi pour vous, cela signifie probablement que vous devez désactiver le contrôle de flux XON / XOFF: pour cela, exécutez
stty -ixon
.)Ceci est documenté sous "Recherche" dans
man bash
.la source
Ctrl-Q
pour quitter l'état gelé, si vous avez déjà frappéCtrl-S
sans désactiver d'abord le contrôle de flux et bloqué votre terminal.Placez-les dans votre
~/.inputrc
:Ceux-ci font Page Upet Page Downse comportent comme vous le souhaitez. (Certaines distributions l'ont déjà configuré pour vous.) Personnellement, je trouve ces moyens plus pratiques que Ctrl+ Rou
history
.la source
~/.inputrc
ou/etc/inputrc
ou le fichier référencé par la variable d'environnement$INPUTRC
est le fichier de configuration de l'édition de ligne de toutes les applications utilisant readline, y compris bash (votre shell). Il possède certaines fonctionnalités d'édition de ligne intégrées, notamment les deux suivantes: dans la page de manuel de bash, recherchez l'un de ces mots clés pour en savoir plus.\e[5~
/\e[6~
sont les séquences d'échappement générées par les touches Page Up / Down dans la plupart des émulateurs de terminaux; pour le voir, lancez lacat
commande puis appuyez sur ces touches (l'octet d'échappement est représenté dans le terminal sous la forme^[
, dans inputrc as\e
).echo $INPUTRC
est vide. J'utilise Ubuntu 14.04"\e[A": history-search-backward
"\e[B": history-search-forward
En plus de l’historique de ^ i / search:
alt.insère le dernier "mot" de la commande précédente au curseur. Répétez cette opération pour obtenir le dernier mot des commandes plus anciennes. (Mais notez qu'une fin
&
compte comme le dernier mot pour les commandes d'arrière-plan).C'est super pratique pour
mkdir foo
,cd
alt-dot. Encore plus vite que la flèche haut, ^ a, alt-d (supprimer mot avant),cd
.Pour obtenir l’avant-dernier mot, utilisez
esc
-
2
alt+.
(c’est -à- dire, utilisez un argument numérique de style emacsalt+.
. Les décomptes négatifs à partir de la fin, les décomptages positifs à partir du début.) Mais c’est généralement plus difficile que ça vaut la peine; à un moment donné, il est plus rapide d’atteindre la souris et de copier / coller, ou encore une flèche vers le haut et une partie de celle-ci (voir ci-dessous).Si votre terminal est bien configuré / correctement, ctrl-gauche et ctrl-droite iront en arrière / en avant par mots. Sinon, au moins, alt-b et alt-f feront la même chose.
ctrl- / est une annulation. Vous pouvez utiliser la répétition automatique pour supprimer des mots de manière beaucoup plus efficace si vous pouvez annuler un dépassement de temps.
Le kill / ring, qui fonctionne comme dans Emacs, permet un mélange / une correspondance plus puissant des commandes. Ctrl-y pour coller le dernier ctrl-w / ctrl-u / ctrl-backspace / alt-d. alt-y pour parcourir le texte ancien tué.
Plusieurs ctrl-w ou quoi que ce soit dans une rangée font sur l'entrée kill-ring. Utilisez les flèches gauche et droite ou quelque chose d'autre pour séparer l'entrée si vous souhaitez supprimer deux éléments et ne les coller que plus tard.
En combinant tous ces éléments, vous pouvez
alt+r
pour rétablir sa configuration antérieure avant d'en supprimer une partie.>
pour aller à la fin de l’histoire (c’est-à-dire la flèche vers le bas), pour revenir à la commande dans laquelle vous étiez.Autres conseils d'utilisation interactive:
Activer
shopt -s globstar
, donc vous pouvez faire**/*.c
(récursif, y compris le répertoire en cours). Parfois pratique pour une utilisation interactive, mais en généralfind -name '*.c' -exec foo {} +
c'est mieux.Si vous écrivez des scripts bash, il vous sera utile d'
shopt -s extglob
activer également vos shells interactifs. Vous trouverez parfois une utilisation pour des choses comme*.!(c|h)
faire correspondre des fichiers qui ne se terminent pas par .c ou .h.Trouvez des alias que vous aimez pour
ls -l
,less
et tout ce que vous faites beaucoup. (cp -i
,mv -i
etrm -I
sont gentils. Ne prenez pas l'habitude de compter sur eux pour faire une requête sélective. GNU rm's - Je demande une fois tous les arguments.)J'aime
alias m=less
(m pour "plus"). J'ailess
configuré avec ,et .lié au fichier précédent / suivant (lesskey
). La valeur par défaut est une séquence de touches multiples qui ne peut pas être utilisée avec la répétition automatique.J'aime tout faire à l'intérieur de l'écran GNU. Je trouve qu'il est plus facile de garder une trace des fenêtres d'écran numérotées qu'un chargement d'onglets dans Konsole (ou tout autre émulateur de terminal que j'ai essayé). Si vous ne le savez pas déjà
screen
, apprenez tmux car il est plus récent et moins cruel.Pour obtenir quelque chose comme la fonctionnalité d'ouvrir un nouveau shell avec le même cwd qu'un autre shell, j'utilise un hook personnalisé pour cd / pushd / popd qui me permet de créer un cd dans le répertoire utilisé par
cds 8
mon shell dans la fenêtre d'écran 8. Cela fonctionne même pour les shells en dehors de la session d'écran, à condition qu'il n'y ait qu'une seule session d'écran.la source
gnome-terminal
Ubuntu 14.04, avant de passer à KDE. L'option appropriée se trouve dans les paramètres de votre terminal, préfixe-esc par rapport à bit fort, et peut-être d'autres paramètres. Certaines ne fonctionnent pas parfaitement pour moi avec ssh. (par exemple, ctrl gauche / droite mugge le code d'échappement de la touche fléchée, et j'apparais5D
littéralement)Ajoutez les lignes suivantes à votre
~/.inputrc
Ceci est similaire à la réponse de egmont, mais au lieu d'utiliser Page Up et Page Down, il utilise les séquences d'échappement pour Arrow Up et Arrow Down. Cette méthode est beaucoup plus pratique à utiliser sur un Mac.
la source
J'ai toujours tendance à configurer mes machines avec une valeur HISTSIZE élevée afin qu'il conserve une liste d'historique plus longue, ainsi que HISTTIMEFORMAT avec la valeur d'horodatage afin que je puisse voir à quel moment la commande a été exécutée.
la source
Le moyen que j'utilise habituellement est de combiner la
history
commande avecgrep
C'EST À DIRE:
Cela affichera un historique numéroté des commandes que vous avez tapées contenant cette commande, vous pouvez ensuite utiliser:
refaire cette commande.
C'EST À DIRE:
history | grep history
suivi par:
!571
va répéter
history | grep history
la source
!
substitution d'historique est moins sûre.J'ai utilisé quotidiennement 4 astuces (et quelques autres) dans mon terminal bash:
Exécute la dernière commande:
!!
Exécutez la commande N de l'historique:
!N
Imprimer la dernière commande en commençant par le préfixe de l'historique:
!prefix:p
Exécutez la dernière commande en commençant par le préfixe de l'historique:
!prefix
la source
Si vous pouvez l'utiliser à la
zsh
place debash
vous, utilisez oh-my-zsh pour cela.Il contient la flèche vers le haut dans la navigation dans votre historique de commandes. Il permet également cette même navigation lorsque vous avez déjà tapé du texte (comme Mathlab).
edit: Il contient également d'autres éléments axés sur les développeurs, tels que des alias et des thèmes. Ces extras rendent la distribution plus grande et plus complexe à utiliser.
https://github.com/robbyrussell/oh-my-zsh
la source
oh-my-zsh
contient des tonnes de choses. Vous pourriez aussi bien dire: Cette fonctionnalité exacte est incluse dans cette distribution, lorsque vous avez simplement besoin d’un paramètre ou d’une application spécifique.Ajoutez l'alias suivant à ~ / .bashrc
Utilisation:
h fire
me donnera une liste de commandes contenant du feu . ouh ^fire
va me donner une liste de commandes commencent par le feu .Ceci est utile lorsque je souhaite afficher une série de commandes en même temps.
Au fait,
'"'"'
c'est moche, mais je ne pouvais pas trouver d'autres moyens d'éviter les guillemets simples.la source
h="history | awk '{\$1=\"\"; print}'
devrait fonctionner. alternativement, créez une fonction et appelez-la.