Какие функции Zsh вы используете?

9605
Frew Schmidt

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

32
я не знал об этой функции, я должен попробовать ее! Roy Rico 10 лет назад 2
Какой вариант этого каталога автозаполнения? hometoast 10 лет назад 1

6 ответов на вопрос

48
Agnel Kurian

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

cd old new 

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

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

cd larry sergei 
Хорошо, это правила. hometoast 10 лет назад 7
21
Gilles

Я буду придерживаться того, что, насколько я знаю, Баш не может сделать.

  • Необычное завершение. Да, в bash есть некоторые из них, но zsh знает больше команд, часто более точен и имеет гораздо больше возможностей для конфигурации.

  • **Глобо, например, **/fooищет файлы, называемые fooв подкаталогах рекурсивно. (А ***/fooтакже следует за символическими ссылками.) Два символа вместо длинной findкоманды (что трудно понять, если некоторые имена файлов содержат специальные символы, такие как пробелы и кавычки).

  • Реже, такие как квалификаторы glob foo*(*)(например foo*, но сохраняются только исполняемые файлы), foo(.)(только обычные файлы, а не каталоги), foo(-@) (только висячие символические ссылки), foo*(m-5)(только файлы, измененные за последние 5 минут), foo*(om[1])(последний измененный файл), так далее.

  • autocd: Ввод имени каталога в виде команды изменится на него ( cdили в pushdзависимости от того, как вы его настроили). Команда cdсостоит из трех символов слишком долго! Я не могу использовать bash более тридцати секунд, не чувствуя боли. У меня также есть несколько односимвольных функций, таких как

функция - { if [[$ # -eq 0]]; затем CD "$ OLDPWD" еще встроенный - "$ @" фи } 
  • zmvВстроенная, и
псевдоним zcp = 'noglob zmv -C' псевдоним zln = 'noglob zmv -L' псевдоним 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]]; затем Б.Г. Zle Redisplay еще zle push-input фи } zle -N fancy-ctrl-z bindkey '^ Z' fancy-ctrl-z 
  • Наиболее важные варианты, не связанные с завершением: setopt append_history autocd extended_glob no_match
Люблю трюк ^ Z ^ Z, спасибо! Первоначально искал http://superuser.com/questions/378018/ решение для привязки его к одному ключу, но ^ Z ^ Z имеет гораздо больше смысла Evgeniy Dolzhenko 8 лет назад 3
13
Mark Thalman

Способность zsh к автозаполнению, кроме файлов и каталогов.

Например, с установленным пакетом git, git-sh вызывает:

- команда git - shortlog - обобщает вывод журнала git show-branch - показывает ветки и их коммиты show-index - отображает содержимое файла пакета idx
Да, это отлично! Я также использую это, когда я не совсем уверен, что такое переключатель командной строки, но мне не нужно копаться в файле man. Frew Schmidt 10 лет назад 1
Я верю, что у bash есть такая возможность. Keith Thompson 6 лет назад 0
10
hometoast

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

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

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

somecommand file arg L 

и получить пейджинг.

Мне также нравится G для grep. Frew Schmidt 10 лет назад 0
7
theotherreceive

Как уже упоминалось, автозаполнение 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 
Я нахожу исправление орфографии более раздражающим, чем на самом деле полезным. Frew Schmidt 10 лет назад 2
@Frew хе, ты не первый, кто мне это говорит. Одна из приятных особенностей исправления заключается в том, что исправление исправленной версии будет внесено в историю, поэтому вы случайно не запустите ту же самую вещь снова. theotherreceive 10 лет назад 0
5
Rob Wells

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

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

В самом деле! У меня очень сложная, но короткая подсказка. Имя хоста [текущая строка] % Frew Schmidt 10 лет назад 0

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