Форматируется одинаково в обеих системах:
$ ip a show eth0 # stretch
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 40:b0:34:96:d9:02 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.77/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::39db:8c13:722f:b088/64 scope link tentative
valid_lft forever preferred_lft forever
$ ip a show eth0 # raspbian jessie
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:71:d5:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.11/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::1e43:2c74:e7d6:6419/64 scope link
valid_lft forever preferred_lft forever
Я не думаю, что zsh
имеет эквивалентный встроенный механизм, но вы сможете сделать это с помощью пользовательского виджета, такого как:
zmodload zsh/zselect
showmatch() {
emulate -L zsh
set -o rematchpcre
local -A pair=(
']' '['
')' '('
'}' '{'
)
local MBEGIN
zle.self-insert
if [[ $LBUFFER =~ "(\\$pair[$KEYS](?:[^$KEYS$pair[$KEYS]]++|(?1))*\\$KEYS)\$" ]]; then
local oldCURSOR=$CURSOR
CURSOR=$MBEGIN-1
zle -R
zselect -t 50 -r 0 < /dev/tty
CURSOR=$oldCURSOR
fi
}
zle -N showmatch
bindkey ']' showmatch
bindkey ')' showmatch
bindkey '}' showmatch
Вы также можете временно выделить область между соответствующими скобками, заменив внутреннюю часть if
/ fi
чем-то вроде:
local oldCURSOR=$CURSOR
region_highlight+=("$((MBEGIN-1)) $CURSOR bg=yellow,fg=black,bold")
CURSOR=$MBEGIN-1
zle -R
zselect -t 50 -r 0 < /dev/tty
CURSOR=$oldCURSOR
region_highlight[-1]=()
(здесь выделение черным на желтом ).
Вы также можете комбинировать это с некоторыми show-paren-mode
-, такими как выделение совпадающих скобок, когда курсор достигает одного конца, с чем-то вроде:
zmodload zsh/zselect
SHOWMATCH_GR=fg=black,bg=yellow,bold
showmatch() {
emulate -L zsh
set -o rematchpcre
local -A pair=(
']' '['
')' '('
'}' '{'
)
local MBEGIN
zle.self-insert
if [[ $LBUFFER =~ "(\\$pair[$KEYS](?:[^$KEYS$pair[$KEYS]]++|(?1))*\\$KEYS)\$" ]]; then
local oldCURSOR=$CURSOR
local -a old_region_highlight=($region_highlight)
region_highlight+=("$((MBEGIN-1)) $CURSOR $SHOWMATCH_GR")
CURSOR=$MBEGIN-1
zle -R
zselect -t 50 -r 0 < /dev/tty
CURSOR=$oldCURSOR
region_highlight=($old_region_highlight)
fi
}
zle -N showmatch
bindkey ']' showmatch
bindkey ')' showmatch
bindkey '}' showmatch
zle-line-pre-redraw() {
emulate -L zsh
set -o rematchpcre
region_highlight=(${region_highlight:#* $SHOWMATCH_GR})
local a=$BUFFER[CURSOR+1] b c MBEGIN o=0
local -A pair=(
']' '['
')' '('
'}' '{'
)
[[ -n "$RBUFFER" ]] &&
case $a in
([[\({])
b=${(k)pair[(re)$a]}
[[ $RBUFFER =~ "^(\\$a(?:[^$b$a]++|(?1))*\\$b)" ]] && o=$CURSOR;;
([]\)}])
b=$pair[$a]
[[ $LBUFFER$a =~ "(\\$b(?:[^$a$b]++|(?1))*\\$a)\$" ]];;
(*) return;;
esac &&
region_highlight+=("$((o+MBEGIN-1)) $((o+MEND)) $SHOWMATCH_GR")
}
zle -N zle-line-pre-redraw