Jak sprawić, aby zsh zawsze wyświetlał nazwę zmiennej środowiskowej zamiast ścieżki?

2

Mam zmienną środowiskową ustawioną w folderze moich projektów w następujący sposób:

PROJ=$HOME/projects

Kiedy chcę otworzyć folder projektu, po prostu wpisuję PROJ / nazwa_projektu, a powłoka otwiera katalog, a mój monit wygląda następująco:

~PROJ/project_name

Kiedy otwieram nowe okno tmux, otwiera nową powłokę z pytaniem pokazującym pełną ścieżkę w następujący sposób:

~/projects/project_name

Ale chciałem, aby zachowała nazwę zmiennej w wierszu polecenia.

Jak skonfigurować tmux / zsh (używam również oh-my-zsh), aby nadal używać zmiennej środowiskowej podczas tworzenia nowych okien?

Dimas Kotvan
źródło

Odpowiedzi:

1

Musisz włączyć tę AUTO_NAME_DIRSopcję w konfiguracji Zsh

setopt autonamedirs

to musi się zdarzyć, zanim ustawisz PROJ.

Alternatywnie, jeśli nie potrzebujesz PROJniczego innego niż przełączanie (i wyświetlanie) ścieżek w Zsh , możesz ustawić

hash -d PROJ=$HOME/project

Wyjaśnienie:

Używana funkcja nosi nazwę „Katalogi nazwane statycznie”. Zwykle nazwane katalogi muszą być wywoływane, a ~następnie nazwą parametru powłoki, którego wartość zaczyna się od /, PROJw twoim przypadku.

Jeśli CDABLE_VARSjest włączone (co domyślnie robi Oh-My-Zsh ), ~tak naprawdę nie jest wymagane. Dlatego możesz użyć PROJ/project_namezamiast ~PROJ/project_name. (ale to by się nie udało, gdyby istniał katalog z rzeczywistą nazwą PROJ).

Ponieważ Oh-My-Zsh pozwala AUTO_CDci nawet nie używać cd. Jeśli polecenie nie może zostać wykonane i pasuje do nazwy katalogu, Zsh przejdzie cddo tego katalogu.

Przy wszystkich nazwanych katalogach wyszukiwania mogą odbywać się w dwóch kierunkach

  1. czy dana nazwa wskazuje katalog (np. czy parametr zawiera ścieżkę zaczynającą się od /)?
  2. czy bieżący katalog ma nazwę?

Podczas gdy pierwszy rodzaj wyszukiwania odbywa się automatycznie, gdy argument zaczyna się od ~(lub w niektórych przypadkach i jest włączany CDABLE_VARSnawet bez), drugi rodzaj (używany w wierszu polecenia) wymaga, aby katalog był wymieniony w tabeli skrótów katalogu ( hash -ddla listy tego stołu). W świeżo uruchomionym Zsh ten stół mieszający jest zwykle pusty. Następnie zostaną wypełnione danymi uzyskanymi podczas wykonywania ~rozszerzeń.

W oryginalnej powłoce PROJzostał pomyślnie rozwinięty $HOME/projectsi dlatego tabela skrótów katalogu zawiera teraz PROJ=$HOME/projects(gdzie $HOMEjest zastąpiona rzeczywistą ścieżką katalogu głównego). Zsh może teraz sprawdzić to pod kątem podpowiedzi. Po uruchomieniu tmux uruchamiana jest nowa powłoka, a tablica skrótów katalogu jest ponownie pusta, dlatego nazwa nie jest zastępowana w wierszu poleceń.

Z AUTO_NAME_DIRSwpisem w katalogu tablica skrótów jest tworzona natychmiast, gdy parametr jest ustawiony na wartość zaczynającą się od /(lub jest usuwany, jeśli nowa wartość nie zaczyna się od /). Możesz także dodać ręcznie do tabeli skrótów katalogu za pomocą hash -d NAME=PATH.

Adaefon
źródło
Już działa. Dzięki za pełną odpowiedź.
Dimas Kotvan