Czy istnieje sposób użycia !$
w kontekście rozszerzania parametrów? Pożądanym zastosowaniem, które motywuje to pytanie, jest szybka (w kategoriach naciśnięć klawiszy) zmiana nazwy pliku (np. Zamiast zapisywania nazwy pliku w zmiennej i wykonywania rsvg-convert $svg > ${svg/.svg/.png}
, można zamiast tego użyć rsvg-convert $! > $!{/.svg/.png}
, gdzie $!{/.svg/.png}
jest błędną składnią informując o pożądanym efekcie, gdy dany plik był ostatnim tokenem w poprzednim wierszu, takie polecenie może być często wpisywane szybciej niż alternatywy, takie jak używanie uzupełniania kart w obecności prefiksów udostępniania plików o różnej długości lub kopiowanie i wklejanie nazwę pliku wybierając za pomocą myszy). O ile wiem, w takim kontekście nie ma możliwości zastosowania !$
, ale być może dzięki szykanom można osiągnąć podobny efekt.
Odpowiedz
W zależności od tego, jak wyrafinowane ma być zastępowanie, rozszerzenie historii obsługuje zastępowanie pierwszego wystąpienia ciągu innym. Wystarczy poprzedzić Podstawienie :
jak:
rsvg-convert !$ > !$:s/.svg/.png
można zobaczyć wszystkie modyfikatory historii here
Przynajmniej w emacs-mode bash będzie również umieścić ostatni argument poprzedniego polecenia inline (nie do ekspansji po uruchomieniu polecenia), jeśli naciśniesz alt + .. Więc w tym przypadku może to być najszybszy wpisać:
rsvg-convert
następnie alt + .>alt + . następnie usunąć rozszerzenie to po prostu umieścić w miejscu z alt + BkSp wówczas nowe rozszerzenie: png
Obie wielkie sugestie, dzięki. – user001
Jeśli spojrzeć głębiej modyfikatorów w przykładzie Erica, można również zrobić:
rsvg-convert !$ > !$:r.png
Założenie .svg jest sufiksem oczywiście
Tak naprawdę zmieniłem na używanie 'alt + .' bardziej niż'! $ '. Zamiast późniejszego rozwijania go (zakładając, że jesteś w trybie emacs), wstaw ostatni argument poprzedniego polecenia, całkowicie już rozwinięty. To nie zadziała, jeśli użyjesz innych słów niż ostatnie, lub będziesz w stanie wydać więcej poleceń jak '!: - 2' lub'! Mv: 1' –
@EricRenouf To bardzo przydatne, dziękuję. Nie byłam świadoma 'alt + .', ale jest jeszcze szybsza niż rozszerzony parametr'! $ 'Dla proponowanego zastosowania. – user001