Większość czasu spędzam pracując w środowisku Unix i używając emulatorów terminali. Próbuję użyć koloru w wierszu poleceń, ponieważ kolor sprawia, że wydruk jest bardziej użyteczny i intuicyjny.
Jakie są opcje dodania koloru do mojego środowiska terminalowego? Jakich trików używasz? Jakie napotkaliście pułapki?
Niestety obsługa kolorów różni się w zależności od typu terminala, systemu operacyjnego, ustawienia TERM, narzędzia, implementacji błędów itp.
Oto kilka wskazówek z mojej konfiguracji, po wielu eksperymentach:
- Zazwyczaj ustawiam
TERM=xterm-color
, który jest obsługiwany na większości hostów (ale nie na wszystkich). - Pracuję na wielu różnych hostach, różnych wersjach systemu operacyjnego itp. Używam wszystkiego od macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux i FreeBSD. Staram się, aby rzeczy były proste i ogólne, jeśli to możliwe.
- Robię sporo pracy przy użyciu GNU
screen
, co dodaje kolejną warstwę zabawy. - Wiele systemów operacyjnych ustawia takie rzeczy jak
dircolors
i domyślnie, i nie chcę modyfikować tego na stu różnych hostach. Staram się więc trzymać wartości domyślnych. Zamiast tego poprawiam konfigurację kolorów mojego terminala. Zastosowanie koloru jakiegoś Unix poleceń (
ls
,grep
,less
,vim
) oraz zachęty Bash . Wydaje się, że te polecenia używają standardowych „ sekwencji ucieczki ANSI ”. Na przykład:alias less='less --RAW-CONTROL-CHARS' export LS_OPTS='--color=auto' alias ls='ls ${LS_OPTS}'
Zamieszczę moje .bashrc
i odpowiem na własne pytanie Jeopardy Style.
column -t --color
?Odpowiedzi:
Oto kilka rzeczy, które możesz zrobić:
Edytory + kod
Wiele edytorów obsługuje podświetlanie składni.
vim
iemacs
mieć to domyślnie włączone. Możesz również włączyć to wnano
.Możesz także składnić kod podświetlenia na terminalu, używając narzędzia Pygments jako narzędzia wiersza polecenia.
grep
grep --color=auto
wyróżnia wszystkie mecze. Możesz także użyćexport GREP_OPTIONS='--color=auto'
go, aby był trwały bez aliasu. Jeśli użyjesz--color=always
, użyje koloru nawet podczas orurowania , co dezorientuje rzeczy.ls
ls --color=always
Kolory określone przez:
(wskazówka:
dircolors
może być pomocna)PS1
Możesz ustawić swój PS1 (monit powłoki) na używanie kolorów. Na przykład:
Wyprodukuje PS1, takie jak:
[żółty] lucas @ ubuntu: [czerwony] ~ [normalny] $
Dzięki temu możesz być naprawdę kreatywny. Jako pomysł:
Umieszcza pasek na górze terminalu z losowymi informacjami. (Aby uzyskać najlepsze wyniki, użyj również
alias clear="echo -e '\e[2J\n\n'"
.)Pozbywanie się sekwencji ucieczki
Jeśli coś utknęło podczas generowania koloru, gdy nie chcesz, używam tego
sed
wiersza, aby usunąć sekwencje specjalne:Jeśli chcesz uzyskać bardziej autentyczne wrażenia, możesz także pozbyć się linii zaczynających się od
\e[8m
, co instruuje terminal, aby ukrył tekst. (Nie jest powszechnie obsługiwane).Zauważ też, że te ^ [s powinny być rzeczywiste, dosłowne ^ [s. Możesz je wpisać, naciskając ^ V ^ [bash, czyli Ctrl+ V, Ctrl+ [.
źródło
PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '
. Po czwartym odwrotnym ukośniku występuje zbędny x.\[...\]
przeciwnym razie polecenia w drugim wierszu zastąpią pierwszy wiersz. PS1 = „[\ e [33; 1m] \ u @ \ h: [\ e [31m] \ W \ e [0m \ $ 'ls --color=always
nie działa. Podejście Michaela Durranta jest lepsze:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Używam również:
A jeśli podoba Ci się kolorowanie podpowiedzi, przydatne mogą być zdefiniowane zmienne kolorów:
A potem mój monit jest mniej więcej taki:
$ (vcprompt) wywołuje skrypt Pythona w mojej ~ / sbin, który wyświetla informacje o kontroli wersji dotyczące bieżącej ścieżki. Obejmuje obsługę Mercurial, Git, Svn, Cvs itp. Autor skryptu ma tutaj źródło .
To jest pełne źródło mojej szybkiej konfiguracji:
źródło
$LSCOLORS
i$CLICOLOR
są dla BSD ls. GNU ls (Linux) używa$LS_COLORS
innej składni. Ponieważ GNU wydaje mi się domem,LSCOLORS=exgxfxDacxBaBaCaCaeaEa
naśladuję kolory GNU na BSD.grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
.bashrc
pliku, aby modyfikacja była skuteczna. Możesz to zrobić za pomocą następującego polecenia.source /path/to/.bashrc
grep
ils
już wspomniano, jeśli chcesz dużo więcej kolorów sprawdzeniu Generic Coloriser jego Początkowym celem było kolorowania logów, ale od razu po wyjęciu z pudełka to także kolorujeping
,traceroute
,gcc
,make
,netstat
,diff
,last
,ldap
, icvs
.Można go łatwo rozszerzyć, jeśli znasz wyrażenia regularne. Dodałem
ps
inmap
do listy (jeśli wejdziesz dogrc
, chętnie podzielę się plikami .conf dla tych dwóch narzędzi)(Btw, aby zainstalować go przez
synaptic
,pacman
i podobnie możesz mieć szczęście, szukając „grc”)źródło
grc
teraz obsługujeps
domyślnie. Byłbym zainteresowany twoiminmap
kolorami. Zobacz także moją odpowiedź dotyczącą aliasingu wszystkich tych elementów w sposób, który wchłonie nowe polecenia podczas aktualizacji grc.Przez lata doskonaliłem mój .bashrc do pracy zarówno na OSX, jak i Ubuntu.
Zmniejszyłem go również do 28 wierszy za pomocą zwartych instrukcji warunkowych.
Dzięki temu mój monit PS1 wygląda następująco:
z czasem na czerwono, nazwa użytkownika na zielono, nazwa maszyny na jasnoniebiesko, pwd na ciemnoniebiesko i gałąź git na żółto.
Funkcja mojego monitu PS1:
_
pomiędzy nimi 3 katalogi górny i dolny 3 (topwd sed
część LOCATION).Odpowiednie wiersze z mojego
.bashrc
pliku to:Dla ls z kolorami, jeśli są dostępne i bez błędów, gdy nie są (tj. OSX):
źródło
ls
w systemie OS X, ale można to zrobić za pomocąexport CLICOLOR=1
.ls
w systemie MacOS 10. Odpowiedź jest również błędna, ponieważ ciągi znaków tutaj są w rzeczywistości błędne. Nie prawidłowo równowagi\[
i\]
, i spowodowały problemy dla co najmniej jednej osoby kopiowania Ta odpowiedź .Kolory stron podręcznika ( więcej szczegółów ):
Kolory dla grep (
1;32
jest jasnozielony, zobacz inne posty tutaj dla innych kolorów):Więcej kolorów dla GNU ls :
Zainstaluj
grc
( Generic Colouriser ) i dodaj go do swoich aliasów:Kolory dla diff : Zbyt dużo zawartości dla funkcji, użyj skryptu i alias w pliku rc (niepotrzebne, jeśli zainstalowano
grc
):Kolory dla zachęty bash :
źródło
PSWD()
funkcja była kompatybilna z POSIX, ale jest o wiele łatwiejsza dzięki obsłudze podciągów bash / zsh. Zobacz wersję 6 dla wersji POSIX, która zawiera wiele znaków zapytania i w ogóle nie można jej było dostosować do szerokości terminala. Nie zaktualizowałem zrzutu ekranu, ale to tylko niewielka zmiana przy szerokości 80 znaków.CLICOLOR=1
nie działa dla mnie z FREEBSD 11.2CLICOLOR=1 ls
powinien robić to samo, cols -G
przy użyciu BSD (ls -g
na starszych BSD). Jeślils --color
działa (bez błędu), używaszls
polecenia GNU i$CLICOLOR
jest ignorowany.~/.bashrc
aby zmiany odniosły skutek. Albo uruchomićsource ~/.bashrc
lub rozpocząć nową sesję bash (uruchomienia terminala lub uruchomićbash
).Ustaw pogrubioną / kolorową podpowiedź. Od cyberciti.biz i BashFAQ
Udało mi się również znaleźć ustawienia kolorów, które są szeroko obsługiwane i które nie drukują znaków gobbledygook w starszych środowiskach (nawet FreeBSD4!) I wydaje się działać dobrze, jeśli TERM = vt100, xterm, xterm-color. (Przez większą część). Z mojego .bashrc:
źródło
Istnieje dobre narzędzie do ustawiania kolorów dla polecenia ls - http://geoff.greer.fm/lscolors/
źródło
Rzeczy, o których tu jeszcze nie powiedziano:
Aby pokolorować dane wyjściowe twoich kompilacji za pomocą gcc, możesz użyć colorgcc autorstwa Johannesa Schlütera
Aby pokolorować dzienniki, jest wielopasmowy
Aby pokolorować każdy standard, zestawiłem xcol
Osobiście używam ich z narzędzia xcol.
Używam tych zmiennych w moich skryptach w ten sposób
Podoba mi się również ta mała funkcja coloredEcho (znaleziona w Stack Overflow)
Przepraszamy, nie wolno dodawać więcej linków
źródło
Sugeruję, abyś wypróbował ZSH i jego wtyczkę oh-my-zsh, która ma jedną z najpotężniejszych funkcji konsoli, jakie widziałem. Jednym z nich jest wybór motywu dla twojego terminala. To jest przykład mojego motywu ... W tty kolory nie są tak ciepłe, ale są takie same jak na tym zdjęciu ... W każdym razie pokochasz to!
źródło
emulate bash
swojego .zprofile lub .zshrc akta. Dla każdego, kto pracuje z zaawansowanymi funkcjami BASH, istnieje wiele subtelności, które cię ugryzą. BASH to lepszy sh.=~
operator może cię ugryźć, drogę ZSH obsługuje macierze może cię ugryźć, itd. Po użyciu zsh / Oh-my-zsh przez około 9 miesięcy miałem dosyć. Używałem niestandardowego motywu, który sam napisałem, przeniosłem go do BASH i napisałem własną linię poleceń git i nigdy nie oglądałem się za siebie. Teraz już nie martwię się o przenośnośćAby wyświetlić wyjście różnic w kolorze, użyj colordiff .
Potokuj dowolne wyjście w formacie diff do colordiff:
Obejmuje to niektóre alternatywne formaty diff, takie jak
-y
(obok siebie).Alternatywnie, jeśli wywoływany jest jako samodzielny (bez dołączania do niego żadnych elementów), wówczas działa on jak wrapper wokół „diff” i koloruje dane wyjściowe. Dlatego mam to w moim .bashrc, alias „diff” na colordiff.
źródło
.bashrc
przykładzie brakuje finałufi
i można go przekonwertować na polecenietype colordiff &> /dev/null && alias diff='colordiff'
Niektóre ozdoby tekstowe (pogrubione), aby łatwo odróżnić powłokę root i inną niż root. Dla Zsh:
W przypadku Bash:
źródło
bash
.Zastanawiałem się tylko nad tym samym. Mam własne podejście, ale szukam alternatyw.
Piszę bash otoki wokół wywołań programów i przesyłam ich wyniki
sed
. Podoba mi sięsed
to, że od razu zmodyfikuje i powtórzy każdą linię => niewiele buforowania. Jednak nie podoba mi się, że dla każdego wywołania owiniętego programused
kod jest analizowany i kompilowany.Na przykład to robię, aby pokolorować dane wyjściowe
ip
:źródło
Aby ustawić monit, mam to w moim pliku .bashrc.
To daje mi monit, który wygląda mniej więcej tak:
Katalog roboczy jest w kolorze zielonym. A nazwa użytkownika jest pogrubiona i niebieskozielona, chyba że uruchomiłem powłokę
sudo
, w którym to przypadku nazwa użytkownika („root”) jest pogrubiona i czerwona.Osobiście bardzo podoba mi się przechowywanie znaków sterujących formatowaniem w zmiennych, ponieważ ułatwia to czytanie kodu do ustawiania pytania. To również sprawia, edycję wiersza znacznie łatwiejsze.
Powodem, dla którego używam
tput
jest to, że powinna być bardziej uniwersalnie wspierana niż dziwne033[01;31m\]
sekwencje. Jako dodatkowy bonus, jeśli zrobisz toecho $PS1
w monicie, zobaczysz surowe monity z kolorami zamiast tych niezrozumiałych sekwencji kontrolnych.źródło
Możesz wypróbować projekt, który pomaga również w kolorowaniu danych wyjściowych skryptów, o nazwie ScriptEchoColor w źródłowej kuźni: http://scriptechocolor.sourceforge.net/
dawny.:
Automatyczne kolory można konfigurować.
Oto przykład z tym zrobiony:
źródło
Świetnym uniwersalnym narzędziem Pythona do kolorowania danych wyjściowych poleceń jest „ colout ”
Dajesz regex z N grupami, a następnie rozdzieloną przecinkami listą N kolorów. Każdy tekst pasujący do grupy zostanie wyświetlony w odpowiednim kolorze.
Na przykład, jeśli patrzysz na jakieś wyniki testowe:
możesz to upiększać za pomocą:
Zobacz, jak moje wyrażenie regularne ma trzy grupy (nawiasy), po których następują trzy kolory (i opcjonalnie trzy style, ale użyłem skrótu, aby ustawić wszystkie kolory na „pogrubienie”, a więc na grupę „czarną”, która pasuje do tekstu w nawiasach , pojawia się jako ciemnoszary.)
Zauważ też, jak musiałem dodać
2>&1
na końcu wywołania Pythona, ponieważ wyjście unittest jest na stderr, więc przeniosłem je na stdout, aby móc potokować je do colout.Jest to na ogół tak łatwe w użyciu, że często zdarza mi się tworzyć nowe inwokacje colout w locie oraz ponownie je wykorzystywać lub modyfikować z mojej historii wiersza poleceń.
Jedynym minusem jest to, że jest dostarczany jako pakiet Python, a nie jako samodzielny plik wykonywalny, więc musisz go zainstalować za pomocą pipa lub
sudo python setup.py install
.źródło
Uważam, że Solarized jest użyteczny. To zgrabny projekt o jednolitych kolorach do wielu zastosowań.
http://ethanschoonover.com/solarized https://github.com/altercation/solarized
źródło
Używam owijarki w kolorze .
Jest prawie bezproblemowy, ale kiedy odkryłem, że ps w interaktywnej powłoce zwraca inne dane wyjściowe, porównując ps w potoku.
źródło
W przypadku komputerów Mac możesz użyć następujących opcji określonych tutaj
źródło
jeśli chcesz, aby Twoje
vim
kolorowe były takie jak ja, proponuję wykonać dwa kroki:źródło
Jeśli wybrałeś bash, polecam och-bash . Jeśli zsh jest twoim wyborem, polecam oh-my-zsh . Zarówno obsługują kolorowanie twojego terminala, jak i inne wyjście.
źródło
Chciałbym pokornie reklamować moją niedawną publikację z
ta
lub textattr , biblioteki i narzędzia wiersza polecenia, które ma na celu dodanie koloru i atrybuty, aby upiększyć wyjście terminal programie łatwiej tłumacząc specyfikacje czytelnej dla człowieka na kody ucieczki ANSI.Na przykład:
echo "The Git repo $(ta yellow)${CUR_REPO}$(ta off) is $(ta green)up-to-date$(ta off)"
lub jeszcze krótszy:
echo "The Git repo $(ta y)${CUR_REPO}$(ta f) is $(ta g)up-to-date$(ta f)"
lub alternatywny:
tawrite "The Git repo " @y ${CUR_REPO} @f " is " @g up-to-date @f "\n"
da ci coś takiego:
Obecnie ta biblioteka jest dostępna w czterech językach C, C ++, D i Python, oprócz użycia wiersza poleceń z ulubionej powłoki.
Zauważ, że nie koloryzuje on automatycznie wyników innych programów. Jest to raczej narzędzie, które pomoże ci nie pamiętać niepotrzebnych kodów. Wystarczy użyć oczywistych nazw kolorów lub ich łatwych do zapamiętania skrótów rgb cmyk w (hite) (of) .
Aby uzyskać więcej informacji, odwiedź repozytorium textattr .
źródło