内容简介:TheAnd that’s just the tip of the iceberg. The CLI allows us to do almost everything without leaving the comfort of the keyboard. From browsing files and directories (using
Prerequisites : basic understanding of CLI and of common programs .
The Command Line Interface (abbreviated CLI
for the rest of the post) is the swiss knife of many developers and sysadmins out there. Unix systems provide a settings layer that can be rapidly accessed using some CLI utilities.
And that’s just the tip of the iceberg. The CLI allows us to do almost everything without leaving the comfort of the keyboard. From browsing files and directories (using nnn or ranger ) to reading and sending emails (using aerc ).
However, most programs we use:
- disable colors by default, sticking to the same default since their initial release. E.g.: ls and grep accept a
--color
argument for enabling colored output, or - do not implement colors at all, e.g., df
There are a lot of references on the web regarding this topic, like Color output in console page in the Arch Linux wiki and various Stack Overflow questions . They propose multiple solutions that sometimes overlap with each other. One must go through all the documentation, choose carefully and follow the installation procedure, and this can become tedious in a short amount of time.
In this post, we will setup a colourised CLI
using the programs described above. This will be a comprehensive guide and there will be (almost) no need to read any documentation.
Please note that this is based on my personal setup, based on my personal preferences. Feel free to skip/change anything you dislike, as it won’t impact the rest of the guide.
Starship
This is what the bash prompt looks like out of the box:
The first step into our colored journey is to making this prompt both more meaningful and better to look at.
There are a lot of prompt plugins out there. However, most of them work only in a single shell or require the installation of a framework like Oh-My-<shell>
. What I have instead chosen is a shell agnostic prompt: starship .
starshipis a fast (really fast!) prompt written in Rust that works in all shells (including exotic shells such as Ion).
Let’s have a look at our new prompt inside a git repository:
starshipis available in the following distributions . If your distribution isn’t listed, you can run:
$ curl -fsSL https://starship.rs/install.sh | bash
To enable it in bash
, add the following to the end of ~/.bashrc
:
eval "$(starship init bash)"
For enabling it in different shells, like zsh
or fish
, follow the getting started guide on the official site.
Generic Colourizer
Let’s take as example a well known and widely used program: df
.
As you can see, it’s clear but plain and somehow hard to follow. Let’s use Generic Colourizer to improve its output:
Now it seems like a total different program!
As we have just seen, Generic colourizer is a wrapper that uses regex to add colors and modifiers ( bold , italic ) to a program’s output. Among the supported programs there are id
, env
, sysctl
and mount
.
You can install it using the package manager, as it is available in almost every distribution .
To enable it in bash
, add the following at the end of your ~/.bashrc
:
[[ -s "/etc/grc.bashrc" ]] && source /etc/grc.bashrc
To enable it in zsh
or fish
, respectively source /etc/grc.zsh
or /etc/grc.fish
.
These configuration files will add aliases to the supported programs. I.e., next time you run df
, the shell will automatically run grc df
.
ls
ls
command is one of the commands that by default do not use colors, although they are avaiable by using --color
argument.
Simply add an alias in your config. For bash
users, add the following in your ~/.bashrc
:
alias ls='ls --color=auto'
grep
As for ls, add an alias to grep --color=auto
.
# ~/.bashrc alias grep='grep --color=auto'
diff
As for ls, add an alias to diff --color=auto
.
# ~/.bashrc alias diff='diff --color=auto'
man
To add colors to man
, we need to add colors to less
. In bash
, this can be achieved by creating a file ~/.config/less/termcap
with the following content:
export LESS_TERMCAP_mb=$(tput bold; tput setaf 2) # green export LESS_TERMCAP_md=$(tput bold; tput setaf 6) # cyan export LESS_TERMCAP_me=$(tput sgr0) export LESS_TERMCAP_so=$(tput bold; tput setaf 3; tput setab 4) # yellow on blue export LESS_TERMCAP_se=$(tput rmso; tput sgr0) export LESS_TERMCAP_us=$(tput smul; tput bold; tput setaf 7) # white export LESS_TERMCAP_ue=$(tput rmul; tput sgr0) export LESS_TERMCAP_mr=$(tput rev) export LESS_TERMCAP_mh=$(tput dim) export LESS_TERMCAP_ZN=$(tput ssubm) export LESS_TERMCAP_ZV=$(tput rsubm) export LESS_TERMCAP_ZO=$(tput ssupm) export LESS_TERMCAP_ZW=$(tput rsupm) export GROFF_NO_SGR=1 # For Konsole and Gnome-terminal
And then in your .bashrc
:
# Get color support for 'less' export LESS="--RAW-CONTROL-CHARS" # Use colors for less, man, etc. [[ -f ~/.config/less/termcap ]] && . ~/.config/less/termcap
If you are using fish
, add the following to your ~/.config/fish/config.fish
:
set -xU LESS_TERMCAP_md (printf "\e[01;31m") set -xU LESS_TERMCAP_me (printf "\e[0m") set -xU LESS_TERMCAP_se (printf "\e[0m") set -xU LESS_TERMCAP_so (printf "\e[01;44;33m") set -xU LESS_TERMCAP_ue (printf "\e[0m") set -xU LESS_TERMCAP_us (printf "\e[01;32m")In set -xU LESS "--RAW-CONTROL-CHARS"
highlight
When reading a file using less
, the output is the plain file, as we were reading the file through cat
.
This can be improved by by passing the file through highlight .
We now have syntax highlighting !
highlight
can be found in almost all distributions . After installing it using your package manager, add the following to your ~/.bashrc
:
export LESSOPEN="| /usr/bin/highlight %s --out-format xterm256 --force"
By adding --line-numbers
, highlight will also show line numbers. You can also customize its style by adding --style <style>
; for the screenshot, the molokai
theme has been used. Please read the documentation for further customizations.
Bonus for bash users: ble.sh
bash
, contrary to its alternatives zsh
and fish
, does not have a powerful line editing . By default the command you write won’t be highlighted and the completion won’t be shown.
Bash Line Editor (also called ble.sh
) is a flexible plugin that makes bash closer to the other two shells.
Let’s have a look at the exact two situations above and the difference ble.sh
does.
To install ble.sh
run the following commands:
$ cd /tmp $ git clone --recursive https://github.com/akinomyoga/ble.sh.git $ cd ble.sh $ make $ make install
ble.sh
will be installed inside ~/.local/share/blesh
.
Now add the following lines at the top of your ~/.bashrc
:
[[ $- == *i* ]] && source ~/.local/share/ble.sh --noattach
And the following lines at the end of the same file:
((_ble_bash)) && ble-attach
Conclusion
After setting up the above programs/aliases you will have a different experience when using your CLI.
In this post we have mostly used common command line programs , although modern alternatives exist , e.g., ripgrep as alternative to grep
. Those will be probably covered in another post.
Did you like the configuration presented through this post? Do you have other way of adding colors to your CLI? Comment below and let me know !
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。