Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Выходит, zsh может заменить архиватор?
Насколько мне известно, в bash горячие клавиши изменению не подлежат. Впрочем, не исключено, что я ошибаюсь. Это известные всем линуксоидам клавиши редактора emacs. Они взяты за основу и будут работать на любой машине, где установлен bash.
В случае с bash, надо создать файл ~/.inputrc и добавить в него следующее:
set editing-mode vi set keymap vi
Это простейшая функция. Даже близко не архиватор.перефразирую, эти две функции унифицируют некоторый функции разных упаковщиков/распаковщиков (почти как atool)
не подскажите как им вводимую команду разукрасить? а то до нажатия на бэкспейс не хочет раскрашивать.вставил после определения цветов и наступила благодать
/usr/bin/env python :)Например, в zsh после for обязательно вставлять пробел, нумерация массивов в zsh начинается с 1, чего совершенно невозможно понять.
Так, если вы используете shell для повседневной работы, исключающей написание скриптов, используйте zsh. Если вам часто приходится писать свои скрипты, только bash!
#!/bin/bash
w=("I" "like" "archlinux")
for((i=0; i < 3; i++))
do
echo ${w[$i]}
done/bin/sh, только хардкор?Засчёт тех, кто будут ваши скрипты, мучаясь, запускать.Додумывать за меня ваше хобби или случайно получилось?
Мысль о том, что Ваши скрипты, возможно, кому-то пригодятся и будут использоваться, видимо, Вам не посещала«Собственные задачи», вам эта фраза хоть о чем-то говорит?
zsh scriptname, иначе запуститься bash. Зато в zsh работаетfor ((i=0; i<3; i++)) {
echo $i
}как имитировать поведение опции cdspell из баша?
/home/mulder/.zshrc
Ну конечно, не умеет, агаОно меняет, но по табу, а cdspell в баше меняет автоматом.
А ещё вот так умеет:Это называется globbing, вещь крутейшая.
tail -f /v/l/a
экспандится в
tail -f /var/log/all.log
tail -f /v/l/a
и нажав enter без таба вы получитеtail: /v/l/a: No such file or directory
zstyle ':completion:*' insert-tab false # Автокомплит для первого символа
# pkgfile - только для Арча. При установленном pkgfile
source /usr/share/doc/pkgfile/command-not-found.zsh
# я не пользуюсь bindkeys -e, у меня все свое
bindkey '^[[A' up-line-or-search # up arrow for back-history-search
bindkey '^[[B' down-line-or-search # down arrow for fwd-history-search
bindkey ';5D' backward-word # ctrl+left
bindkey ';5C' forward-word # ctrl+right
bindkey '\e[1~' beginning-of-line # home
bindkey '\e[2~' overwrite-mode # insert
bindkey '\e[3~' delete-char # del
bindkey '\e[4~' end-of-line # end
bindkey '\e[5~' up-line-or-history # page-up
bindkey '\e[6~' down-line-or-history # page-downв современных вариантах известные хосты в хешах и нечитаемом виде в этом файле лежатЧестно говоря никогда не обращал внимание, но у меня хосты в ~/.ssh/known_hosts вполне читаемы.
# use /etc/hosts and known_hosts for hostname completion
[ -r /etc/ssh/ssh_known_hosts ] && _global_ssh_hosts=(${${${${(f)"$(</etc/ssh/ssh_known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _global_ssh_hosts=()
[ -r ~/.ssh/known_hosts ] && _ssh_hosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=()
[ -r /etc/hosts ] && : ${(A)_etc_hosts:=${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}}} || _etc_hosts=()
hosts=(
"$_global_ssh_hosts[@]"
"$_ssh_hosts[@]"
"$_etc_hosts[@]"
"$HOST"
localhost
)
zstyle ':completion:*:hosts' hosts $hosts
command_not_found_handle.~ % < file.sh
#!/bin/bash
w=("I" "like" "archlinux")
for((i=0; i < 3; i++))
do
echo ${w[$i]}
done
(zyx-desktop:zyx:~/.vam/powerline) % strace -e 'execve' zsh -c 'export PAGER=/usr/bin/less; < /dev/null'
execve("/bin/zsh", ["zsh", "-c", "export PAGER=/usr/bin/less; < /d"...], [/* 64 vars */]) = 0
execve("/bin/more", ["more"], [/* 64 vars */]) = 0
+++ exited with 0 +++

cat_via_pygmentize() {
if [ ! -x $(which pygmentize) ]; then
echo package \'pygmentize\' is not installed!
exit -1
fi
if [ $# -eq 0 ]; then
pygmentize -g $@
fi
for FNAME in $@
do
filename=$(basename "$FNAME")
lexer=`pygmentize -N \"$filename\"`
if [ "Z$lexer" != "Ztext" ]; then
pygmentize -l $lexer "$FNAME"
else
pygmentize -g "$FNAME"
fi
done
}
alias o='cat_via_pygmentize'
И уж, конечно, ни один пользователь не оспорит удобство использования истории команд. Здесь zsh ничем особенным не отличается от bash.
"\C-n": history-search-forward
"\C-p": history-search-backwardв .inputrc то по <C-n>/<C-p> получите абсолютно то же самое в bash. Стрелки — зло.<C-r> — не поиск по‐умолчанию? А как работает <C-S-r> я вообще не представляю: в xterm это то же, что и <C-r> (во всяком случае, с настройками по‐умолчанию). В urxvt тоже. В konsole (yakuake) это вообще клавиатурное сочетание, закрывающее вкладку (правда, не факт, что стандартное).c<C-p> с этими настройками вы получаете что‐то вроде cat file | grep …: то есть, строку, начинающуюся на c из истории. c уже набрана. Также вы получаете не строку, содержащую c. И не строку, совпадающую с шаблоном. И не что‐то ещё.<C-S-r>? Терминалы вообще обычно посылают одну и ту же последовательность и для того, и для другого.Изначально он ориентирован на любые терминалы — не только поддерживающие 256 цветов, поэтому некоторые цвета могут выглядеть не так, как нам нравится, но это можно исправить. Главный файл с настройками цветов располагается по пути:
/usr/share/zsh/plugins/zsh-syntax-highlight/highlighters/main/main-highlighter.zsh
Измените цвета так, как вам нужно.
Пример:
: ${ZSH_HIGHLIGHT_STYLES[hashed-command]:=fg=153} …
: ${VAR:=val}? Эта конструкция буквально означает «записать val в переменную VAR, если последняя пуста или не определена». То есть не надо ничего менять в /usr/share, просто определите эти переменные до строкиsource /usr/share/zsh/site-contrib/zsh-syntax-highlighting.zsh и всё.typeset -A ZSH_HIGHLIGHT_STYLES
ZSH_HIGHLIGHT_STYLES=(
'alias' 'fg=green,bold'
'builtin' 'fg=yellow'
'function' 'fg=blue,bold'
'command' 'fg=green'
'hashed-commands' 'fg=green,underline'
'precommand' 'fg=cyan'
'path' 'underline'
)
zsh и bash: что выбрать