2017-06-11 18 views
5

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.

+2

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' –

+0

@EricRenouf To bardzo przydatne, dziękuję. Nie byłam świadoma 'alt + .', ale jest jeszcze szybsza niż rozszerzony parametr'! $ 'Dla proponowanego zastosowania. – user001

Odpowiedz

5

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

+0

Obie wielkie sugestie, dzięki. – user001

2

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