{"id":13529421,"url":"https://github.com/mika/zsh-pony","last_synced_at":"2025-06-22T06:30:49.423Z","repository":{"id":50902238,"uuid":"2098255","full_name":"mika/zsh-pony","owner":"mika","description":"Demo of hot stuff in the Zsh","archived":false,"fork":false,"pushed_at":"2011-07-29T19:34:30.000Z","size":118,"stargazers_count":180,"open_issues_count":0,"forks_count":5,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-01T16:34:40.584Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mika.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-07-24T21:48:34.000Z","updated_at":"2025-03-28T05:55:37.000Z","dependencies_parsed_at":"2022-09-24T23:02:00.668Z","dependency_job_id":null,"html_url":"https://github.com/mika/zsh-pony","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mika/zsh-pony","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mika%2Fzsh-pony","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mika%2Fzsh-pony/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mika%2Fzsh-pony/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mika%2Fzsh-pony/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mika","download_url":"https://codeload.github.com/mika/zsh-pony/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mika%2Fzsh-pony/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261248065,"owners_count":23130326,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T07:00:36.122Z","updated_at":"2025-06-22T06:30:44.409Z","avatar_url":"https://github.com/mika.png","language":null,"funding_links":[],"categories":["Tutorials","Shells"],"sub_categories":["Generic ZSH","ZSH"],"readme":"\u003c?xml version=\"1.0\" encoding=\"iso-8859-1\"?\u003e\n\u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n               \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"\u003e\n\u003chtml xmlns=\"http://www.w3.org/1999/xhtml\"\nlang=\"en\" xml:lang=\"en\"\u003e\n\u003chead\u003e\n\u003ctitle\u003eThe Zsh Pony\u003c/title\u003e\n\u003cmeta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\"/\u003e\n\u003cmeta name=\"generator\" content=\"Org-mode\"/\u003e\n\u003cmeta name=\"generated\" content=\"2011-07-29 21:33:35 CEST\"/\u003e\n\u003cmeta name=\"author\" content=\"\"/\u003e\n\u003cmeta name=\"description\" content=\"\"/\u003e\n\u003cmeta name=\"keywords\" content=\"\"/\u003e\n\u003cstyle type=\"text/css\"\u003e\n \u003c!--/*--\u003e\u003c![CDATA[/*\u003e\u003c!--*/\n  html { font-family: Times, serif; font-size: 12pt; }\n  .title  { text-align: center; }\n  .todo   { color: red; }\n  .done   { color: green; }\n  .tag    { background-color: #add8e6; font-weight:normal }\n  .target { }\n  .timestamp { color: #bebebe; }\n  .timestamp-kwd { color: #5f9ea0; }\n  .right  {margin-left:auto; margin-right:0px;  text-align:right;}\n  .left   {margin-left:0px;  margin-right:auto; text-align:left;}\n  .center {margin-left:auto; margin-right:auto; text-align:center;}\n  p.verse { margin-left: 3% }\n  pre {\n\tborder: 1pt solid #AEBDCC;\n\tbackground-color: #F3F5F7;\n\tpadding: 5pt;\n\tfont-family: courier, monospace;\n        font-size: 90%;\n        overflow:auto;\n  }\n  table { border-collapse: collapse; }\n  td, th { vertical-align: top;  }\n  th.right  { text-align:center;  }\n  th.left   { text-align:center;   }\n  th.center { text-align:center; }\n  td.right  { text-align:right;  }\n  td.left   { text-align:left;   }\n  td.center { text-align:center; }\n  dt { font-weight: bold; }\n  div.figure { padding: 0.5em; }\n  div.figure p { text-align: center; }\n  textarea { overflow-x: auto; }\n  .linenr { font-size:smaller }\n  .code-highlighted {background-color:#ffff00;}\n  .org-info-js_info-navigation { border-style:none; }\n  #org-info-js_console-label { font-size:10px; font-weight:bold;\n                               white-space:nowrap; }\n  .org-info-js_search-highlight {background-color:#ffff00; color:#000000;\n                                 font-weight:bold; }\n  /*]]\u003e*/--\u003e\n\u003c/style\u003e\n\u003cscript type=\"text/javascript\"\u003e\n\u003c!--/*--\u003e\u003c![CDATA[/*\u003e\u003c!--*/\n function CodeHighlightOn(elem, id)\n {\n   var target = document.getElementById(id);\n   if(null != target) {\n     elem.cacheClassElem = elem.className;\n     elem.cacheClassTarget = target.className;\n     target.className = \"code-highlighted\";\n     elem.className   = \"code-highlighted\";\n   }\n }\n function CodeHighlightOff(elem, id)\n {\n   var target = document.getElementById(id);\n   if(elem.cacheClassElem)\n     elem.className = elem.cacheClassElem;\n   if(elem.cacheClassTarget)\n     target.className = elem.cacheClassTarget;\n }\n/*]]\u003e*///--\u003e\n\u003c/script\u003e\n\n\u003c/head\u003e\n\u003cbody\u003e\n\u003cdiv id=\"content\"\u003e\n\n\u003ch1 class=\"title\"\u003eThe Zsh Pony\u003c/h1\u003e\n\u003cp\u003e============\n\u003c/p\u003e\n\n\u003cdiv id=\"table-of-contents\"\u003e\n\u003ch2\u003eTable of Contents\u003c/h2\u003e\n\u003cdiv id=\"text-table-of-contents\"\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#sec-1\"\u003e1 Preface \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-2\"\u003e2 Grml-zshrc \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-3\"\u003e3 Switching directories for lazy people \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-4\"\u003e4 Share history file amongst all Zsh sessions, ignoring dupes \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-5\"\u003e5 Option Setting in Zsh, AKA setopt* \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-6\"\u003e6 Replace spaces in filenames with a underline \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-7\"\u003e7 Fast Manpage access \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-8\"\u003e8 Completion System \u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#sec-8-1\"\u003e8.1 Enable completion \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-8-2\"\u003e8.2 Menu Selection \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-8-3\"\u003e8.3 Use colors in completion \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-8-4\"\u003e8.4 Pick item but stay in the menu \u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-9\"\u003e9 Globbing / Glob Qualifiers \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-10\"\u003e10 Keybindings \u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#sec-10-1\"\u003e10.1 Run `bindkey` to get a listing of currently active keybindings \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-10-2\"\u003e10.2 Get emacs-like keybindings \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-10-3\"\u003e10.3 Tip: run \"bindkey ctrl-v \u0026lt;keys\u0026gt;\" to find out which action is bount to a key \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-10-4\"\u003e10.4 Some interesting keybindings \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-10-5\"\u003e10.5 Remove last part from directory name \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-10-6\"\u003e10.6 Keybindings {up,down}-line-or-search and history-beginning-search-{backward,forward}-end \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-10-7\"\u003e10.7 Incremental search with history-incremental-pattern-search-backward: \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-10-8\"\u003e10.8 Zsh Line Editor (AKA zle) \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-10-9\"\u003e10.9 Edit command line in editor \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-10-10\"\u003e10.10 Insert a timestamp on the command line (yyyy-mm-dd) \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-10-11\"\u003e10.11 Insert last typed word \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-10-12\"\u003e10.12 Complete word from history with menu \u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-11\"\u003e11 Loadable modules \u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#sec-11-1\"\u003e11.1 Play tetris \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-11-2\"\u003e11.2 URL quoting \u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-12\"\u003e12 Prompt \u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#sec-12-1\"\u003e12.1 Exit code in prompt, if it's not exit code 0 \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-12-2\"\u003e12.2 Special functions \u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#sec-12-2-1\"\u003e12.2.1 precmd(): executed before each prompt - e.g. for setting prompt information \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-12-2-2\"\u003e12.2.2 preexec(): running before every command - e.g. for setting GNU screen title \u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-12-3\"\u003e12.3 RPOMPT with a smiley (note: the version in grml-zshrc is more sophisticated -\u0026gt; moving smiley) \u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-13\"\u003e13 Get VCS information into your prompt - vcs_info \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-14\"\u003e14 Hashed directories \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-15\"\u003e15 On-the-fly editing of variables \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-16\"\u003e16 History \u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#sec-16-1\"\u003e16.1 fc \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-16-2\"\u003e16.2 Top 10 commands \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-16-3\"\u003e16.3 Check your history for most frequently used commands and create aliases/functions for them (AKA top10): \u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-17\"\u003e17 Text replacing \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-18\"\u003e18 Suffix aliases \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-19\"\u003e19 Grml-zshrc specific stuff \u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#sec-19-1\"\u003e19.1 List changelog of a Debian package \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-19-2\"\u003e19.2 In-place mkdir to create directory under cursor or the selected area \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-19-3\"\u003e19.3 Create a temporary directory and change cwd to it \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-19-4\"\u003e19.4 Directory specific shell configuration with Zsh \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-19-5\"\u003e19.5 Smart cd \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-19-6\"\u003e19.6 grml-zsh-fg \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-19-7\"\u003e19.7 sudo-command-line \u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-20\"\u003e20 Fast directory switching \u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#sec-20-1\"\u003e20.1 check out \"dirstack handling\" in grml-zshrc for persistent directory stack feature \u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-21\"\u003e21 Speed up typing \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-22\"\u003e22 FAQ \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-23\"\u003e23 Important Resources \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-24\"\u003e24 Credits \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#sec-25\"\u003e25 Copyright \u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-1\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-1\"\u003e\u003cspan class=\"section-number-2\"\u003e1\u003c/span\u003e Preface \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-1\"\u003e\n\n\n\u003cp\u003e\n  The Zsh defaults to a minimalistic configuration which doesn't show the\n  potential behind this powerful and flexible shell. The Zsh pony project\n  provides a list of really hot stuff of what's possible with Zsh.\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-2\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-2\"\u003e\u003cspan class=\"section-number-2\"\u003e2\u003c/span\u003e Grml-zshrc \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-2\"\u003e\n\n\u003cp\u003eGrab a fully featured Zsh configuration:\n\u003c/p\u003e\n\n\n\u003cpre class=\"example\"\u003e% wget -O .zshrc        http://git.grml.org/f/grml-etc-core/etc/zsh/zshrc\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-3\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-3\"\u003e\u003cspan class=\"section-number-2\"\u003e3\u003c/span\u003e Switching directories for lazy people \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-3\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% setopt autocd \u0026amp;\u0026amp; /tmp\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-4\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-4\"\u003e\u003cspan class=\"section-number-2\"\u003e4\u003c/span\u003e Share history file amongst all Zsh sessions, ignoring dupes \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-4\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% setopt append_history share_history histignorealldups\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-5\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-5\"\u003e\u003cspan class=\"section-number-2\"\u003e5\u003c/span\u003e Option Setting in Zsh, AKA setopt* \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-5\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% setopt $OPTION\n% man zshoptions\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-6\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-6\"\u003e\u003cspan class=\"section-number-2\"\u003e6\u003c/span\u003e Replace spaces in filenames with a underline \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-6\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% autoload -U zmv\n% touch 1\\ 2  3\\ 4\\ 5\n% zmv '* *' '$f:gs/ /_'\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-7\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-7\"\u003e\u003cspan class=\"section-number-2\"\u003e7\u003c/span\u003e Fast Manpage access \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-7\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% autoload run-help\n% echo foo | xargs \u0026lt;esc-h\u0026gt;\n\nand then:\n\n% git commit\u0026lt;esc-h\u0026gt;\n\nor even ('g' being an alias for git and 'co' and git alias for commit):\n\n% g co\u0026lt;esc-h\u0026gt;\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-8\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-8\"\u003e\u003cspan class=\"section-number-2\"\u003e8\u003c/span\u003e Completion System \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-8\"\u003e\n\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-8-1\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-8-1\"\u003e\u003cspan class=\"section-number-3\"\u003e8.1\u003c/span\u003e Enable completion \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-8-1\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% autoload compinit \u0026amp;\u0026amp; compinit\n% kill c\u0026lt;tab\u0026gt;\n% man z\u0026lt;tab\u0026gt;\n% dpkg -L \u0026lt;tab\u0026gt;\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-8-2\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-8-2\"\u003e\u003cspan class=\"section-number-3\"\u003e8.2\u003c/span\u003e Menu Selection \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-8-2\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% zstyle ':completion:*' menu select\n\u003c/pre\u003e\n\n\n\n\u003cp\u003e\nLayout is :completion:FUNCTION:COMPLETER:COMMAND-OR-MAGIC-CONTEXT:ARGUMENT:TAG\n\u003c/p\u003e\n\u003cp\u003e\nTip: Get completion help running 'ctrl-x h'.\n\u003c/p\u003e\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-8-3\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-8-3\"\u003e\u003cspan class=\"section-number-3\"\u003e8.3\u003c/span\u003e Use colors in completion \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-8-3\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003ezstyle ':completion:*:default'         list-colors ${(s.:.)LS_COLORS}\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-8-4\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-8-4\"\u003e\u003cspan class=\"section-number-3\"\u003e8.4\u003c/span\u003e Pick item but stay in the menu \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-8-4\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% bindkey -M menuselect \"+\" accept-and-menu-complete\n% ls \u0026lt;tab\u0026gt; +\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-9\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-9\"\u003e\u003cspan class=\"section-number-2\"\u003e9\u003c/span\u003e Globbing / Glob Qualifiers \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-9\"\u003e\n\n\u003cp\u003eMakes find(1) useless for many jobs.\n\u003c/p\u003e\n\n\n\u003cpre class=\"example\"\u003e% setopt extendedglob\n% rm ../debianpackage(.)   # remove files only\n% ls -d *(/)               # list directories only\n% ls /etc/*(@)             # list symlinks only\n% ls -l *.(png|jpg|gif)    # list pictures only\n% ls *(*)                  # list executables only\n% ls /etc/**/zsh           # which directories contain 'zsh'?\n% ls **/*(-@)              # list dangling symlinks ('**' recurses down directory trees)\n% ls foo*~*bar*            # match everything that starts with foo but doesn't contain bar\n\u003c/pre\u003e\n\n\n\n\u003cp\u003e\nThe e glob qualifier -  e.g. to match all files of which file\nsays that they are JPEGs:\n\u003c/p\u003e\n\n\n\n\u003cpre class=\"example\"\u003e% ls *(e:'file $REPLY | grep -q JPEG':)\n\u003c/pre\u003e\n\n\n\n\u003cul\u003e\n\u003cli\u003e(#s) or (#e) for what ^ and $ are in regexps (beginning of line/end of line)\n\u003c/li\u003e\n\u003cli\u003e(#b) or (#m) to enable backreferences\n\u003c/li\u003e\n\u003cli\u003e(#i) to match case insensitive\n\u003c/li\u003e\n\u003cli\u003e(#a) to match approximately (certain errors are ignored, e.g. \"(#a1)foo*\" matches the string \"ofobar\")\n\u003c/li\u003e\n\u003c/ul\u003e\n\n\n\u003cp\u003e\nTip: run e.g. `ls *(\u0026lt;tab\u0026gt;` to get help regarding globbing.\n\u003c/p\u003e\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-10\"\u003e\u003cspan class=\"section-number-2\"\u003e10\u003c/span\u003e Keybindings \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-10\"\u003e\n\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10-1\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-10-1\"\u003e\u003cspan class=\"section-number-3\"\u003e10.1\u003c/span\u003e Run `bindkey` to get a listing of currently active keybindings \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-10-1\"\u003e\n\n\u003cp\u003eNotes:\n\u003c/p\u003e\u003col\u003e\n\u003cli\u003e^ := ctrl\n\u003c/li\u003e\n\u003cli\u003e^[ := esc\n\u003c/li\u003e\n\u003c/ol\u003e\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10-2\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-10-2\"\u003e\u003cspan class=\"section-number-3\"\u003e10.2\u003c/span\u003e Get emacs-like keybindings \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-10-2\"\u003e\n\n\u003cp\u003eZsh defaults to vi keybindings ('bindkey -v') if $VISUAL or $EDITOR contain string 'vi'.\nRun 'bindkey -e' to get emacs-like keybindings then.\n\u003c/p\u003e\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10-3\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-10-3\"\u003e\u003cspan class=\"section-number-3\"\u003e10.3\u003c/span\u003e Tip: run \"bindkey ctrl-v \u0026lt;keys\u0026gt;\" to find out which action is bount to a key \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-10-3\"\u003e\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10-4\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-10-4\"\u003e\u003cspan class=\"section-number-3\"\u003e10.4\u003c/span\u003e Some interesting keybindings \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-10-4\"\u003e\n\n\u003ctable border=\"2\" cellspacing=\"0\" cellpadding=\"6\" rules=\"groups\" frame=\"hsides\"\u003e\n\u003ccaption\u003e\u003c/caption\u003e\n\u003ccolgroup\u003e\u003ccol class=\"left\" /\u003e\u003ccol class=\"left\" /\u003e\n\u003c/colgroup\u003e\n\u003cthead\u003e\n\u003ctr\u003e\u003cth scope=\"col\" class=\"left\"\u003eKeybinding\u003c/th\u003e\u003cth scope=\"col\" class=\"left\"\u003eMeaning\u003c/th\u003e\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ectrl-d\u003c/td\u003e\u003ctd class=\"left\"\u003ecomplete + EOF\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ectrl-l\u003c/td\u003e\u003ctd class=\"left\"\u003eclear screen\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ectrl-w\u003c/td\u003e\u003ctd class=\"left\"\u003edelete last word\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ectrl-_\u003c/td\u003e\u003ctd class=\"left\"\u003eundo\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003etab\u003c/td\u003e\u003ctd class=\"left\"\u003ecomplete and take first result\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003eesc-.\u003c/td\u003e\u003ctd class=\"left\"\u003einsert last parameter of last typed command (similar to typing !$)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ectrl-a\u003c/td\u003e\u003ctd class=\"left\"\u003ebegin of line\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ectrl-e\u003c/td\u003e\u003ctd class=\"left\"\u003eend of line\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ealt-'\u003c/td\u003e\u003ctd class=\"left\"\u003equote-line ('')\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ealt-?\u003c/td\u003e\u003ctd class=\"left\"\u003ewhich-command\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ectrl-k\u003c/td\u003e\u003ctd class=\"left\"\u003ekill line\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ectrl-u\u003c/td\u003e\u003ctd class=\"left\"\u003ekill while line (kill-ring)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ectrl-w\u003c/td\u003e\u003ctd class=\"left\"\u003ecopy last word (kill-ring)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ectrl-y\u003c/td\u003e\u003ctd class=\"left\"\u003eyank (insert kill-ring)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003eesc-q\u003c/td\u003e\u003ctd class=\"left\"\u003epush line\u003c/td\u003e\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10-5\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-10-5\"\u003e\u003cspan class=\"section-number-3\"\u003e10.5\u003c/span\u003e Remove last part from directory name \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-10-5\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% slash-backward-kill-word() {\n    local WORDCHARS=\"${WORDCHARS:s@/@}\"\n    zle backward-kill-word\n}\n% zle -N slash-backward-kill-word\n% bindkey '\\e^?' slash-backward-kill-word\n% cd /usr/share/doc/mutt/examples/\u0026lt;alt+backspace\u0026gt;\n\nNote: configured by default in grml-zshrc, so ready for usage out-of-the-box.\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10-6\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-10-6\"\u003e\u003cspan class=\"section-number-3\"\u003e10.6\u003c/span\u003e Keybindings {up,down}-line-or-search and history-beginning-search-{backward,forward}-end \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-10-6\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% echo 123\n% echo 234\n% ls\nand then:\n% echo \u0026lt;cursor-up|down\u0026gt;\nvs.\n% echo 2\u0026lt;page-up|down\u0026gt;\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10-7\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-10-7\"\u003e\u003cspan class=\"section-number-3\"\u003e10.7\u003c/span\u003e Incremental search with history-incremental-pattern-search-backward: \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-10-7\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% \u0026lt;ctrl-r\u0026gt;scp*r\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10-8\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-10-8\"\u003e\u003cspan class=\"section-number-3\"\u003e10.8\u003c/span\u003e Zsh Line Editor (AKA zle) \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-10-8\"\u003e\n\n\u003col\u003e\n\u003cli\u003eIt's what readline is for bash (move, delete, copy words/lines/\u0026hellip;)\n\u003c/li\u003e\n\u003cli\u003eBasic layout of custom widgets, used like functions:\n\u003c/li\u003e\n\u003c/ol\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% foobar() { LBUFFER=\"foobar $LBUFFER\"; } # function\n% zle -N foobar         # declare function as bindable widget\n% bindkey '^x^s' foobar # bind command to a keybinding\n\u003c/pre\u003e\n\n\n\u003col\u003e\n\u003cli\u003ectrl-x-z provides help\u003csub\u003ezle\u003c/sub\u003e\u003csub\u003eparse\u003c/sub\u003e\u003csub\u003ekeybindings\u003c/sub\u003e in grml-zshrc\n\u003c/li\u003e\n\u003c/ol\u003e\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10-9\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-10-9\"\u003e\u003cspan class=\"section-number-3\"\u003e10.9\u003c/span\u003e Edit command line in editor \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-10-9\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% autoload edit-command-line \u0026amp;\u0026amp; zle -N edit-command-line\n% bindkey '\\ee' edit-command-line\n% $SOME_COMMAND_LINE \u0026lt;esc-e\u0026gt;\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10-10\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-10-10\"\u003e\u003cspan class=\"section-number-3\"\u003e10.10\u003c/span\u003e Insert a timestamp on the command line (yyyy-mm-dd) \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-10-10\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003einsert-datestamp() { LBUFFER+=${(%):-'%D{%Y-%m-%d}'}; }\nzle -N insert-datestamp\nbindkey '^Ed' insert-datestamp\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10-11\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-10-11\"\u003e\u003cspan class=\"section-number-3\"\u003e10.11\u003c/span\u003e Insert last typed word \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-10-11\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% insert-last-typed-word() { zle insert-last-word -- 0 -1 };\n% zle -N insert-last-typed-word;\n% bindkey \"\\em\" insert-last-typed-word\n% mv foobar \u0026lt;esc-m\u0026gt;\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-10-12\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-10-12\"\u003e\u003cspan class=\"section-number-3\"\u003e10.12\u003c/span\u003e Complete word from history with menu \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-10-12\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% zle -C hist-complete complete-word _generic\n% zstyle ':completion:hist-complete:*' completer _history\n% bindkey \"^X^X\" hist-complete\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-11\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-11\"\u003e\u003cspan class=\"section-number-2\"\u003e11\u003c/span\u003e Loadable modules \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-11\"\u003e\n\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-11-1\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-11-1\"\u003e\u003cspan class=\"section-number-3\"\u003e11.1\u003c/span\u003e Play tetris \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-11-1\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% autoload -U tetris\n% tetris\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-11-2\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-11-2\"\u003e\u003cspan class=\"section-number-3\"\u003e11.2\u003c/span\u003e URL quoting \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-11-2\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% autoload -U url-quote-magic\n% zle -N self-insert url-quote-magic\n\u003c/pre\u003e\n\n\n\u003cp\u003e\nDisclaimer: annoying when using e.g. \u003ca href=\"http://example.org/foo{1,2,3}.tgz\"\u003ehttp://example.org/foo{1,2,3}.tgz\u003c/a\u003e\n\u003c/p\u003e\u003c/div\u003e\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-12\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-12\"\u003e\u003cspan class=\"section-number-2\"\u003e12\u003c/span\u003e Prompt \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-12\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% autoload -U promptinit\n% promptinit\n% prompt fire\n% prompt \u0026lt;tab\u0026gt;\n\u003c/pre\u003e\n\n\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-12-1\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-12-1\"\u003e\u003cspan class=\"section-number-3\"\u003e12.1\u003c/span\u003e Exit code in prompt, if it's not exit code 0 \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-12-1\"\u003e\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-12-2\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-12-2\"\u003e\u003cspan class=\"section-number-3\"\u003e12.2\u003c/span\u003e Special functions \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-12-2\"\u003e\n\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-12-2-1\" class=\"outline-4\"\u003e\n\u003ch4 id=\"sec-12-2-1\"\u003e\u003cspan class=\"section-number-4\"\u003e12.2.1\u003c/span\u003e precmd(): executed before each prompt - e.g. for setting prompt information \u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-12-2-1\"\u003e\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-12-2-2\" class=\"outline-4\"\u003e\n\u003ch4 id=\"sec-12-2-2\"\u003e\u003cspan class=\"section-number-4\"\u003e12.2.2\u003c/span\u003e preexec(): running before every command - e.g. for setting GNU screen title \u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-12-2-2\"\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-12-3\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-12-3\"\u003e\u003cspan class=\"section-number-3\"\u003e12.3\u003c/span\u003e RPOMPT with a smiley (note: the version in grml-zshrc is more sophisticated -\u0026gt; moving smiley) \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-12-3\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003eprecmd () { RPROMPT=\"%(?..:()%\" }\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-13\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-13\"\u003e\u003cspan class=\"section-number-2\"\u003e13\u003c/span\u003e Get VCS information into your prompt - vcs_info \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-13\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003eautoload -Uz vcs_info\nprecmd() {\n  psvar=()\n  vcs_info\n  [[ -n $vcs_info_msg_0_ ]] \u0026amp;\u0026amp; psvar[1]=\"$vcs_info_msg_0_\"\n}\nPS1=\"%m%(1v.%F{green}%1v%f.)%# \"\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-14\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-14\"\u003e\u003cspan class=\"section-number-2\"\u003e14\u003c/span\u003e Hashed directories \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-14\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% hash -d doc=/usr/share/doc\n% cd ~doc\n% hash -d deb=/var/cache/apt/archives\n% sudo dpkg -i ~deb/foobar*deb\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-15\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-15\"\u003e\u003cspan class=\"section-number-2\"\u003e15\u003c/span\u003e On-the-fly editing of variables \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-15\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% vared PATH\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-16\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-16\"\u003e\u003cspan class=\"section-number-2\"\u003e16\u003c/span\u003e History \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-16\"\u003e\n\n\u003cp\u003eSupports csh style bang history expansion.\n\u003c/p\u003e\n\n\n\u003cpre class=\"example\"\u003e% history  # last 16 events\n% history -E 0  # all history events including date/time information\n% !23      # Re-execute history command 23\n% !!       # The last command.\n% !$       # Last word of the last command.\n% !-2      # The last but one command.\n% !-2$     # The last word of the command before the last command.\n% !#$      # The last word of the current command line.\n% !#0      # The first word of the current command line.\n% !?foo    # The last command that matches the pattern `foo'.\n% !?foo?1  # The second word of the last command line that matches `foo'.\n\u003c/pre\u003e\n\n\n\n\u003cp\u003e\n\u0026hellip;and that's really just the start. History expansion is extremely versatile\nand powerful - but also a bit cryptic for the untrained eye. Practice, young\npadawan, makes perfect. .o( man zshexpn | less -p '^HISTO.*ANSION$' )\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-16-1\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-16-1\"\u003e\u003cspan class=\"section-number-3\"\u003e16.1\u003c/span\u003e fc \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-16-1\"\u003e\n\n\u003cul\u003e\n\u003cli\u003efc -p/fc -a/fc -P deals with the \"history stack\"\n\u003c/li\u003e\n\u003cli\u003e\"fc -p\" clears out the current history and starts with a new one,\n  until you run fc -P, which will restore the old history again\n\u003c/li\u003e\n\u003cli\u003eYou can use that to \"bind\" certain histories to specific directories.\n\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-16-2\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-16-2\"\u003e\u003cspan class=\"section-number-3\"\u003e16.2\u003c/span\u003e Top 10 commands \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-16-2\"\u003e\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-16-3\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-16-3\"\u003e\u003cspan class=\"section-number-3\"\u003e16.3\u003c/span\u003e Check your history for most frequently used commands and create aliases/functions for them (AKA top10): \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-16-3\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% print -l -- ${(o)history%% *} | uniq -c | sort -nr | head -n 10\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-17\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-17\"\u003e\u003cspan class=\"section-number-2\"\u003e17\u003c/span\u003e Text replacing \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-17\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% mkdir -p /tmp/linux-2.6.3{8,9}/demo\n% cd /tmp/linux-2.6.38/demo\n% cd 38 \u0026lt;tab\u0026gt;\n\n% echo foo\n% ^foo^bar\n\n% echo foo_bar\n% echo !$:s/foo/baz/\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-18\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-18\"\u003e\u003cspan class=\"section-number-2\"\u003e18\u003c/span\u003e Suffix aliases \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-18\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% alias -s txt=vim\n% foobar.txt\n% alias -s pdf=xpdf\n% print.pdf\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-19\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-19\"\u003e\u003cspan class=\"section-number-2\"\u003e19\u003c/span\u003e Grml-zshrc specific stuff \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-19\"\u003e\n\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-19-1\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-19-1\"\u003e\u003cspan class=\"section-number-3\"\u003e19.1\u003c/span\u003e List changelog of a Debian package \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-19-1\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% dchange $DEBIAN_PACKAGE\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-19-2\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-19-2\"\u003e\u003cspan class=\"section-number-3\"\u003e19.2\u003c/span\u003e In-place mkdir to create directory under cursor or the selected area \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-19-2\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% cp file /tmp/doesnotexist/\u0026lt;ctrl-xM\u0026gt;\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-19-3\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-19-3\"\u003e\u003cspan class=\"section-number-3\"\u003e19.3\u003c/span\u003e Create a temporary directory and change cwd to it \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-19-3\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% cdt\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-19-4\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-19-4\"\u003e\u003cspan class=\"section-number-3\"\u003e19.4\u003c/span\u003e Directory specific shell configuration with Zsh \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-19-4\"\u003e\n\n\u003cp\u003eSee \u003ca href=\"http://michael-prokop.at/blog/2009/05/30/directory-specific-shell-configuration-with-zsh/\"\u003ehttp://michael-prokop.at/blog/2009/05/30/directory-specific-shell-configuration-with-zsh/\u003c/a\u003e\nHint: do you remember the fc section? You can combine the directory specific shell configuration with 'fc -p $file'!\n\u003c/p\u003e\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-19-5\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-19-5\"\u003e\u003cspan class=\"section-number-3\"\u003e19.5\u003c/span\u003e Smart cd \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-19-5\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% which cd\ncd () {\n        if [[ -f ${1} ]]\n        then\n                [[ ! -e ${1:h} ]] \u0026amp;\u0026amp; return 1\n                print \"Correcting ${1} to ${1:h}\"\n                builtin cd ${1:h}\n        else\n                builtin cd ${1}\n        fi\n}\n% cd /etc/fstab\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-19-6\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-19-6\"\u003e\u003cspan class=\"section-number-3\"\u003e19.6\u003c/span\u003e grml-zsh-fg \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-19-6\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% vim # ... \u0026lt;ctrl-z\u0026gt;\n% echo foobar\n% \u0026lt;ctrl-z\u0026gt;\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-19-7\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-19-7\"\u003e\u003cspan class=\"section-number-3\"\u003e19.7\u003c/span\u003e sudo-command-line \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-19-7\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% which sudo-command-line\nsudo-command-line () {\n        [[ -z $BUFFER ]] \u0026amp;\u0026amp; zle up-history\n        if [[ $BUFFER != sudo\\ * ]]\n        then\n                BUFFER=\"sudo $BUFFER\"\n                CURSOR=$(( CURSOR+5 ))\n        fi\n}\n% gparted /dev/sda \u0026lt;ctrl-o s\u0026gt;\n\u003c/pre\u003e\n\n\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-20\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-20\"\u003e\u003cspan class=\"section-number-2\"\u003e20\u003c/span\u003e Fast directory switching \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-20\"\u003e\n\n\n\n\n\u003cpre class=\"example\"\u003e% cd -\u0026lt;tab\u0026gt;\n\u003c/pre\u003e\n\n\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-20-1\" class=\"outline-3\"\u003e\n\u003ch3 id=\"sec-20-1\"\u003e\u003cspan class=\"section-number-3\"\u003e20.1\u003c/span\u003e check out \"dirstack handling\" in grml-zshrc for persistent directory stack feature \u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-20-1\"\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-21\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-21\"\u003e\u003cspan class=\"section-number-2\"\u003e21\u003c/span\u003e Speed up typing \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-21\"\u003e\n\n\u003ctable border=\"2\" cellspacing=\"0\" cellpadding=\"6\" rules=\"groups\" frame=\"hsides\"\u003e\n\u003ccaption\u003e\u003c/caption\u003e\n\u003ccolgroup\u003e\u003ccol class=\"left\" /\u003e\u003ccol class=\"left\" /\u003e\n\u003c/colgroup\u003e\n\u003cthead\u003e\n\u003ctr\u003e\u003cth scope=\"col\" class=\"left\"\u003eLong version\u003c/th\u003e\u003cth scope=\"col\" class=\"left\"\u003eShort version\u003c/th\u003e\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003efor i in $(seq 2 9); do echo $i ; done\u003c/td\u003e\u003ctd class=\"left\"\u003efor i in {2..9}; echo $i\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003els $(which vim)\u003c/td\u003e\u003ctd class=\"left\"\u003els =vim\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003ecat bar baz $PIPECHAR sort\u003c/td\u003e\u003ctd class=\"left\"\u003esort \u0026lt;b{ar,az}\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003els /usr/share/doc/mutt/examples\u003c/td\u003e\u003ctd class=\"left\"\u003els /u/s/d/m/e\u0026lt;tab\u0026gt;\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003egzip -cd foo.gz \u0026amp;\u0026amp; less foo\u003c/td\u003e\u003ctd class=\"left\"\u003eless \u0026lt;(gzip -cd foo.gz)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003els \u0026gt;file1; ls \u0026gt;file2; ls \u0026gt;file3\u003c/td\u003e\u003ctd class=\"left\"\u003els \u0026gt;file1 \u0026gt;file2 \u0026gt;file3\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003e-\u003c/td\u003e\u003ctd class=\"left\"\u003eless \u0026lt;file1 \u0026lt;file2\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003e-\u003c/td\u003e\u003ctd class=\"left\"\u003ediff \u0026lt;(sort foo) \u0026lt;(sort bar)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd class=\"left\"\u003e-\u003c/td\u003e\u003ctd class=\"left\"\u003expdf =(zcat ~doc/grml-docs/zsh/grml-zsh-refcard.pdf.gz)\u003c/td\u003e\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-22\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-22\"\u003e\u003cspan class=\"section-number-2\"\u003e22\u003c/span\u003e FAQ \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-22\"\u003e\n\n\u003col\u003e\n\u003cli\u003eQ: How to I get a listing of all my currently in use options?\n\n\u003cp\u003e\n  Answer:\n\u003c/p\u003e\n\n\n\u003cpre class=\"example\"\u003e  setopt ksh_option_print \u0026amp;\u0026amp; setopt\n\nor:\n\n  printf '%s=%s\\n' \"${(@kv)options}\"\n\u003c/pre\u003e\n\n\n\u003c/li\u003e\n\u003cli\u003eQ: Why do I get \"zsh: command not found:\" even though I just installed the program?\n\n\u003cp\u003e\n  Answer: execute:\n\u003c/p\u003e\n\n\n\u003cpre class=\"example\"\u003e% rehash\n\u003c/pre\u003e\n\n\n\u003cp\u003e\n  or use completion system as provided by grml-zshrc (completion will rehash automatically).\n\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003eQ: What's this strange word splitting thing?\n\n\u003cp\u003e\n  Answer: see \u003ca href=\"http://zsh.sourceforge.net/FAQ/zshfaq03.html\"\u003ehttp://zsh.sourceforge.net/FAQ/zshfaq03.html\u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003cpre class=\"example\"\u003e% var=\"foo bar\"\n% args() { echo $#; }\n% args $var\n1\n% setopt shwordsplit\n% args $var\n2\n\u003c/pre\u003e\n\n\n\u003c/li\u003e\n\u003c/ol\u003e\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-23\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-23\"\u003e\u003cspan class=\"section-number-2\"\u003e23\u003c/span\u003e Important Resources \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-23\"\u003e\n\n\u003col\u003e\n\u003cli\u003eZsh Homepage: \u003ca href=\"http://zsh.sourceforge.net/\"\u003ehttp://zsh.sourceforge.net/\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003eZsh Wiki: \u003ca href=\"http://zshwiki.org\"\u003ehttp://zshwiki.org\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003eZsh Manpages: man zshall\n\u003c/li\u003e\n\u003cli\u003eZsh Reference Card: \u003ca href=\"http://www.bash2zsh.com/zsh_refcard/refcard.pdf\"\u003ehttp://www.bash2zsh.com/zsh_refcard/refcard.pdf\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003eUser's Guide to ZSH: \u003ca href=\"http://zsh.sourceforge.net/Guide/\"\u003ehttp://zsh.sourceforge.net/Guide/\u003c/a\u003e (old but still interesting)\n\u003c/li\u003e\n\u003cli\u003eZsh Talk by caphuso:  \u003ca href=\"http://ft.bewatermyfriend.org/comp/zshtalk.html\"\u003ehttp://ft.bewatermyfriend.org/comp/zshtalk.html\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003eEnglish Book: \u003ca href=\"http://www.bash2zsh.com/\"\u003ehttp://www.bash2zsh.com/\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003eGerman Book: \u003ca href=\"http://zshbuch.org/\"\u003ehttp://zshbuch.org/\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003eGrml's Zsh stuff: \u003ca href=\"http://grml.org/zsh/\"\u003ehttp://grml.org/zsh/\u003c/a\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-24\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-24\"\u003e\u003cspan class=\"section-number-2\"\u003e24\u003c/span\u003e Credits \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-24\"\u003e\n\n\n\u003cp\u003e\nThanks to Frank Terbeck for reviewing and his valuable feedback (which isn't limited to this document :)).\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-25\" class=\"outline-2\"\u003e\n\u003ch2 id=\"sec-25\"\u003e\u003cspan class=\"section-number-2\"\u003e25\u003c/span\u003e Copyright \u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-25\"\u003e\n\n\u003cp\u003e(c) 2011 by Michael Prokop \u0026lt;mika@grml.org\u0026gt;\n\u003c/p\u003e\n\u003cdiv id=\"footnotes\"\u003e\n\u003ch2 class=\"footnotes\"\u003eFootnotes: \u003c/h2\u003e\n\u003cdiv id=\"text-footnotes\"\u003e\n\u003cp class=\"footnote\"\u003e\u003csup\u003e\u003ca class=\"footnum\" name=\"fn.1\" href=\"#fnr.1\"\u003e1\u003c/a\u003e\u003c/sup\u003e DEFINITION NOT FOUND: 1\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"postamble\"\u003e\n\u003cp class=\"date\"\u003eDate: 2011-07-29 21:33:35 CEST\u003c/p\u003e\n\u003cp class=\"author\"\u003eAuthor: \u003c/p\u003e\n\u003cp class=\"creator\"\u003eOrg version 7.6 with Emacs version 23\u003c/p\u003e\n\u003ca href=\"http://validator.w3.org/check?uri=referer\"\u003eValidate XHTML 1.0\u003c/a\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmika%2Fzsh-pony","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmika%2Fzsh-pony","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmika%2Fzsh-pony/lists"}