Я много работаю в терминале, поэтому я многое узнал о своей оболочке, zsh. Какие функции zsh вы используете, чтобы сделать себя намного более продуктивным на работе? Один из моих любимых - автозаполнение с несколькими режиссерами. Поэтому вместо того, чтобы набирать cd /fo{tab}/ba{tab}/ba{tab} я могу просто сделать cd /fo/ba/ba{tab} и сохранить столько нажатий клавиш!
6 ответов
Просто нашел этот маленький драгоценный камень:
cd old new
Эта форма cd заменяет все вхождения old в полном пути текущего каталога на new и пытается изменить рабочий каталог на результирующий путь.
Например, если ваш рабочий каталог - /home/larry/code/backrub/server и вы хотите переключиться на /home/sergei/code/backrub/server , все, что вам нужно сделать, это:
cd larry sergei
Я буду придерживаться того, что, насколько я знаю, Баш не может сделать.
Необычное завершение. Да, в bash есть некоторые из них, но zsh знает больше команд, часто более точен и имеет гораздо больше возможностей для конфигурации.
Глобус
**, например,**/fooрекурсивно ищет файлы с именемfooв подкаталогах. (И***/fooтакже следует символическим ссылкам.) Два символа вместо длинной командыfind(что трудно понять, если некоторые имена файлов содержат специальные символы, такие как пробелы и кавычки).Реже, квалификаторы glob, такие как
foo*(*)(например,foo*, но сохраняют только исполняемые файлы),foo(.)(Только обычные файлы, не каталоги),foo(-@)(только висячие символические ссылки),foo*(m-5)(только файлы, измененные за последние 5 минут),foo*(om[1])(последний измененный файл) и т. д.autocd: ввод имени каталога в виде команды меняется на него (cdилиpushdзависимости от того, как вы его настроили). Командаcdсостоит из трех символов слишком долго! Я не могу использовать bash более тридцати секунд, не чувствуя боли. У меня также есть несколько односимвольных функций, таких как
function - {
if [[ $# -eq 0 ]]; then
cd "$OLDPWD"
else
builtin - "$@"
fi
}
zmv, и
alias zcp='noglob zmv -C' alias zln='noglob zmv -L' alias zmv='noglob zmv'
Пока я на это,
noglob.Функции
precmdиpreexec: я используюpreexecчтобы задать заголовок моего терминала, чтобы включить команду выполнения, иprecmdчтобы заменить команду ее кодом выхода. Что-то вроде
term_title_base='@%l: %1~'
preexec () {
print -nr $'\e]2;'"${(%)term_title_base} $*"'$\a'
}
precmd () {
print -nr $'\e]2;'"${(%)term_title_base} ($?)"'$\a'
}
- Ctrl+Z:
- В пустой командной строке запускается
bg(так что Ctrl+Z Ctrl+Z приостанавливает работу программы и сразу же возобновляет ее в фоновом режиме). - В непустой командной строке приостановите текущее издание команды: позвольте мне набрать другую команду, и когда вторая командная строка будет завершена, я получу первую команду для редактирования.
- Это использует следующую функцию:
- В пустой командной строке запускается
fancy-ctrl-z () {
if [[ $#BUFFER -eq 0 ]]; then
bg
zle redisplay
else
zle push-input
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
- Наиболее важные опции, не связанные с завершением:
setopt append_history autocd extended_glob no_match
Способность zsh к автозаполнению, кроме файлов и каталогов.
Например, с установленным пакетом git, git-sh {tab} вызывает:
- git command - shortlog -- summarizes git log output show-branch -- shows branches and their commits show-index -- displays contents of a pack idx file
Мне очень нравятся глобальные псевдонимы, так
alias -g L='|less
alias -g DN='>/dev/null'
позвольте мне делать такие вещи, как
somecommand file arg L
и получить пейджинг.
Как уже упоминалось, автозаполнение Zsh отлично.
Вы также можете настроить собственное автозаполнение для пользовательских команд без особых хлопот. Чтобы отобразить полные имена пользователей в качестве аргументов для finger:
# ~/.zshrc
function userlist {
reply=(`users | tr ' ' '\n' |sort -u `);}
compctl -K userlist finger
set COMPLETE_ALIASES
Другие параметры, которые я хотел бы установить:
# turn on spelling correction
setopt correct
# don't save duplicates in command history
setopt histignoredups
# don't allow accidental file over-writes
setopt noclobber
Pushd и popd также очень удобны.
# Always pushd when changing directory
setopt auto_pushd
# Have pushd with no arguments act like `pushd $HOME'.
setopt PUSHD_TO_HOME
К сожалению, клавиши home и end по умолчанию не работают на zsh, как на других оболочках, но вы можете это исправить.
# Make home and end keys work.
[[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line
Включите автозаполнение при использовании scp на удаленном сервере.
Правильная подсказка для отображения дополнительной информации.
