Je tapais juste quelque chose comme:
mv foo/bar/poit/zoid/narf.txt
et soudainement réalisé, bon sang, je dois taper de grandes parties de ce paramètre à nouveau
mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt
Même avec tabcompletion, tout à fait une douleur. Je sais que je peux copyr coller le paramètre par la souris en sélectionnant le text et middleclick mais ce n'est pas assez bon. Je veux restr sur le keyboard.
Alors y a-t-il un moyen de copyr coller le paramètre actuel de la ligne en utilisant le keyboard?
Si j'ai planifié à l'avance, j'utilise l' extension d'accolade . Voici une autre approche utilisant les raccourcis keyboard de readline
par défaut:
mv foo/bar/poit/soid/narf.txt
: démarrer unix-word-rubout
pour supprimer foo/bar/poit/soid/narf.txt
yank
, espace, yank
nouveau pour get mv foo/bar/poit/soid/narf.txt foo/bar/poit/soid/narf.txt
backward-kill-word
deux fois pour supprimer le dernier narf.txt
troz.txt
: saisissez la partie de la queue qui est différente Si vous passez trop de time à utiliser le shell bash
, je vous recommand de lire périodiquement une list des raccourcis par défaut et d'en choisir quelques-uns qui semblent utiles à apprendre et à incorporer dans votre routine. Le chapitre 8 du manuel bash
est un bon sharepoint départ. Connaître les raccourcis peut vraiment augmenter votre efficacité.
L'expansion de l'historique fonctionne également sur la command actuelle, en utilisant le désignateur d'événement !#
. Combinez ceci avec le désignateur de mot pour le dernier argument – $
– pour get le paramètre que vous venez de taper. Et vous pouvez utiliser tous les modificateurs habituels, par exemple si vous renommez un file dans un directory éloigné, vous pouvez simplement taper:
mv path/you/do/not/want/to/type/twice/oldname !#$:h/newname
Comme dans votre exemple, vous pouvez utiliser la prochaine construction:
mv foo/bar/poit/zoid/{narf.txt,troz.txt}
ou même (comme suggéré Ansgar Esztermann ):
mv foo/bar/poit/zoid/{narf,troz}.txt
au lieu de taper / copyr une longue adresse deux fois.
Jouer autour je l'ai fait fonctionner:
mv foo/bar/poit/zoid/narf.txt
Appuyez sur Entrée
pour stocker le dernier paramètre.
Maintenant, utilisez ↑ pour get le dernier tapé dans la ligne de return. Entrez un espace et utilisez le dernier paramètre utilisé:
Alt + .
Je déteste provoquer une erreur, mais il fait le travail dans ce cas d'utilisation.
Vous pouvez facilement utiliser des variables:
a=test.csv ; cp $a $a.bak
Ou dans votre cas (note onglet concours fonctionne pour la part):
a=foo/bar/poit/zoid/ ; mv ${a}narf.txt ${a}troz.txt
Une solution interactive courte solution en deux étapes:
1. tapez: echo foo/bar/poit/zoid/narf.txt
Cela rend foo/bar/poit/zoid/narf.txt
avaylable pour l' Alt-. raccourci dans bash.
2. tapez: mv
et appuyez sur Alt-. , Espace , Alt-.
Vous obtiendrez mv foo/bar/poit/zoid/troz.txt foo/bar/poit/zoid/troz.txt
. Maintenant vous pouvez facilement modifier le dernier mot.
Un outil, qui pourrait venir (très) utile est:
Midnight Commander – un gestionnaire de files s'exécutant dans la console. Il vous permet de copyr les noms de files et les paths de directorys de manière interactive dans la command line. Midnight Commander vous montre donc 2 panneaux (gauche et droite) qui listnt le contenu de différents directorys.
Un petit guide:
C'est de loin le moyen le plus rapide que j'ai trouvé jusqu'ici – après s'être habitué aux raccourcis.
Pour zsh
, je trouve les raccourcis keyboard suivants utiles.
# Bind alt-m to insert previous word from the current line bindkey '^[m' copy-prev-shell-word # Bind alt-k to kill word before cursor in vi-style bindkey '^[k' vi-backward-kill-word
J'ai donc appuyé sur Alt – M pour répéter le dernier argument puis Alt – K si je veux supprimer des parties de la fin d 'un path.
Voici une reference utile à certains des comportements que vous pouvez mapper.
Utilisez la même chose dans le {,} "duplicateur". C'est à dire:
git tag -m {v,v}1.0.1 # same as git tag -m v1.0.1 v1.0.1
J'ai ceci dans mon ~/.inputrc
:
"\ej":"!#:$\e^"
!#
est la ligne courante,: :$
est le dernier mot, et \e^
est history-expand-line
.