Merge remote-tracking branch 'origin/github/pr/45'
[grml.org.git] / zsh / zsh-workshop.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"\r
2     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
4 <head>\r
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
6 <meta name="generator" content="AsciiDoc 7.1.2" />\r
7 <style type="text/css">\r
8 /* Debug borders */\r
9 p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {\r
10 /*\r
11   border: 1px solid red;\r
12 */\r
13 }\r
14 \r
15 body {\r
16   margin: 1em 5% 1em 5%;\r
17 }\r
18 \r
19 a {\r
20   color: blue;\r
21   text-decoration: underline;\r
22 }\r
23 a:visited {\r
24   color: fuchsia;\r
25 }\r
26 \r
27 em {\r
28   font-style: italic;\r
29 }\r
30 \r
31 strong {\r
32   font-weight: bold;\r
33 }\r
34 \r
35 tt {\r
36   color: navy;\r
37 }\r
38 \r
39 h1, h2, h3, h4, h5, h6 {\r
40   color: #527bbd;\r
41   font-family: sans-serif;\r
42   margin-top: 1.2em;\r
43   margin-bottom: 0.5em;\r
44   line-height: 1.3;\r
45 }\r
46 \r
47 h1 {\r
48   border-bottom: 2px solid silver;\r
49 }\r
50 h2 {\r
51   border-bottom: 2px solid silver;\r
52   padding-top: 0.5em;\r
53 }\r
54 \r
55 div.sectionbody {\r
56   font-family: serif;\r
57   margin-left: 0;\r
58 }\r
59 \r
60 hr {\r
61   border: 1px solid silver;\r
62 }\r
63 \r
64 p {\r
65   margin-top: 0.5em;\r
66   margin-bottom: 0.5em;\r
67 }\r
68 \r
69 pre {\r
70   padding: 0;\r
71   margin: 0;\r
72 }\r
73 \r
74 span#author {\r
75   color: #527bbd;\r
76   font-family: sans-serif;\r
77   font-weight: bold;\r
78   font-size: 1.2em;\r
79 }\r
80 span#email {\r
81 }\r
82 span#revision {\r
83   font-family: sans-serif;\r
84 }\r
85 \r
86 div#footer {\r
87   font-family: sans-serif;\r
88   font-size: small;\r
89   border-top: 2px solid silver;\r
90   padding-top: 0.5em;\r
91   margin-top: 4.0em;\r
92 }\r
93 div#footer-text {\r
94   float: left;\r
95   padding-bottom: 0.5em;\r
96 }\r
97 div#footer-badges {\r
98   float: right;\r
99   padding-bottom: 0.5em;\r
100 }\r
101 \r
102 div#preamble,\r
103 div.tableblock, div.imageblock, div.exampleblock, div.verseblock,\r
104 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
105 div.admonitionblock {\r
106   margin-right: 10%;\r
107   margin-top: 1.5em;\r
108   margin-bottom: 1.5em;\r
109 }\r
110 div.admonitionblock {\r
111   margin-top: 2.5em;\r
112   margin-bottom: 2.5em;\r
113 }\r
114 \r
115 div.content { /* Block element content. */\r
116   padding: 0;\r
117 }\r
118 \r
119 /* Block element titles. */\r
120 div.title, caption.title {\r
121   font-family: sans-serif;\r
122   font-weight: bold;\r
123   text-align: left;\r
124   margin-top: 1.0em;\r
125   margin-bottom: 0.5em;\r
126 }\r
127 div.title + * {\r
128   margin-top: 0;\r
129 }\r
130 \r
131 td div.title:first-child {\r
132   margin-top: 0.0em;\r
133 }\r
134 div.content div.title:first-child {\r
135   margin-top: 0.0em;\r
136 }\r
137 div.content + div.title {\r
138   margin-top: 0.0em;\r
139 }\r
140 \r
141 div.sidebarblock > div.content {\r
142   background: #ffffee;\r
143   border: 1px solid silver;\r
144   padding: 0.5em;\r
145 }\r
146 \r
147 div.listingblock > div.content {\r
148   border: 1px solid silver;\r
149   background: #f4f4f4;\r
150   padding: 0.5em;\r
151 }\r
152 \r
153 div.quoteblock > div.content {\r
154   padding-left: 2.0em;\r
155 }\r
156 \r
157 div.attribution {\r
158   text-align: right;\r
159 }\r
160 div.verseblock + div.attribution {\r
161   text-align: left;\r
162 }\r
163 \r
164 div.admonitionblock .icon {\r
165   vertical-align: top;\r
166   font-size: 1.1em;\r
167   font-weight: bold;\r
168   text-decoration: underline;\r
169   color: #527bbd;\r
170   padding-right: 0.5em;\r
171 }\r
172 div.admonitionblock td.content {\r
173   padding-left: 0.5em;\r
174   border-left: 2px solid silver;\r
175 }\r
176 \r
177 div.exampleblock > div.content {\r
178   border-left: 2px solid silver;\r
179   padding: 0.5em;\r
180 }\r
181 \r
182 div.verseblock div.content {\r
183   white-space: pre;\r
184 }\r
185 \r
186 div.imageblock div.content { padding-left: 0; }\r
187 div.imageblock img { border: 1px solid silver; }\r
188 span.image img { border-style: none; }\r
189 \r
190 dl {\r
191   margin-top: 0.8em;\r
192   margin-bottom: 0.8em;\r
193 }\r
194 dt {\r
195   margin-top: 0.5em;\r
196   margin-bottom: 0;\r
197   font-style: italic;\r
198 }\r
199 dd > *:first-child {\r
200   margin-top: 0;\r
201 }\r
202 \r
203 ul, ol {\r
204     list-style-position: outside;\r
205 }\r
206 ol.olist2 {\r
207   list-style-type: lower-alpha;\r
208 }\r
209 \r
210 div.tableblock > table {\r
211   border: 3px solid #527bbd;\r
212 }\r
213 thead {\r
214   font-family: sans-serif;\r
215   font-weight: bold;\r
216 }\r
217 tfoot {\r
218   font-weight: bold;\r
219 }\r
220 \r
221 div.hlist {\r
222   margin-top: 0.8em;\r
223   margin-bottom: 0.8em;\r
224 }\r
225 td.hlist1 {\r
226   vertical-align: top;\r
227   font-style: italic;\r
228   padding-right: 0.8em;\r
229 }\r
230 td.hlist2 {\r
231   vertical-align: top;\r
232 }\r
233 \r
234 @media print {\r
235   div#footer-badges { display: none; }\r
236 }\r
237 /* Workarounds for IE6's broken and incomplete CSS2. */\r
238 \r
239 div.sidebar-content {\r
240   background: #ffffee;\r
241   border: 1px solid silver;\r
242   padding: 0.5em;\r
243 }\r
244 div.sidebar-title, div.image-title {\r
245   font-family: sans-serif;\r
246   font-weight: bold;\r
247   margin-top: 0.0em;\r
248   margin-bottom: 0.5em;\r
249 }\r
250 \r
251 div.listingblock div.content {\r
252   border: 1px solid silver;\r
253   background: #f4f4f4;\r
254   padding: 0.5em;\r
255 }\r
256 \r
257 div.quoteblock-content {\r
258   padding-left: 2.0em;\r
259 }\r
260 \r
261 div.exampleblock-content {\r
262   border-left: 2px solid silver;\r
263   padding-left: 0.5em;\r
264 }\r
265 </style>\r
266 <title>zsh-workshop - 20061128</title>\r
267 </head>\r
268 <body>\r
269 <div id="header">\r
270 <h1>zsh-workshop - 20061128</h1>\r
271 </div>\r
272 <h2>Preface</h2>\r
273 <div class="sectionbody">\r
274 <p>The following documentation is <strong>not</strong> a full documentation of the zsh\r
275 workshop, it just documents some general stuff which might be useful for\r
276 workshop participants. Notice: some configuration/keybindings/&#8230; are not\r
277 set up on default zsh but used in <a href="http://grml.org/">grml</a>'s\r
278 configuration.</p>\r
279 </div>\r
280 <h2>Zsh?</h2>\r
281 <div class="sectionbody">\r
282 <p><em>'Zsh is a shell designed for interactive use, although it is also a\r
283 powerful scripting language. Many of the useful features of bash, ksh, and\r
284 tcsh were incorporated into zsh; many original features were added. </em>'</p>\r
285 <div class="literalblock">\r
286 <div class="content">\r
287 <pre><tt>-- http://zsh.dotsrc.org/</tt></pre>\r
288 </div></div>\r
289 <p>Merges the best from ksh, csh and bash! (<em>emulate sh + emulate ksh</em>)</p>\r
290 <p>More than 100 builtins, ~150 options + &gt;300 keybindings</p>\r
291 </div>\r
292 <h2>Configuration files</h2>\r
293 <div class="sectionbody">\r
294 <div class="literalblock">\r
295 <div class="content">\r
296 <pre><tt>wget -O ~/.zshrc http://hg.grml.org/grml-etc-core/raw-file/tip/etc/skel/.zshrc\r
297 wget -O ~/.zshrc.global http://hg.grml.org/grml-etc-core/raw-file/tip/etc/zsh/zshrc</tt></pre>\r
298 </div></div>\r
299 </div>\r
300 <h2>Useful modules and settings</h2>\r
301 <div class="sectionbody">\r
302 <div class="literalblock">\r
303 <div class="content">\r
304 <pre><tt>% setopt autocd &amp;&amp; /tmp   # cd /tmp\r
305 % setopt append_history share_history histignorealldups</tt></pre>\r
306 </div></div>\r
307 <div class="literalblock">\r
308 <div class="content">\r
309 <pre><tt>% autoload -U zmv        # zmv "programmable rename"\r
310 % zmv '* *' '$f:gs/ /_'  # Replace spaces in filenames with a underline</tt></pre>\r
311 </div></div>\r
312 <div class="literalblock">\r
313 <div class="content">\r
314 <pre><tt>% autoload run-help      # esc-h\r
315 % autoload compinit &amp;&amp; compinit\r
316 % autoload -U zed</tt></pre>\r
317 </div></div>\r
318 <div class="admonitionblock">\r
319 <table><tr>\r
320 <td class="icon">\r
321 <div class="title">Tip</div>\r
322 </td>\r
323 <td class="content">run <em>setopt ksh_option_print &amp;&amp; setopt</em> to get a listing of all\r
324 current settings</td>\r
325 </tr></table>\r
326 </div>\r
327 </div>\r
328 <h2>Globbing / Glob Qualifier</h2>\r
329 <div class="sectionbody">\r
330 <div class="literalblock">\r
331 <div class="content">\r
332 <pre><tt>% setopt extendedglob\r
333 % ls -d *.^c              # list all files excluding c-source files\r
334 % ls /etc/*(@)            # list symlinks only\r
335 % ls -l *.(png|jpg|gif)   # list pictures only\r
336 % ls *(*)                 # list executables only\r
337 % ls /etc/**/zsh          # which directories contain 'zsh'?\r
338 % ls **/*(-@)             # list dangling symlinks\r
339 % ls **/*(/^F)            # list empty directories</tt></pre>\r
340 </div></div>\r
341 <div class="admonitionblock">\r
342 <table><tr>\r
343 <td class="icon">\r
344 <div class="title">Tip</div>\r
345 </td>\r
346 <td class="content">run <em>H-Glob</em> on your grml system for getting help regarding globbing</td>\r
347 </tr></table>\r
348 </div>\r
349 </div>\r
350 <h2>Keybindings</h2>\r
351 <div class="sectionbody">\r
352 <p>Some very interesting ones (besides default <em>bindkey</em>):</p>\r
353 <div class="literalblock">\r
354 <div class="content">\r
355 <pre><tt>CTRL-d              complete / EOF\r
356 CTRL-l              clear-screen\r
357 CTRL-w              delete last word\r
358 CTRL-_              undo\r
359 TAB                 complete and take first result\r
360 ESC-.               insert last parameter of last typed command (similar to typing !$)\r
361 ESC-e               edit the current line in $EDITOR\r
362 ESC-h               call run-help for the 1st word on the commandline\r
363 ESC-m               insert last typed word\r
364 CTRL-E d            insert a timestamp on the commandline (yyyy-mm-dd)\r
365 CTRL-a              begin of line\r
366 CTRL-e              end of line\r
367 Alt-'               quote-line =&gt; ''\r
368 Alt-&lt;number&gt;-char   insert &lt;number&gt; of chars\r
369 Alt-?               which-command\r
370 CTRL-x+a            complete alias\r
371 CTRL-x+e            complete word\r
372 CTRL-k              kill line\r
373 CTRL-u              copy line\r
374 CTRL-w              copy last word\r
375 CTRL-y              yank (insert kill-ring)</tt></pre>\r
376 </div></div>\r
377 <div class="admonitionblock">\r
378 <table><tr>\r
379 <td class="icon">\r
380 <div class="title">Tip</div>\r
381 </td>\r
382 <td class="content">run "bindkey <em>ctrl-v &lt;keys&gt;</em>" to find out which action is bount to a key</td>\r
383 </tr></table>\r
384 </div>\r
385 </div>\r
386 <h2>History</h2>\r
387 <div class="sectionbody">\r
388 <div class="literalblock">\r
389 <div class="content">\r
390 <pre><tt>% history\r
391 % !23       # Re-execute history command 23\r
392 % ^foo^bar  # edit previous command replace foo by bar</tt></pre>\r
393 </div></div>\r
394 <p>Check your history for most frequently used commands and create\r
395 aliases/functions for them!</p>\r
396 <div class="literalblock">\r
397 <div class="content">\r
398 <pre><tt>% print -l -- ${(o)history%% *} | uniq -c | sort -nr | head -n 10</tt></pre>\r
399 </div></div>\r
400 </div>\r
401 <h2>"Unsorted Must Knows"</h2>\r
402 <div class="sectionbody">\r
403 <div class="literalblock">\r
404 <div class="content">\r
405 <pre><tt>% rehash                  # important for bash-users\r
406 % ls /u/s/d/x/exa&lt;TAB&gt;    # try it :)\r
407 % dpkg -i ~deb/foo.deb    # hash for /var/cache/apt/archives\r
408 % ls ~doc                 # hash /usr/share/doc\r
409 % ls =vim                 # ls $(which vim)\r
410 % sort &lt;f{oo,ubar}        # cat foo fubar | sort\r
411 % less &lt;(gzip -cd foo.gz) # gzip -cd foo.gz &amp;&amp; less foo\r
412 % ls &gt;file1 &gt;file2 &gt;file3\r
413 % less &lt;file1 &lt;file2\r
414 % vared PATH\r
415 % cd -&lt;tab&gt;\r
416 % echo {23..42}\r
417 % alias -s txt=vim\r
418 % RPROMPT=%T\r
419 % precmd () { RPROMPT="%(?..:()%" }\r
420 % xpdf =(zcat /usr/share/doc/grml-docs/zsh/grml-zsh-refcard.pdf.gz)\r
421 % w3m http://www.bash2zsh.com/zsh_refcard/refcard.pdf\r
422 % man zsh-lovers</tt></pre>\r
423 </div></div>\r
424 </div>\r
425 <h2>Ressources</h2>\r
426 <div class="sectionbody">\r
427 <div class="admonitionblock">\r
428 <table><tr>\r
429 <td class="icon">\r
430 <div class="title">Tip</div>\r
431 </td>\r
432 <td class="content">run <em>zsh-help</em> on your grml system to get some hints regarding zsh</td>\r
433 </tr></table>\r
434 </div>\r
435 <ul>\r
436 <li>\r
437 <p>\r
438 <a href="http://grml.org/zsh/">grml's zsh webpage</a>\r
439 </p>\r
440 </li>\r
441 <li>\r
442 <p>\r
443 <a href="http://www.bash2zsh.com/">Book: From Bash to Z Shell: Conquering the Command Line</a>\r
444 </p>\r
445 </li>\r
446 </ul>\r
447 </div>\r
448 <h2>About this document</h2>\r
449 <div class="sectionbody">\r
450 <p>(c) Michael Prokop &lt;mika@grml.org&gt;; HTML version powered by <a href="http://www.methods.co.nz/asciidoc/">asciidoc</a>.</p>\r
451 </div>\r
452 <div id="footer">\r
453 <div id="footer-text">\r
454 Last updated 28-Nov-2006 10:14:56 CEST\r
455 </div>\r
456 </div>\r
457 </body>\r
458 </html>\r