Я делаю большую работу в терминале, таким образом, я узнал много о своей предпочтительной оболочке, zsh. Какие функции zsh Вы используете для создания себя что намного более продуктивными на работе? Одно из моего избранного является автоматическим заполнением мультиdir. Таким образом вместо ввода cd /fo{tab}/ba{tab}/ba{tab}
Я могу просто сделать cd /fo/ba/ba{tab}
и сохраните это много нажатий клавиш!
способность zsh автоматически заполнить вещи помимо файлов и каталогов.
Например, с установленным пакетом мерзавца, мерзавец-sh {вкладка} поднимает:
- git command - shortlog -- summarizes git log output show-branch -- shows branches and their commits show-index -- displays contents of a pack idx file
Как упомянуто другими, автоматическое заполнение zsh превосходно.
Можно установить собственное автоматическое заполнение для пользовательских команд без слишком большого количества стычки также. Снабжать вкладками полные имена пользователей как аргументы пальцу:
# ~/.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
на удаленный сервер.
Правильная подсказка для отображения дополнительной информации.
Просто найденный этим небольшим драгоценным камнем:
cd old new
Эта форма cd
замены все происшествия old
в полном пути существующего каталога с new
и попытки изменить рабочий каталог на получающийся путь.
Например, если Ваш рабочий каталог /home/larry/code/backrub/server
и Вы хотите переключиться на /home/sergei/code/backrub/server
, все, что необходимо сделать:
cd larry sergei
Я буду придерживаться вещей, которые, насколько я знаю, не может сделать удар.
Необычное завершение. Да, удар имеет часть его, но zsh имеет, знает больше команд, часто более точен, и имеет намного больше возможностей конфигурации.
**
шарик, например, **/foo
ищет названные файлы foo
в подкаталогах рекурсивно. (И ***/foo
также следует за символьными ссылками.) Два символа вместо длинного find
команда (в котором трудно разобраться, если некоторые имена файлов включают специальные символы как пробелы и кавычки).
Менее часто, спецификаторы шарика как в foo*(*)
(как foo*
, но только сохраните исполняемые файлы), foo(.)
(только регулярные файлы, не каталоги), foo(-@)
(только подвешивающий символьные ссылки), foo*(m-5)
(только файлы, измененные за прошлые 5 минут), foo*(om[1])
(последний раз измененный файл), и т.д.
autocd
: Ввод имени каталога как команда изменяется в него (cd
или pushd
в зависимости от того, как Вы настроили его). cd
команда является тремя символами слишком долго! Я не могу использовать удар больше тридцати секунд, не чувствуя боли. У меня также есть несколько односимвольных функций, такой как
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' }
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