„Zakładki” do bash


24

Poruszanie się po kilku warstwach zagnieżdżonych katalogów jest często uciążliwe. W przeglądarce Firefox jest to łatwe, ponieważ mają zakładki. Więc, co chciałbym zrobić, aby utworzyć zakładki do pliku, wpisz:

$ go --add classes "repo/www/public/util/classes"

Następnie, aby przejść do tego katalogu, wpisałbym:

$ go classes

Wcześniej używałem dowiązań symbolicznych, aby osiągnąć coś podobnego, ale nie chcę zaśmiecać mojego katalogu domowego. Istnieje wiele innych funkcji, które mogą okazać się przydatne. Na przykład chciałbym móc zacząć pisać, go cla następnie nacisnąć klawisz Tab, aby wykonać autouzupełnianie. Czasami mam wypisane wiele kopii repozytorium, więc użyteczne byłoby, aby program pozwolił mi tworzyć wiele kontekstów i ustawiać zakładkę względem katalogu bazowego kontekstu.

Tak więc, zanim przystąpiłem do tworzenia własnego zestawu skryptów, czy jest już coś takiego?



4
Jeśli będziesz nadal porównywał bash do firefoxa, ktoś stworzy niesamowity pasek do bash :(
hhaamu

Odpowiedzi:


12

Zbyt długo szukałem narzędzia do tworzenia zakładek powłoki i nie jestem zadowolony z żadnego z rozwiązań, które znalazłem.

Jednak w końcu natknąłem się na świetne, uniwersalne narzędzie: program do wyszukiwania rozmytych wierszy poleceń .

Pozwala przede wszystkim na „wyszukiwanie rozmyte” (sprawdź bogatą animację gif za pomocą powyższego linku), ale pozwala także na podawanie dowolnych danych tekstowych i filtrowanie tych danych. Pomysł na skróty jest więc prosty: wszystko, czego potrzebujemy, to utrzymywać plik ze ścieżkami (które są skrótami) i filtrować rozmyto ten plik. Oto jak to wygląda: wpisujemy cdgpolecenie (z „cd global”, jeśli chcesz), uzyskujemy listę naszych zakładek, wybieramy potrzebną w ciągu kilku naciśnięć klawiszy i naciśnij Enter. Katalog roboczy jest zmieniany na wybrany element:

cdg

Jest to niezwykle szybkie i wygodne: zwykle po prostu wpisuję 3-4 litery potrzebnego elementu, a wszystkie inne są już odfiltrowane. Dodatkowo możemy oczywiście poruszać się po liście za pomocą klawiszy strzałek lub za pomocą Ctrl+j/ Ctrl+k.

Szczegółowy artykuł na temat tego rozwiązania skrótów / zakładek znajduje się tutaj: Rozmyte skróty dla twojej powłoki .


19

Myślę, że szukasz czegoś takiego jak autojump . Musisz trochę popracować, aby opracować zestaw „wag klucza”, które korelują z ilością czasu spędzonego w danym katalogu. Następnie, zakładając, że spędziłeś dużo czasu w reżimie „klas”, możesz tam przejść bezpośrednio, pisząc

j cl

Możesz wyświetlić swoje „wagi kluczowe” za pomocą

jumpstat

Niedawno znalazłem trochę bardziej złożone, ale interesujące i powiązane narzędzie o nazwie f: github.com/clvv/f
tcdyl

14

Jak wspomina saeedn, aliasy są dobrym mechanizmem. Powłoka bash posiada także wbudowany mechanizm do wskoczyć do lokalizacji: CDPATH. Ustaw to tak PATH, ale jest używane przez cdzamiast wyszukiwania programów.

$ CDPATH=:~/repo/www/public/util
$ cd classes
/home/casebash/repo/www/public/util/classes

Z strony podręcznika:

   CDPATH The search path for the cd command.  This is  a  colon-separated
          list  of  directories  in  which the shell looks for destination
          directories specified by the cd  command.   A  sample  value  is
          ".:~:/usr".

Sam połączyłem to z katalogiem, który zawiera dowiązania symboliczne do miejsca, w którym chciałbym iść:

$ mkdir ~/cdshortcut
$ ln -s ~/repo/www/public/util/classes ~/cdshortcut/classes
$ CDPATH=:~/cdshortcut
/home/casebash/cdshortcut/classes

Ma to tę wadę, że katalog nie wydaje się być poprawny, ale można to naprawić za pomocą cd -Plub ustawienia set -P.


CDPATH jest interesujący, ale prawdopodobnie warto użyć osobnego polecenia go, aby zachowanie było zawsze przewidywalne
Casebash,

1
+1 za zestaw -P. Niektóre z moich dowiązań symbolicznych doprowadzały mnie do szaleństwa, ponieważ nie pamiętałem, dokąd tak naprawdę poszły i nie pamiętałem polecenia, które pokazuje te informacje.
Joe,

@Joe, wolałbym alias C='cd -P .'raczej dodać set -P, ponieważ dla systemowych dowiązań symbolicznych nie mam nic przeciwko byciu w katalogu dowiązań symbolicznych.
Wildcard

@Wildcard - ciekawe - czy możesz podać przykład, w którym to dla ciebie zmienia? Właśnie pobiegłem help cdi nadal nie rozumiem, co robi opcja -P.
Joe

@Joemkdir test; ln -s test linktotest; cd linktotest; pwd; cd -P .; pwd
Wildcard

9

Możesz połączyć istniejące funkcje Bash z historią i wyszukiwaniem historii. Naciśnij, Ctrl-Raby rozpocząć przyrostowe wyszukiwanie do tyłu, a następnie zacznij wpisywać część ścieżki, która najprawdopodobniej będzie unikalna.

Możesz pisać litery, dopóki nie skończy się ostatnie cdpolecenie dotyczące tego katalogu, lub możesz nacisnąć Ctrl-Rponownie, aby wrócić do historii do następnego najnowszego polecenia pasującego do tego, co wpisałeś do tej pory.

Robię to cały czas.

W rzeczywistości robię krok dalej. Gdy zacznę odkrywać sekwencje poleceń, które warto zachować w historii, ale nie warto angażować się w skrypt powłoki, zaczynam je łączyć w łańcuchy &&i ;kombinatory, aby móc odwrócić wyszukiwanie podłańcucha tego jednego długiego polecenia, nacisnąć Enteri uruchomić całą sekwencję w pewnego razu.

Na przykład oto, jak zbudować i uruchomić jeden z moich programów podczas programowania:

$ ( cd .. ; make install ) && ./start_my_program

Robię to z katalogu instalacyjnego, który znajduje się pod katalogiem źródłowym najwyższego poziomu. Pakując część cd, buduj i instaluj w podpowłoce, upewniam się, że bez względu na to, co się stanie podczas tego procesu, wrócę do mojej normalnej powłoki bez zmian. Tylko jeśli to się powiedzie (&&), uruchomię zbudowany i zainstalowany program. Mogę znaleźć w moim historii z tylko Ctrl-Rwtedy sta, że jest wszystko, czego zazwyczaj potrzeba do jednoznacznego znalezienia tej sekwencji poleceń.

Innym przykładem tego, jak korzystam z tego, jest sekwencja, w której buduje się RPM dla tego samego programu. Większość żmudnej pracy związana jest ze skryptami powłoki, ale nadal istnieje kilka poleceń, które normalnie musiałbym wpisać, aby wykonać całą pracę związaną z budowaniem i wdrażaniem wbudowanych RPM, których teraz rzadko muszę ponownie wpisywać, ponieważ Bash zachowuje dla mnie to w historii.

Połącz to wszystko z, export HISTSIZE=bignuma shopt histappendwłaśnie zbudowałeś pamięć poleceń słoni.

Innym rozwiązaniem, które kiedyś kodowałem, jest moja odpowiedź na inne pytanie tutaj . Może być konieczne dostosowanie go do twoich celów i obsługuje tylko cdpolecenia, podczas gdy opcja wyszukiwania historii działa wszędzie i dla każdego polecenia.


6

Sam aliasskracam długie ścieżki, które często odwiedzam. Możesz umieścić swój zestaw aliases bashrc, aby bash mógł je zapamiętać przy każdym logowaniu. I na szczęście bash dodaje aliasy do autouzupełniania.

Napiszę coś takiego dla twojej sprawy: alias go-classes="cd ~/repo/www/public/util/classes"


6

Być może szukasz znaków bash (na github).
Z pliku README:

Bashmarks to skrypt powłoki, który pozwala zapisywać i przeskakiwać do często używanych katalogów. Teraz obsługuje uzupełnianie kart.


4

Nie jest to w żaden sposób kompletne ani głupie, tylko szkic na początek. Dodając następujące elementy ~/.bashrc, będziesz mieć trzy polecenia do dodania opcji usuwania i listy zakładek do katalogu (które są oparte na aliasach powłoki, więc możesz także uzyskać automatyczne uzupełnianie).

BMFILE=~/.bash.bookmarks
[ -f "$BMFILE" ] && . "$BMFILE"

bmadd() {
    local abm
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    abm="alias $bm='cd \"$(pwd)\"'"

    if grep -q " $bm=" "$BMFILE"; then
        echo "Overwriting existing bookmark $bm"
        bmdel "$bm"
    fi
    echo "$abm" >> "$BMFILE"
    eval "$abm"
    #source "$BMFILE"
}

bmdel() {
    local bms
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    #sed -i.bak "/ $bm=/d" "$BMFILE"
    bms=$(grep -v " $bm=" "$BMFILE")
    echo "$bms" > "$BMFILE"
    unalias "$bm" 2> /dev/null
}

bmlist() {
    sed 's/alias \(.*\)=.cd "\(.*\)".$/\1\t\2/' "$BMFILE" | sort
}

Użycie jest dość proste. bmaddz argumentem dodaje alias nazwany po argumencie. Ten alias tworzy po prostu płytę CD do katalogu, w którym został ustawiony. Bez argumentu używa bieżącej nazwy katalogu jako nazwy aliasu. W podobny sposób bmdelusuwa alias, jeśli istnieje i bmlistwyświetla bieżące zakładki.

na przykład

u@h:~ $ cd /usr/share/doc
u@h:/usr/share/doc $ bmadd
u@h:/usr/share/doc $ cd /usr/local/share/
u@h:/usr/local/share $ bmadd lshare
u@h:/usr/local/share $ cd
u@h:~ $ bmlist
doc     /usr/share/doc
lshare  /usr/local/share
u@h:~ $ doc
u@h:/usr/share/doc $ bmdel lshare
u@h:/usr/share/doc $ bmlist
doc     /usr/share/doc
u@h:/usr/share/doc $

4

Jakiś czas temu spotkałem się z tą samą potrzebą i postanowiłem stworzyć kilka skryptów, które pomogą mi dodać do zakładek ścieżki bezwzględne / względne i zmapować je na krótsze nazwy, które łatwo zapamiętam.

Skrypt jest bardzo łatwy w użyciu i po prostu utworzy funkcję o krótkiej nazwie, którą podajesz jako alias do katalogu, do którego chcesz przejść. Wystarczy wpisać tę krótką nazwę, aby przejść do katalogu z zakładkami.

Oto link do źródła skryptu bookmarker. Nawiasem mówiąc, nazwałem to Zakładka.

Stosowanie

Po zainstalowaniu jest dość prosty w użyciu.

Aby oznaczyć katalog:

$ mark /this/is/a/very/very/looooong/path mydir

Aby przejść do zaznaczonego katalogu:

$ mydir

Aby zobaczyć, co zostało oznaczone:

$ marks
bin     -> /Users/khafaji/bin
eBooks  -> /Users/khafaji/eBooks

Aby usunąć zaznaczony katalog:

$ umark myDir

Dalsze przykłady, instrukcje instalacji itp. Znajdują się w bardzo szczegółowej dokumentacji .


3

cdargs jest najlepszym narzędziem do tworzenia zakładek do zakładek.

Przykłady użycia znajdują się w zakładkach wideo z poleceniami cd na YouTube.

Przykładowe użycie

cdargsjest graficznym interfejsem użytkownika ncurses, dzięki czemu możesz wizualnie nawigować w swojej powłoce. Po zainstalowaniu ustawiasz go w danej powłoce, uzyskując skrypt powłoki:

$ source /etc/profile.d/cdargs.sh

Umożliwia to kilka funkcji, które można następnie wywołać z poziomu powłoki.

Przywołaj GUI:

$ cv

W wyniku tego GUI:

   [.       ]  /home/saml/tst/88040
 0 [path0   ]  /home/saml/tst/88040/path0
 1 [path1   ]  /home/saml/tst/88040/path1
 2 [path2   ]  /home/saml/tst/88040/path2

Możesz używać klawiszy strzałek, aby poruszać się w górę i w dół, aby poruszać się po liście. Strzałka w lewo ( ) idzie o poziom wyżej w drzewie katalogów, strzałka w prawo ( ) przechodzi do katalogu.

oznaczanie katalogów:

Możesz użyć cdla bieżącego nawigowanego katalogu lub możesz adodać katalog, który aktualnie wyróżniasz kursorem.

tryby pracy:

cdargsjest trochę podobny do vi / vim pod tym względem, gdzie ma takie pojęcie trybów . Są 2 z nich, przeglądanie (B) i lista (L). Możesz zobaczyć, w jakim trybie jesteś, poprzez wyświetlacz u dołu powłoki.

Tryb aukcji:

L: /home/saml/tst/88038

Tryb przeglądania:

B: /home/saml/tst/88038

Możesz zmienić swój tryb, naciskając klawisz Tab ( TAB).

To tylko wierzchołek góry lodowej, więcej informacji można znaleźć na stronie man ( man cdargs), a także we wbudowanej pomocy.


2

Najlepszym narzędziem do tego jest: wcd . Przetestowałem wiele innych narzędzi, a ten jest używany dokładnie tak, jak pytasz i jest lepszy pod wieloma względami niż wszystkie poprzednie rozwiązania.


1

Pozostałe odpowiedzi są świetne i konkretne. Innym sposobem na spojrzenie na to jest użycie makroprocesora klawiaturowego, który może zrobić prawie wszystko, co tylko możesz wymyślić.

Sprawdź AutoKey. Może zastępować frazy, takie jak autokorekta edytora tekstu lub historia bash, a także może uruchamiać skrypt python na zdefiniowanym skrócie klawiszowym, który może zrobić prawie wszystko, a także wysyłać naciśnięcia klawiszy do urządzenia wprowadzania znaków - tak jakbyś je wpisał.

Jedynym mankamentem, jaki ma (w związku z tym pytaniem), jest to, że potrzebuje GUI, aby uruchomić in - gnome lub kde. Inne odpowiedzi nie mają tego wymogu.

https://code.google.com/p/autokey/

1

Istnieje inna alternatywa o nazwie z .

Uczy się przy każdej zmianie katalogu:

$ cd /tmp/
$ pwd
/tmp
$ cd
$ pwd
/home/user

Następnie możesz później przejść do tego katalogu z dopasowaniem rozmytym:

$ z mp
$ pwd
/tmp

1

Apparix to kolejne narzędzie, które to robi. Jedną z jego przydatnych funkcji jest to, że możesz przejść bezpośrednio do podkatalogów znaku i uzupełnić tabulatorami w tych podkatalogach.


0

Innym rozwiązaniem, które moim zdaniem jest autojumpi zjest fasd.

Śledzi, które katalogi odwiedzasz i z dir-nameprzejdzie do katalogu z nazwą dir-name, której używasz najczęściej. Posiada również funkcje dla często używanych plików.

Możesz go sklonować z: https://github.com/clvv/fasd

Instalowanie jest proste, klonowanie, instalowanie, a następnie modyfikowanie .bashrc(lub .zshrcitp.).


0

Musisz dodać alias do swojego .bashrclub .bash_profile.

## navigate to your home directory
$ cd ~
## list the contents of your home directory to see if you have `.bashrc` or `.bash_profile`
$ ls -a 
[`.bashrc` or `.bash_profile` should appear in the list]
## launch the text editor of your choice; I'll use vim here
## if no `~/.bashrc` or `~/.bash_profile`...
$ vim
## if, e.g., `~/.bash_profile` listed...
$ vim ~/.bash_profile

Powiedzmy, że chcesz użyć skrótu ~/Desktop/Coding/Projects, aby wywołać, który napiszesz goto_Projs. Musisz dodać następujący wiersz do pliku otwartego w edytorze tekstu:

alias goto_Projs='cd ~/Desktop/Coding/Projects'

Teraz rób wszystko, co twój edytor tekstu chce, abyś zapisał (do /User/<yourusername>/lub ~/oczywiście) i zakończył pracę, a gdy zostanie zwrócony komunikat powłoki, idź

source ~/.bash_profile

Twój alias powinien być teraz dostępny do wywołania, jak opisano powyżej.


0

Używam metody dodawania komentarza na końcu polecenia, a następnie wywoływania w ctrl Rcelu odwrotnego wyszukiwania komentarza. Ma to następujące zalety:

  • wyszukaj polecenie w języku naturalnym
  • zmień komentarz w dowolnym momencie i pobierz najnowszą aktualizację ctrl R
  • użyj ctrl Ri tabw locie, aby wprowadzić drobne poprawki do samego polecenia, dzięki czemu komentarz będzie rodzajem rodzajowego skrótu do rodziny podobnych poleceń
  • nie wymaga konfiguracji, instalacji ani prowadzenia ksiąg rachunkowych :-)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.