Je voudrais améliorer un peu mon flux de travail avec Bash, et je réalise que je veux souvent exécuter la même commande sur un exécutable différent.
Quelques exemples:
Git (où je voudrais changer rapidement le deuxième mot):
git diff foo/bar.c
git checkout foo/bar.c
Cat / rm (où seul le premier mot doit être changé):
cat foo/is/a/very/long/path/to/bar.c
rm foo/is/a/very/long/path/to/bar.c
Je sais que je peux frapper Ctrl+ apuis Delpour enlever le premier mot, mais je me demande s'il y a un moyen plus rapide de le faire.
Réponses:
!$
se développe jusqu'au dernier mot de votre commande précédente.Alors tu pourrais faire:
ou:
Il est arrivé que vos exemples ne répètent que le dernier mot, de sorte que tout
!$
a bien fonctionné. Si vous vouliez répéter un grand nombre d'arguments et que vous souhaitiez simplement modifier le premier mot, vous pouvez utiliser le même mot!*
, qui s'étend à tous les mots de la commande précédente, à l'exception du zéro.Voir la section "EXTENSION DE L'HISTORIQUE" de la
bash
page de manuel. Il y a beaucoup de flexibilité là-bas.la source
!$
vous n'avez pas de contrôle visuel complet de la ligne que vous exécutez . Cela peut parfois être dangereux. Surtout si vous vous exposez à une erreur Cela prend duhistory
quoi élargir. Donc, si vous écrivez la dernière commande avec un espace vide au début, cette commande ne se terminera probablement pas dans l'historique. Lorsque vous exécuterez votre nouvelle commande avec!$
le shell, les paramètres ne seront pas repris de la dernière ligne de commande tapée, mais uniquement du dernier de l'historique. Voici les mêmes mots.#
ou uneecho
afin que je puisse voyez-le et il entre dans l'histoire pour que je puisse le récupérer immédiatement et le réexécuter sans le préfixe de désactivation.Ctrl+ apour aller au début de la ligne, puis Alt+ dpour supprimer le premier mot.
la source
Meta+D
n'est valide que siemacs
est activé (viaset -o emacs
ou simplement par défaut). Cela ne fonctionnera pas dans l' éditeur inférieur -mode ou s'ilemacs
est désactivé.C-a
etM-d
sont beaucoup plus rapides à taper si vos mains sont déjà en position de frappe.cat
et comparez ce que vous obtenez lorsque vous appuyez sur Accueil (^[[H
ici) et sur Ctrl + a (^A
).Je ne sais pas si ce serait effectivement plus rapide ou pas, mais voir cet article, en particulier le point # .3:
la source
Alt+.
Si vous avez seulement besoin de répéter la dernière partie d'une des commandes précédentes, vous pouvez utiliser Alt+ .pour coller le dernier argument extrait de la dernière ligne de l'historique.
Si vous appuyez plus d'une fois, ce que vous venez de coller sera remplacé par le dernier argument de la ligne avant ...
Par exemple, si les 2 dernières commandes étaient:
Dans le shell, j'écris
rm
et j'appuie sur Alt+, .il apparaîtra:si j'appuie à nouveau Alt+ .il apparaîtra à la place
etc...
la source
bash
. BTW Êtes-vous sûr que vous utilisez bash en tant que shell ?≥
En plus de @jjlin answer, les conseils suivants pourraient vous intéresser:
$_
contient le dernier argument de la ligne de commande précédentePour plus d'informations à ce sujet, consultez la section "Noms des commandes Readline" de la
bash
page de manuel.par exemple:
la source
n
mots de la commande, avecn = 1
dans le premier exemple etn = 2
dans le second. La réponse de jjlin montre comment supprimer le premier mot (et en réappliquant le raccourci, supprimer jusqu'àn
mots). Votre réponse répertorie quelques raccourcis Bash (qui sont en effet utiles), mais aucun d’eux n’est un moyen efficace de supprimer les premiersn
mots.$_
paramètre fonctionnerait probablement s'il n'y avait qu'un seul argument (c'est-à-dire sin = m - 1
oùm
est le nombre total d'arguments). Le reste des raccourcis est cependant sans rapport avec la question.Si vous maîtrisez vi, vous pouvez activer les liaisons vi dans bash (la plupart des shells?) En utilisant la commande
set -o vi
. Ensuite, vous pouvez utiliser les touches vi normales pour éditer votre commande. Dans votre premier exemple, vous pouvez ^wcwsupprimer "diff", puis le changer en caisse.Il ne vaut peut-être pas la peine d'apprendre les raccourcis clavier vi juste pour éditer la ligne de commande, mais si vous les connaissez déjà, c'est un booster de productivité.
la source
set -o vi
ainsi que j'ai vécu! Je le fais même dans mes invites bash aussi.bindkey -v
pour zsh.Esc
0
c
w
Il y a beaucoup de façons de peler ce chat!
Pour remplacer une chaîne spécifique,
^old^new^extra
prenez votre commande précédente, remplacezold
parnew
, et ajoutezextra
. Vous pouvez vous arrêter aussi tôt que vous le souhaitez. Par exemple,^old
va remplacerold
par la chaîne vide et ajouter la chaîne vide (essentiellement supprimerold
et ne plus rien faire).Variante particulièrement utile de ceci:
Pour remplacer un mot spécifique, vous pouvez utiliser
!m:n-p
pour faire référence à des motsn
viap
la commandem
(utilisez des nombres négatifs pour compter à partir de la commande en cours). Vous pouvez omettre la-p
partie pour faire référence à un seul mot et omettre la:m-p
partie pour faire référence à une commande entière. Des formes spéciales!!
pour!-1
,!$
pour le dernier mot de la commande précédente et!*
pour les arguments (tous sauf les mots0
) de la commande précédente sont assez pratiques.J'utilise souvent les deux; zsh est particulièrement agréable ici, car cliquer sur onglet élargira le contenu cryptique pour vous assurer que vous avez bien compris.
Il y a aussi tellement de façons de faire cela avec l'édition en ligne. Lisez sur les raccourcis clavier de votre shell.
la source
La plupart des programmes terminaux supportent ...
<Up-Arrow>
si nécessaire pour afficher à nouveau l'une des lignes de commande précédentes de l'historique.<Down-Arrow>
autant de fois que nécessaire pour avancer dans la liste d'historique.<Left-Arrow>
au besoin pour déplacer le curseur à la fin du deuxième mot.<Backspace>
au besoin pour effacer le deuxième mot.<Right-Arrow>
/<Left-Arrow>
au besoin pour vous repositionner pour d'autres modifications.<RETURN>
pour exécuter la commandeSi la ligne de commande souhaitée n'est pas récente, effectuez une recherche inversée
<Ctrl-r>
comme décrit à la question ...Existe-t-il un moyen d'utiliser ctrl-r après avoir tapé une partie de la commande dans bash?
Puis éditez via les flèches au besoin.
la source
Ce que je fais (Ubuntu / bash):
1)
Arrow up
hé pour revenir à la commande précédente2)
Home
touche pour revenir au début3) Modifiez la commande si nécessaire.
Idiot-proof et particulièrement utile pour les commandes multilignes.
la source