Какие zsh функции Вы используете? [закрытый]

Я делаю большую работу в терминале, таким образом, я узнал много о своей предпочтительной оболочке, zsh. Какие функции zsh Вы используете для создания себя что намного более продуктивными на работе? Одно из моего избранного является автоматическим заполнением мультиdir. Таким образом вместо ввода cd /fo{tab}/ba{tab}/ba{tab} Я могу просто сделать cd /fo/ba/ba{tab} и сохраните это много нажатий клавиш!

33
задан 07.08.2009, 20:10

6 ответов

способность 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
13
ответ дан 07.12.2019, 09:06
  • 1
    Да, это превосходно! Я также использую это, когда я не совсем уверен, что переключатель командной строки всего лишь, я не должен копаться в файле человека. – Frew Schmidt 15.07.2009, 17:56

Как упомянуто другими, автоматическое заполнение 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
7
ответ дан 07.12.2019, 09:06

Включите автоматическое заполнение при использовании scp на удаленный сервер.

Правильная подсказка для отображения дополнительной информации.

5
ответ дан 07.12.2019, 09:06
  • 1
    Действительно! У меня есть очень сложная, но короткая подсказка. Имя хоста [текущая строка] <ошибка не> % – Frew Schmidt 15.07.2009, 18:05

Просто найденный этим небольшим драгоценным камнем:

cd old new

Эта форма cd замены все происшествия old в полном пути существующего каталога с new и попытки изменить рабочий каталог на получающийся путь.

Например, если Ваш рабочий каталог /home/larry/code/backrub/server и Вы хотите переключиться на /home/sergei/code/backrub/server, все, что необходимо сделать:

cd larry sergei
50
ответ дан 07.12.2019, 09:06

Мне действительно нравятся глобальные псевдонимы так

alias -g L='|less
alias -g DN='>/dev/null'

позвольте мне сделать вещи как

somecommand file arg L

и получите подкачку страниц.

10
ответ дан 07.12.2019, 09:06

Я буду придерживаться вещей, которые, насколько я знаю, не может сделать удар.

  • Необычное завершение. Да, удар имеет часть его, но 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'  
}
  • 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
  • Самые важные non-completion-related опции: setopt append_history autocd extended_glob no_match
21
ответ дан 07.12.2019, 09:06

Теги

Похожие вопросы