adding the documents and editing tutorial
[kspaans/UnixTutorial] / documents-editing-etc.pod
1 =head1 So you want to write a document
2
3 You can do it on the shell, faster, better, and with less frustration than
4 with a gui word processor. This tutorial assumes some familiarity with the unix
5 shell, and will cover useful programs used for editing and processing documents
6 with the shell.
7
8 =head2 First you need a "real editor"
9
10 You might be familiar with C<pico> or C<nano>, however these editors lack 
11 I<power>. What do I mean by I<power> in a text editor? I mean the editor has
12 support for scripting, regular expressions, quick manipulations of text, an
13 easy way to interface with the shell, and support for various development
14 tools. You shouldn't have to quit to compile, run tests, and even attach to
15 a debugger (well, thats a touchy subject). The editor should also support
16 easy navigation of multi-file projects and syntax highlighting for whatever
17 languages you decide to use. A lot of these features will be covered in later
18 tutorials, for now just familiarize yourself with the basics.
19
20 There are two major players in the real editor market: GNU Emacs and vim
21 (short for vi improved). Both of these have grown out of the real editors of
22 the past and offer similar capabilities but different interfaces. I suggest
23 you try both tutorials and pick the one you like more. There is a long history
24 of bitter argument over which is superior, most of the debate is largely
25 irelevant rhetoric, and the rest is personal opinion, so pick what you prefer
26 and don't fear switching.
27
28 To run the vim tutor, at the prompt type C<vimtutor>.
29
30 To run the emacs tutorial, start C<emacs> and then press C<Control+h> C<t>.
31
32 From there, make your choice and we'll continue on with the tutorial.
33
34 =head2 Latex section
35
36 =for commentary
37
38 Imma get me a m3lawren to write this -- ebering
39
40 =cut
41
42 =head2 Searching documents 
43
44 There is a program called C<grep> which stands for a common sequence of
45 commands in one of C<vim>'s predecessors: B<g>lobal B<r>egular B<e>xpression
46 B<p>rint. This ammounted to displaying the lines in the open file that matched
47 a pattern. C<grep> was created to expedite this process, and grew to be a
48 general purpose search program for finding things in files. 
49
50 C<grep> searches for matches to a pattern specified in a format called a
51 regular expression. The most basic regular expressions are simply strings
52 that are searched for, but other patterns can be specified through 
53 I<metacharacters> which specify quantities of characters and classes of
54 characters to match. To tell grep you're using an B<e>xtended pattern,
55 either use C<egrep> or pass the patern after the B<-E> flag. 
56
57 In an extended pattern there are quantifier characters C<?> C<*> C<+> which 
58 stand for zero or one (is it thereB<?>), zero or more (like a wild card B<*>), 
59 and one or more (wild card B<+> 1) of the preceeding character, respectively.
60 You can be more specific in the number of characters you want to match, using
61 C<{}> with either a number (C<{3})> or a range of numbers (C<{3,5}>).
62
63 There are also metacharacters that specify I<classes> of character, i.e. C<\w> 
64 matches on word characters, or [:alphanum:] matches alphanumeric characters. 
65 You can specify your own classes with C<[]>, listing all the characters you 
66 wish to match or character ranges like C<[a-z]> to specify the lower case 
67 alphabet. If you want a hyphen, make sure its either in the range or the first 
68 or last character. To find a long list of predefined classes check the man page
69 for C<grep>. 
70
71 To specify multiple alternative patterns separate them with a C<|> character,
72 and to create subgroups in which there are options wrap them in C<()>, like
73 this: C<.*\.(jpg|jpeg|gif|png)> to match all images (C<.> matches any character 
74 unless you escape it).
75
76 C<grep> can also recurse down directories with C<-R>, to seach many files, and
77 accept input on a pipe to filter it, as mentioned in the previous tutorial.
78
79 =head2 Bulk editing
80
81 Often it becomes necessary to edit many, many, documents with the same minor
82 trivial correction (like chainging colour to color because you're going to the
83 states). Do you really, really want to do it by hand? Really? I didn't think 
84 think so. It would be much nicer if substitution could be done all at once by
85 a program, or in the editor. Here's the good news: a program exists, and a real
86 editor will have this feature.
87
88 To specify a find and replace most programs in unix use a I<substitution
89 expression> wich is part string and part regular expression. Looking like
90 C<s/regex/string/> these expressions instruct the program to replace every
91 match of C<regex> with C<string>. In the previous section