Learning the vi Editor

en.wikibooks.org

December 29, 2013

On the 28th of April 2012 the contents of the English as well as German Wikibooks and Wikipedia
projects were licensed under Creative Commons Attribution-ShareAlike 3.0 Unported license. A
URI to this license is given in the list of figures on page 103. If this document is a derived work
from the contents of one of these projects and the content was still licensed by the project under
this license at the time of derivation this document has to be licensed under the same, a similar or a
compatible license, as stated in section 4b of the license. The list of contributors is included in chapter
Contributors on page 101. The licenses GPL, LGPL and GFDL are included in chapter Licenses on
page 107, since this book and/or parts of it may or may not be licensed under one or more of these
licenses, and thus require inclusion of these licenses. The licenses of the figures are given in the list of
figures on page 103. This PDF was generated by the LATEX typesetting software. The LATEX source
code is included as an attachment (source.7z.txt) in this PDF file. To extract the source from
the PDF file, you can use the pdfdetach tool including in the poppler suite, or the http://www.
pdflabs.com/tools/pdftk-the-pdf-toolkit/ utility. Some PDF viewers may also let you save
the attachment to a file. After extracting it from the PDF file you have to rename it to source.7z.
To uncompress the resulting archive we recommend the use of http://www.7-zip.org/. The LATEX
source itself was generated by a program written by Dirk Hünniger, which is freely available under
an open source license from http://de.wikibooks.org/wiki/Benutzer:Dirk_Huenniger/wb2pdf.

Contents
0.1 Learning the vi Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1

Getting acquainted
1.1 Introduction . . . . .
1.2 Getting vi if you don't
1.3 Getting around vi . .
1.4 Continue . . . . . . .

.
.
.
.

3
3
5
5
7

2

Basic tasks
2.1 Vi is a modal editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Entering text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Command mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9
9
9
10

3

Making your work easier
3.1 More on commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13
13

4

Advanced tasks
4.1 Copying and Pasting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Adjusting the Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15
15
16

5

Details
5.1 Command line invocation . . . . .
5.2 Commands: Objects & Operators
5.3 'Strange' lines on the screen . . . .
5.4 Indenting and shifting . . . . . . .
5.5 Modelines . . . . . . . . . . . . . .
5.6 .exrc Configuration File . . . . . .
5.7 Tags . . . . . . . . . . . . . . . . .
5.8 EX commands in vi . . . . . . . .
5.9 Shell escape . . . . . . . . . . . . .
5.10 Execute command from Buffer . .
5.11 vi for Programmers . . . . . . . .
5.12 nroff/troff Typesetting Support . .

19
19
21
26
26
30
31
32
34
38
41
41
44

1

6

Vi clones

7

Vim
7.1 Overview . . . .
7.2 External links . .
7.3 Basic navigation
7.4 Modes . . . . . .
7.5 About this Book

. . .
have
. . .
. . .

. . . . . .
it already
. . . . . .
. . . . . .

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

47
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

49
50
50
51
52
58

III

. . . . . . . . . . . . . .Learning the vi Editor 7. . . . .1 GNU GENERAL PUBLIC LICENSE . . . . . . . common to many Unix and Unix-like operating systems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 ex Commands 10. . . . . . . . . . 81 81 9 BusyBox vi 9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The above text is a little example of how the vi editor's screen looks. . . . . .11 7. . . . . . . . . . . . . . .8 7. . 13. . . . . . . . . . . . . . . . .5 External link . . . . . . .14 7. . . . . . . . . . . . . .1 Invocation . . . . . . . 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 107 108 109 0. . . . . . . . . . . . . . .7 7. . . . . 85 86 86 95 95 97 11 Authors 11. . . . . . . . . Object oriented programming . . . . . . .3 GNU Lesser General Public License . . . . . . . . . . . . . . . . . . . .3 vi Options . . . . . . . . . . . . . . .1 Learning the vi Editor This book aims to teach you how to use the vi editor. . . . . . . . . . . . . . .13 7.10 7. . . Useful things for programmers to know Enhancing VIM . . . . . . . . . . . . . . . . . . 99 99 . . . . . . . . . . . . .vi like Emacs . . . . . . . . . . . . . . . . . . . . . . . . 13. . . . . . . . . . . . .1 Overview . . . 83 83 10 vi Reference 10. . . . . . . . . . . Full Screen Mode . . . . . . . . . . . . 10. . . . . . . . . . . Inserting Text From a File or Register . . . . . .1 List of major contributors . . . . . . . . . . . . . . . Statements . . . . . .6 7. . 59 60 61 61 67 74 74 76 77 78 8 vile 8. . . . . . . . . . . . . . . . Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 GNU Free Documentation License . . . . . . . . . . . . . . . .15 Vim Help . . . . . . . . . . . . . . . ˜ ˜ ˜ ˜ ˜ "Learning_the_vi_editor" [New file]. . 1 . . . . . . . . . . . . . . . . . . . . . . . .12 7. . . . . . . . . . . . . . . . . .9 7. . . . . . . .1 Vile . . . . . . . . . . . . . 12 Contributors 101 List of Figures 103 13 Licenses 13.2 vi Commands . . . . . . . . . 10. . . . . . . . . Subprograms . . . . Data types .

.

was originally written by Bill Joy for BSD Unix in Berkeley in 1976 and became quickly part of many vendor-specific versions of the (at that time) original AT&T Unix. 1. one editor called vi. too.the Unix standard library for CRT screen handling. and not via the mouse or the cursor keys. one can argue that the program is indeed two editors in one. vi. which doesn't mean much. but is available on many other operating systems. Bill Joy later went on to co-found Sun Microsystems1 . vi stands for visual and was an enormous improvement of the classic Unix editor called ed.com 3 . although more powerful than edlin. Even if you use another editor you must have a passing knowledge of vi as an administrator. Although vi stands for visual. In fact.1. The visual mode is the prevailing mode. and became curses .1 Overview vi is a powerful editor that is ubiquitous amongst Unix and Unix-like operating systems. pronounced like 'vee eye'. vi's internal high-level screen control library was later separated. the termcap (terminal-capabilities) database was introduced (later replaced with the more flexible terminfo database). then you may know the MS-DOS edlin editor.1 Introduction 1. such as 'a' or '1'. ed is similar. It was later directly added to AT&T's System V Unix. It is also possible to choose the mode during startup. even on MS-DOS. pure usage of ex is rare. classic vi is mainly operated via the character keys. called ex.1 Getting acquainted 1. Sometimes vi is the only editor available when your computer crashes leaving a minimal system for you to repair. vi also has a line-mode. it becomes extremely convenient. It is possible to switch between line and visual mode during editing. <Ctrl-[> 1 http://www. and became the company's Chief Scientist at that time. If you are still familiar with MS-DOS.1. However. ed is a line-editor. If not the original vi. another called ex. vi also served as a kind of incubator for Unix's terminal control capabilities. <ESC>. there is usually at least a good clone available that runs on your system. Windows and the Macintosh. Because of vi's need to control the terminal and the many different types of terminals at that time. Once you are used to this.sun.2 Conventions <c> A single character. because there is less movement of the hands to the cursor keys or mouse involved.

E. sed(1) refers to Unix's sed command which is usually documented in section 1 of the Unix manual pages (sed is the Unix stream editor. <TAB> Indicates that the Tabulator key should be pressed <Ctrl-x>. a tool for manipulating text without user interaction). which is identical to Control and '['. started with <:>. <S-x>.org//en. <C-x> Indicates that the Control key and the 'x' key should be pressed simultaneously. 2 4 http://en. :q An Ex command. <Shift-x>. All commands in vi are case sensitive. <CR> Indicates that the Return (Enter) key should be pressed. unix-command(section) Sometimes references to Unix commands are used in this book.g. 'x' can be almost any other key on your keyboard. :set nocompatible represents a setting.org/wiki/regular_expression . For many Ex commands there is a long form (:quit) and a short form (:q). :global /pattern/ delete A Search pattern combined with an Ex command. /pattern/. ?pattern? A Search pattern. This style consists of the command's name followed by the section of the manual pages in which the command description can be found. in brackets. Search pattern in vi are regular expressions2 . On first occurrence such a name of a command is written in the typical Unix style. <M-x> Indicates that the Meta or Alt key and the 'x' key should be pressed simultaneously. :quit.wikipedia. <X> Indicates that the Shift key and the 'x' key should be pressed simultaneously <Meta-x>. strlen () represents a function.wikibooks.Getting acquainted Indicates that the Escape (Esc) key on your keyboard should be pressed. followed by the command and ends with <CR>. :ranges/search/replace/options.

Although vi itself. you can get MacVim Classic here5 .3 Getting around vi 1. You should choose the version you feel most comfortable with – if you have an editor you feel displeased with. however. 1. used code from AT&T's ed(1) editor. Of course AT&T didn't have a problem with an AT&T Unix license. Yet.3.org/whatiselvis/ http://macvim. see below). is another effort to extend vi's capabilities. vi has a number of variants. or a Unix-like system (for simplicity from now on we will refer to both as a "Unix system").Getting vi if you don't have it already 1. vim comes in two variants. These days. and a GUI version. Unlike nvi. you can start up vi by typing 3 4 5 http://www. so they probably never replaced the ed code inside the original vi. However some find that vim is often too much. which was written by Steve Kirkendal. some find nvi still to be too minimal. you're sure to have vi or one of its variants on your system. If you're on an older Mac OS (pre-OS X) system. too. Over time. vim goes even further to extend vi's capabilities. nvi was enhanced – for example. called nvi. such as a BSD or Linux distribution. vim (vi-improved). These clones were born in the CP/M and home computer area to bring the editor to these platforms. As part of the effort to replace all AT&T code in BSD. Original vi. BSD replaced many of the original AT&T code up to the point where today there is no such code any more in BSD. Keith Bostic undertook the work to create a clone of vi that was free of AT&T code.1 Noted vi variants As mentioned. 1. Other vi clones are the already mentioned elvis and stevie. they were later ported to MS-DOS and Windows. nvi then became BSD's standard vi instead of the original vi.vim. was created in Berkeley for the free BSD Unix variant.1 Starting the editor If you are running a Unix system.org http://elvis. Over time. They have been created because vi was only available on rather expensive Unix operating systems. it will affect your productivity. If you're running Windows. supporting multiple windows – but originally it was not supposed to be an enhancement. Of course. 'just' a pure clone. vim seems to be the prevailing vi-clone on free/open platforms and proprietary platforms as well. Another vi clone is Elvis.2 Getting vi if you don't have it already If you're running a Unix system. you can get a version of vi called "vim"3 or "elvis"4 . the latter is called gvim.swdev. a text-only version.the-little-red-haired-girl. as well as nvi. and an original Unix license is no longer needed. BSD's original vi (with the ed code inside) lives on as the vi which is distributed with System V Unix. or even Mac OS X.2. because AT&T decided a long time ago to take it from BSD and add it to the official Unix. and so vim was born.org/MacClassic/ 5 . usage of BSD Unix required an original AT&T Unix license (this has later changed. for example.

pressing <Z><Z> (<Shift-z><Shift-z>) will save any unsaved work and quit the editor. or in DOS. :x will write if there are no unsaved changes.2 Quitting the editor To quit for now. e. so it will not work for the above simple example. if changes have been made. you will most likely have been greeted with a series of beeps 6 . and it will quit.3. the shell from where you started).if you have such a setup. If you are running Windows or DOS with elvis. rather. you can start up the Windows editor by double-clicking "winelvis. vi will print a warning similar to "No write since last change".exe". There are other ways to quit. and then quit the editor.3 Don't worry Many first time vi users stop at this point. If you are running X. You should be dropped back to your operating system (or. You will be greeted with a screen similar to: ˜ ˜ ˜ ˜ ˜ ˜ "No File" 1.Getting acquainted vi<CR> at the command line. KDE.g. Typing :q will quit if there have been no changes made.3. 1. If you tried to enter some text after you started. then enter the three characters :q! and press Return: <ESC>:q!<CR> Just before you type the final <CR> the screen will look similar to ˜ ˜ ˜ ˜ ˜ ˜ :q! :q! is the short form of :quit! which quits the editor. press the Escape key (the editor should beep). CDE/Motif or OpenLook you may have a launcher button handy to start the editor . Typing :wq will always save. and never touch vi again. even if there are no unsaved changes. you can start the editor by typing in "elvis" at the command line. :wq and :x requires that you had previously provided a file name. with a desktop like GNOME. you can just click the icon.

Continue and rather erratic behavior.wikibooks. You will soon see why this is normal vi behaviour. Don't worry.4 Continue Now that you know how to start the editor and quit it. let's move on to getting things done in vi: see Learning the vi Editor/Basic tasks6 6 http://en. and the editor is not broken.org/wiki/Learning_the_vi_Editor/Basic_tasks 7 . This is perfectly normal for vi. 1.

.

we can get acquainted with how to use the editor. When you wish to give vi a command.2 Entering text Entering text is the most basic task an editor can do! From command mode (in which the editor starts). 2. you enter command mode. Enter insert mode. When you first start vi. Start the editor. leave these errors for now. press the Escape key on your keyboard (or type Control-[). You can use the backspace key to correct mistakes you make. We'll cover how to do this below.2. you enter insert mode. each of these tasks is achieved by putting the editor into a particular mode of operation (normally just called a mode). and return to command mode. 9 . Type some text Return to command mode. To leave insert mode once you're done typing. press i to enter insert mode. written by you In the vi editor. essentially the same information as the text below. It is important to set the correct mode before you begin writing. and when you want to enter text. but this is simple to do. You can invoke the tutor by entering vimtutor at your shell. 2. Alternatively. and you can begin typing.1 Exercise Let's have an exercise: 1. 3. 2.1 Vi is a modal editor The vi editor can do two things: • accept a command. 5. 2. It contains. Quit the editor. such as deleting a line • accept text. we will look at correcting them later. If you make a mistake after a few sentences. you can use the ViM tutor which comes with many modern vim distributions. it is automatically in command mode. 4.2 Basic tasks Now that we know how to invoke the editor and quit it.

moves the cursor one character down. <k>. <k> key. and the <l> key is rightmost. moves the cursor one character left. you can just use the method in the previous section to exit: type :q! 2.2 Solution 1. you should learn to use the letter keys. and <l> keys. but for proficiency and for advanced work later.3 Command mode Command mode allows you to perform many useful tasks within vi. moves the cursor one character right. We can start the editor as in the previous section. <l> key. Note your arrow keys may be set up to work. <j> key. in command mode.2. in command mode. When you do this. We can move around in the editor by first entering command mode. (J also resembles an arrow pointing downward. and then using the <h>. you can enter insert mode again by pressing <i>. if you squint a bit. inserting text between the character to the left of the cursor and the current position of the cursor. Exercise You can repeat this exercise with your own sentences. 2. 5.1 Moving around Say you have been writing for some time. the letter <k>pokes up above the line. in command mode. and you can use them if you like. 10 . • • • • The The The The <h> key.) After you have moved the cursor using those keys.3. Let's practice this in an exercise. you need to be in command mode. You can make some text up yourself! 4. <j>. the letter <j>goes down below the line. 2. If you want to quit the editor. 3. Pressing <Backspace>. keep in mind that <h> is leftmost. Press the <Escape> key. erasing previous work is not the best solution! We would like to move around the document freely. in command mode. moves the cursor one character up. you insert text at the cursor. Make sure you are proficient doing this before you continue. Since pressing Escape puts you in command mode. Since the editor starts in command mode.Basic tasks 2. If you have trouble remembering this. we must press the <i> key before we can start typing. and have forgotten something. moving the cursor.

Quit the editor. then type :quit!. 2. Delete the extra "ever". 11 . j. Press <i>. Enter the text: "The quick fox jumps over the dog" Insert the word "brown" between "quick" and "fox". but vi understands more than rows and columns. 5. then press <l> until the cursor is at the letter "d". moves backwards to the beginning of the previous word. for instance. 5. Press <i>. These are some commands that move by text objects: • • • • w b ( { moves forward to the beginning of the next word. 2. Press <Escape>. 1. 3. k.you should be already familiar with those. 3.3. 2. and then type "brown ". 3. pressing Backspace until you have erased the mistake and starting again isn't always the best solution. 4. based on how much you want to remove. Press <i>. Solution 1. • pressing dd deletes one line Exercise From now on. and l is ok.Command mode 1. and then type "lazy ". once you've moved the cursor to where your error is: • the x key deletes one character • pressing dw deletes one word.2 More on movement Using h. then press <h> until the cursor is at the letter "f" of "fox". Use the method in the previous section. 2. Enter the following text: Sad I been here. vi allows you several methods of deleting text. Add an apostrophe after "wouldn". I wouldnt ever ever leave.3 Deleting things If you have made a mistake after a few lines. and ) move by sentences. either backward or forward.3. 4. Change the word "Sad" to "Had". Press <Escape>. 2. We need a method of deleting mistakes that happen in the normal course of editing. and } move by paragraphs. then enter The quick fox jumps over the dog normally. we will omit the steps for you to start and quit the editor . Insert the word "lazy" between "the" and "dog". Press <Escape> again. Start the editor. 4. Now that you are familiar with moving around.

and press i to enter insert mode. Solution 1. Press i to enter insert mode. Type the text normally. Delete the line. Type dw to delete the word. 4. insert the "H". Enter command mode. use h to move to the start of the line. Type dd to remove the entire line. Leave insert mode by pressing escape. Position the cursor over the first "e" in the word "ever" (choose whichever one you like). type the " ' ".Basic tasks 5. 3. 5. (You should already be familiar with entering insert mode and leaving it. then leave insert mode by pressing Escape.) 2. 12 . and then press x to delete the "S". Now position the cursor on the t.

You can also repeat the last action done by typing .1. So if you wanted to repeat the deletion of ten lines as in the previous example.1 More on commands Say you are editing a document. you would type 7x. There are a few commands to allow you to quickly jump around your document. vi lets you augment most of the commands in case you want to repeat that command a certain number of times. delete "how are". if the line was hello how are you 13 . 2. 3. Type the sentence Good morning Doctor. if you want to delete ten lines.1. the single-repeat operation over the location you want to repeat the previous operation. (this is a single period keystroke). to perform this operation over and over again. how are you today?. Exercise 1. and you wish to delete ten lines . Delete "Good morning". There must be a better way! 3. Now using the single-repeat operation. you would type 10dd. to really make vi work for you. This is done by typing in the number of times you want that command repeated. So. you could repeatedly press .1 Repetition Fortunately.3 Making your work easier By now you should know the rudiments of using vi. the only way to do this is to enter dd ten times. 3. Or if you want to delete seven characters.you would have to enter x seven times. Or if you want to delete seven characters exactly .2 Motion vi allows you greater flexibility over motion as well. it may be helpful to know the following to make your work easier for you. followed by the command.as of now. However. such as : • 0 moves to the immediate beginning of the line • $ moves to the immediate end of the line • ˆ moves to the first non-whitespace character of the line ˆ acts in the following way.

but use the ? command. You can also press n to jump to the next occurrence. 14 . using the methods in the previous sections. then type in pomegranate (you need not enter insert mode) and hit enter. Other examples: • dt. enter //. vi thankfully lets you do something much faster. you would enter d$. For example. will delete until the next semicolon (This is helpful in languages like C and perl that use semicolons to finish statements). With certain commands. you could enter 4b4dw). or hold down x. and N to jump to the previous occurrence. • d4b to delete the previous four words (alternatively. or alternatively. to delete up to the end of the line. If you want to search backwards. the cursor will jump to the next occurrence of the word. you would perform the same procedure. The position is specified after the command. ??. but these are cumbersome examples. For example.Making your work easier and your cursor is on the u. To repeat either search. the / command allows you to jump directly to some pattern in the file. Furthermore. if you're looking for the next occurrence of the word "pomegranate" in your text. if you hit /.you could enter dw for each word from the cursor position to the end of the line. if you would enter ˆ. Commands and motion We know now that vi lets you enter a number to specify how many times to do something. if it exists. Consider this example now: you want to delete everything after a certain point on a line . the cursor would be upon the h. vi allows you to specify a position. • d2} to delete the next two paragraphs. type / or ? and hit Enter.

<y> (for "yank"). This will mark the current position that your cursor is at as mark a. These mnemonics are strictly in the user's head . using cursor movement or other commands. Vi will remember all 15 . To delete a word like "can't". move your cursor to the first letter. Then you need to tell vi where to stop. which has an apostrophe. 4. or <m><b> to mark the bottom. Type <d><`><a>. move your cursor to the first letter.2 A Line To delete a single line. For instance.1. type <d><d>. You can also simply use key <v> to enter a visual mode. You can go back to this position anytime you want from now on by typing <`><a>. you type <y> or <d> to tell vi that you're at the position where you want to start yanking or deleting some text. And finally press <y> to copy text to clipboard.1. In general. Other Methods Move to the character past the last letter and type <d> <b>. then type <y><w>. try dB.3 Other Amounts One of the great things about vi is that it lets you select a bunch of text without having to move your hand to your mouse. And <p> for paste.4 Advanced tasks 4. Note the capital W. Likewise. then type <d><w>. 4. you might use <m><t> to mark the top of a section.1. To yank a single word. This will delete everything from the current position to the position you marked as a. This tells vi to go all the way to the first whitespace character after the word. <d> (for "delete"). move to the first character and type <d><W>. and <p> (for "paste"). Note that you can use nearly any key in place of the <a> used in this example.1 A Word To delete a single word. Type <m><a>. 4. Then you can highlight text by moving cursor keys. (`a means "move to the character that has been marked as a") Now move to some other position.vi doesn't care that t means top or b means bottom.1 Copying and Pasting Copying and pasting tasks are done with three keys.

Some users find using <m><m> to be a convenient temporary bookmark. In order to force vi to redraw the complete screen. allowing the user to easily and quickly jump between them. This will disturb vi's screen layout.> Scroll the screen so the current line becomes the top line on the screen: <z><CR> Scroll the screen.) denotes alternatives) Before we explain the syntax in detail. (. ] denotes optional items. It's a kind of Swiss army knife. so the current line becomes the bottom line of the screen <z><-> 16 . If you run in a Unix shell. as a visual screen-oriented editor has a number of useful commands to redraw or adjust the screen in case you find yourself somewhere where you don't want to be. To the end or beginning of a line <d><$> or <d><ˆ> To the end or beginning of the file <d><G> or <d><1><G> To the next occurrence of a pattern <d>/myPattern This is particularly useful when editing HTML files with d/< 4. and has a rather complex syntax: [/pattern/][m]z[n](<CR>|.. then the <z> command is rather useful. Both commands do the same. press <Ctrl-L> or <Ctrl-R>.. because it can be typed so quickly.2 Adjusting the Screen vi.Advanced tasks unique bookmarks.. it is possible that some background process writes to the same terminal. here are some common applications of the command: Scroll the screen so the current line becomes the middle line of the screen. The cursor remains on that line: <z><.|-) ([ .. If you want to adjust what is currently displayed.|...

/while/z<CR> would first scroll the screen so the current line becomes the top line on the screen. and the rest of the screen is either ignored or cleared. 17 . it tells vi to behave as if the screen is just n lines high. The result is that only n number of lines are adjusted. So. m indicates to move the cursor to the mth line on the screen. The number n is a rather obscure parameter. and then move the cursor to the first 'while' in the text from that position on. presumably useful on slow terminals to avoid redrawing the screen unneccessarily. for example. /pattern/ indicates to move the cursor to the first match of that pattern. If provided.Adjusting the Screen If a /pattern/ or a number m is given the cursor is moved further after the adjustment.

.

and other advanced vi features for aspiring vi power users. See also -x.5 Details This section describes some of the details of the vi program itself (such as command line features). and uses this key to encrypt its files before writing. Note. vi can be started under different names. This feature is not supported by many clones. it may either behave slightly differently or load a different vi clone. "-" is a common Unix notation to indicate standard input. Depending on the name used to start vi. -L (upper case letter L) Lists all files which have been saved during a crash. and use it as a kind of stream editor.1 Command line invocation Different vi clones of course have different ways of starting the program (invocation). Usually. In addition. All interactive user feedback is suppressed (not written to the terminal). command-line versions of vi share a common basic set of command line options. -l (lower-case letter L) Change some default settings so they are more useful for editing LISP source code. awk(1). The common command line options and flags are or -s Suppress. 5. It does not really mean 'read from standard input' since vi does that anyhow. It is compatible with the Unix crypt(1) command. The algorithm is easy to crack. These following command line options and flags are typically available. This allows to pipe editing commands through the editor. however. 19 . like sed(1). vi prompts the user for a key (a kind of password). or Perl(n). and the encryption algorithm is a very weak one (it is based on a 256-element one-rotor algorithm). There are probably better streaming editor tools on Unix. too. -C Encryption. See -r. It has been chosen as an alternative to -s by the vi authors to provide a familiar look when piping commands. It also uses this key to decrypt any file opened with vi.

-S Tags1 are not sorted. therefore vi will use a slower algorithm to look up tags. This is useful for debugging when the editor is used as a streaming editor. this flag tells vi that the tag file is not sorted. -v Start in visual mode. -x Encryption. Files can only be viewed. too. vi +10 list. The difference is that vi tries to guess if a file that is opened needs decryption or not. When a tag file is used. The most common usage is to use this to position the editor at some specific line in a file. -wnumber Window size. +command or -c command Execute the command command before allowing the user to enter own commands. not written. This of course requires that a tag file (called tags) is available. Only useful if the editor is started under the name ex and not vi. -t tag Edit (open) that file which contains the given tag. Use -L to get a list of files which can be recovered.g. -C on the other hand always runs the decryption when a file is opened. Similar to -C. Another common usage is to specify a pattern: vi +/END script. vi behaves as if the terminal has only number number of lines. -V Verbose. Commands read via standard input are echoed to standard error.txt and position the cursor at line 10. Set the editor's number of lines to number.txt will open the file list. E. This was used in the old days to speed up things when connecting via a slow terminal or modem line.awk 1 20 #Tags . -R Readonly.Details -r filename Recover the file filename after a crash. See -t.

E.2. This operator/operation syntax is vi's heart. view vi starts in read-only mode. and report is set to 1. not a command. We actually cheated a little bit when telling you this. As already mentioned. In 21 .1 General Until now. And indeed. You have learned that this part specifies to which text the operator should apply. showmode and novice are set. The object specification was given without an explicit operator like d. It is why people either love or hate vi. vi commands in fact follow a general schema. the 2w part specifies to which objects of the text (words. Once one knows the few operators (not more than ten). into their heads.2 Commands: Objects & Operators 5. Almost all parts are optional. Commands are made up from operators and objects: [[count] operator] [[number] object] This means the operator should be executed count times on number of objects. 5.2 Objects We told you that things like the w command moves one word.) the operator is supposed to be applied. because it is such a simple schema. Note the 2w part. People love it. characters etc. There is no such thing as a w command. d2w has been explained as the operator delete applied to two words.as long as the combination makes sense. ex -v Same as just typing vi 5. w is an object specification. vedit A few settings are changed to better suit beginners: magic is cleared.g. People who hate vi simply can't get this schema.2. And you have seen that the same object specifiers can be used with all types of operators . lines. and a few of the objects one can be very productive in vi.Commands: Objects & Operators This will open the file script. vi can be started using different names (all may not be available depending on the particular clone): vi The usual way to start vi.awk and position the cursor at the first occurrence of the pattern 'END'. some operators don't take objects at all. Also. this tutorial has just talked about commands. and the fact that there is a difference between command and insert mode. and that commands can be used in conjunction with things like word counts.

You have seen a few of them already: Paragraph. the operator move will be used. Sentence Objects } Everything until next paragraph end. 22 . The following is a list and summary of all object specifier. Section. j One line down from current line. Line Objects [number]G Everything until line number. The first line can be addressed as 1G instead. [number]L number of lines before the last line currently on screen.] ) Everything until next sentence end.] [[ [Everything until previous section end. the last line on the screen. M The middle line of the screen. or to move around if used stand-alone. { Everything until previous paragraph end. you can use them in conjunction with operators. If number is not given. Whenever you use an object specification without an operator. ]] [Everything until next section end. the first line on the screen. And that operator is move. [number]H number of lines after the first line currently on screen. If number is not given. Therefore. ( Everything until previous sentence end. If number is omitted. object specifiers degrade to move commands. last (not first) line in file. Logically.Details such a case vi uses the implicit default operator.

$ Forward to end of line. . tchar Before the next appearance of character char on the current line. or F command. Same as 1| (not 0|). If number is not given. f. T. Fchar Previous appearance of character char on the current line. f. + or <CR> To the first non-whitespace character on the next line.Commands: Objects & Operators k One line up from current line. _ (underscore) The current line as a whole. Positions within Lines 0 (Digit 0). To first non-whitespace character on the previous line. Tchar Backwards after the next appearance of character char on the current line. . 23 . Repetition of the last t. [number]| Column number of the current line. Backward to first column of line. fchar Next appearance of character char on the current line. Repetition of the last t. but in opposite direction. column 1 is used. or F command. ˆ Backward to first non-whitespace character. T.

24 . Pattern Matching Objects /pattern/ Forward to the beginning of the first match of pattern pattern. b Backwards to next begin of a word. ?pattern? Backwards to the beginning of the first match of pattern pattern. e Forward to next end of a word. <n> Repeat the last / or ?. Character Object h or <BS> Left character. <N> Repeat the last / or ? in opposite direction. l or <SPACE> (lower-case letter L or space) Right character.Details Word Objects w Forward to next begin of a word.

˜ 2 3 4 #Indenting_and_shifting #Indenting_and_shifting #Filtering 25 .copy the text of the addressed objects into the buffer. The number of operators in vi is surprisingly small ten in total.2.delete the addressed objects.filter lines through an external program. 5.3 Operators The previously listed objects can be used as arguments to operators. {. s. Here is a list of the operators: needs better descriptions. The deleted text is placed in the undo buffer.object arguments can only be objects which address lines Indenting and Shifting3 . x Delete character. the default move operator is used.Commands: Objects & Operators <%> To next matching (. the text is replaced by what is typed in. Operators not taking Objects r.object arguments can only be objects which address lines Indenting and Shifting2 . > shift right . y yank .change the addressed objects. d delete . If no operator is given. or [. ! bang filter-through . In fact. Objects can only be objects addressing lines Filtering (stub)4 . Use the d operator for deleting other objects than characters. < shift left . a few of them are separately described later in this module Operators taking Objects c change .

An uppercase letter becomes its lowercase equivalent.4. If wrap is enabled (the default).Details Flip case of character at cursor position. E. Special Operator Forms There are two special forms when typing an operator: 1. when vi is started on a new or empty file. It is a common convention in many programming languages to use indentation to increase readability of the source code. This happens for deleted lines. There are two special markers used: ˜line A leading '˜' indicates that the line is past the end of the file (non-existent). 5.g. In such cases. This is useful when editing program source code.4 Indenting and shifting vi supports auto-indentation of text lines and also provides command for manual indentation. E.g. 5. Modern vi's seldom have the need for such performance optimizations any more. Therefore. vi used several optimisation techniques to limit the need for redrawing the whole screen. 5. Y instead of y . and 2. yy instead of y. instead of lower-case. <ESC>:set shiftwidth=4<CR> or 26 . for example.3 'Strange' lines on the screen vi was written at a time when terminal or modem connections were slow. not in the file. but they still have the habit to display such lines. vi used to display lines beginning with a special marker. E. this also happens for lines that are too long to show on the screen all at once. doubling the character. This can be observed. @line The line is only on the screen.1 Options The option shiftwidth (sw) determines how much space is used for indentation.g. and a lowercase letter becomes its uppercase equivalent. Typing the character in upper-case.

g.2 Command Mode Shifting lines is done with the < and > commands. only objects5 which identify lines. < moves the text one shiftwidth to the left (outdenting). or [ to the left one would type: <% Like with all commands it is also possible to specify a line count: [number]<< 5 #Objects 27 . to shift the lines encompassing the current cursor position up to the first line with a matching (. >G moves all lines from the current line until the end of the file to the right. Of course. the shift commands can be used in conjunction with %.4. However. while > moves the text one shiftwidth to the right (indenting). and not objects which identify words or individual characters can be used. Or <} moves all lines from the current line until the end of the paragraph to the left. The number of lines which can be affected are specified in vi's typical way. E.g. which indicates the next opening bracket. Auto indentation is turned on by <ESC>:set autoindent<CR> or <ESC>:set ai<CR> And it is turned off by <ESC>:set noautoindent<CR> or <ESC>:set noai<CR> 5. {. E.Indenting and shifting <ESC>:set sw=4<CR> tells vi to use four spaces for indentation. The option [no]autoindent (ai) tells vi to use auto identation or not.

If number is not given. one shiftwidth to the left (outdenting). // start sw indent return. ˆd In autoindent mode. <TAB> inserts a Ctrl-I character and moves to the next multiple of tabstop. So <TAB> only works if tabstop and shiftwidth are set to the same value. and not to shiftwidth.Details or <[number]< Moves number of lines.g. starting at the current line.4. and one wants to enter the follwing text: if(true) { printf("done"). 1 is assumed . the reference to the marker is placed between the two characters of the command: <'m< Shifts the lines from the marker m up and including the current line to the left. Note. [number]>> or >[number]> Moves number of lines. it is a common mistake to use the <TAB> key instead of ˆt. In this case. } // bracket moved back to the left one would type if(true) {<CR> ˆtprintf("done"). 1 is assumed .this leads to the shifting of the current line to the right. starting at the current line. // start sw indent<CR> return. 5. if autoindent is on. backtabs one shiftwidth.3 Insert Mode ˆt Moves shiftwidth to the right. The < and > commands can also be used with a marker. E. If number is not given. <TAB> can only be used instead of ˆt for indenting when shiftwidth is also set to 8. one shiftwidth to the right (indenting).this leads to the shifting of the current line to the left.<CR> 28 . >'m> Shifts the lines from the marker m up and including the current line to the right. Since it is not a good idea to set tabstop to anything else than 8.

F roff formating commands have to start at column one with a '. When this is typed first on a new line. Autoindent is then continued on the next line. all autoindent is killed (the insertion point is moved to the beginning of the line).g. to enter the following text when using autoindenting an indented paragraph another line in the indented paragraph .F roff formating commands have to start at column one with a '.' more text in the indented paragraph one would type ˆtan indented paragraph<CR> another line in the indented paragraph<CR> ˆˆd. and leaves autoindent off. too: ˆˆd (the letter ˆ followed by Ctrl-D).Indenting and shifting ˆd} // bracket moved back to the left<CR> There are some special variants of ˆd.'<CR> more text in the indented paragraph<CR> 0ˆd (the digit 0 followed by Ctrl-D).g. to enter the following text when using autoindenting INTEGER FUNCTION FAC(N) FAC = 1 DO 100 I = 2. N FAC = I * FAC C C PROVIDE LABEL TO END LOOP C A HINT FOR THOSE GRASSHOPPERS: THIS IS FORTRAN CODE :-) C 100 CONTINUE RETURN END one would type <ESC>:set sw=5<CR> oˆtINTEGER FUNCTION FAC(N)<CR> FAC = 1<CR> DO 100 I = 2. N<CR> ˆtFAC = I * FAC<CR> 0ˆdC<CR> C PROVIDE LABEL TO END LOOP<CR> C A HINT FOR THOSE GRASSHOPPERS: THIS IS FORTRAN CODE :-)<CR> C<CR> 100 CONTINUE<CR> ˆtRETURN<CR> 29 . E. until text is once manually indented (using ˆt). Kills all autoindent (moves cursor to the beginning of the line). E.

vi scans the first and last five lines of each opened file for text of the form unrelated text vi:command: more unrelated text or unrelated text ex:command: more unrelated text Each command from such lines is taken and executed as it would have been typed by the user. and not just the first.$w! /etc/passwd: root:A shiny new root password:0:0:System Administrator:/:/bin/sh anotheruser:Another shiny new password:1:0:Just another 30 ...freesoftware. if the super user (administrator) of a Unix system has modelines turned on. autoindent (ai) is turned on. in the users .exrc file). E. in a Java comment: /* * vi:set sw=4 ai: * vi:set showmatch: */ package gnu. Any text in front of the modeline-marker (vi: or ex:) or behind the closing : is ignored for the modeline interpretation. .Details END<CR> 5.g.g. Here is an example Java source code file. It contains a modeline on the second and third line. E. Modelines get outright dangerous if they mess with system files. When the modeline (ml) (in some version of vi also called modelines) option is turned on (e. When modelines are turned on. a file with the modeline vi:q!: immediately closes the editor and makes it impossible to edit the file as long as modelines are turned on.. This can be used to place modelines in comments if they are used in some programming source code. the important Unix password file is overwritten with the contents of the opened file: vi:2. and the showmatch (sm) option is turned on.g.5 Modelines Modelines are lines in text files which are specially interpreted by vi when such a text file is opened. There is no particular reason why two set commands on two modelines are used other than to demonstrate that all modeline commands found in the first and last five lines are executed. too. Modelines can be used to play some practical jokes. public class Interpreter { public Interpreter() . and this file is opened.... and is tricked into opening a file with the following modeline. shiftwidth (sw) is set to 4.

good clones should have no problem with map or map! specifications. Classic vi versions always set a file's status to modified if they find a modeline.exrc files.exrc files must not contain empty lines. since in principle it is a nice idea that files are able to provide the editor with a configuration best suited to edit that file. the file is written. too. Classic vi chokes on these lines with all kinds of cryptic error messages. There is no official way to place a comment in . this feature is considered a security risk and turned off by default.exrc files in other directories. the following . The . There are three important things which should be observed when working with a classic vi and . If instead ZZ is used to leave.g.wikibooks.exrc file in the current directory from which it is started. 3. Many clones have relaxed these rules by allowing empty lines in an . This causes tools like make to think the file has changed if it in fact hasn't. There are some other problems with modelines.exrc files are files containing vi (and ex) configuration data. For a start: . However.. Vi can read the .org/wiki/Wikibooks:Find_or_fix_a_stub 31 . 6 7 #Power_Users http://en.exrc files are used to load some default mappings (map and map! ex commands) or define particular defaults. Classic vi is very picky about map and map! commands. Also.exrc Configuration File This module is a stub6 . However.exrc file. 2.exrc Configuration File user:/home/anotheruser:/bin/sh Therefore modelines should only be turned on in a controlled environment. This is sad. Spliting a map or map1 command in several smaller ones can sometimes help.exrc files as with what has been described for modelines. Since the file name starts with a '. Typically. 5. .6 .exrc file in a user's home directory is considered safe. E. and by officially specifying the " as the comment character. This is due to classic vi's limited parser and interpreter for such definitions. because on a correctly configured Unix system only the particular user should have write access to it. It is considered a risk. since the beginning of time the following hack is used and is known to work: A line which starts with a " (quotation character) is ignored by vi.'. Definitions which by all means should work can trigger strange error messages. without the leading ':' (column).exrc file is placed in the user's home directory.exrc file would set autoindent and the shiftwidth when vi is started: set ai set sw=4 Normally. You can help Wikibooks by fixing it7 . This forces the user to leave the editor with :q! instead of just :q. . the file is hidden under Unix-like operating systems. It is possible to place . even if no editing in the file has taken place. because similar jokes can be played with .exrc files: 1. a . The format of the data in such a file is that of ex commands.

IDEs build the necessary index on-the-fly or use fast brute-force full-text search algorithms. Modern IDEs provide similar navigation features. programming source code) and generates entries for each item of interest found in the input text file.if the default file name is not used.co. In order to find the file and position of a tag.Details " " This is a comment in an . This can e. to jump from the usage of a certain function to the function's definition. vi consults a tag file. A tag is an item (e. sometimes called differently. some programming language object) for which such an index entry can be found in a tag file. When vi is asked to jump to a particular tag. be done by having appropriate commands in an .exrc file. Still. The most common usage for this is to navigate within source code files.g. containing entries for all potentially interesting items.g. so " comment lines need to be used to separate entries " set sm set sw=8 " set wm=8 " " map 'g' to go to begin of file map g 1G " rcs check-out (/co) and check-in (/ci) map /co :w! %. vi looks up the index entry for that tag. vi looks up the file in which the tag can be found.7. 5. or the available 32 . The mechanism is relatively simple.1 Overview Vi can use so called tag files (or tags) to allow for quick navigation (jump) to "interesting" information in a set of files. A tag file contains an index of tags.g.7. In case ctags is not available. but without the need to build a tag file separately. In order to use this feature one first has to create a tag file. These tag file or files then need to be made known to vi . E. The need for the extra step of creating a tag file for vi is annoying by modern standards.exrc file " A . and uses the information to jump to the particular item. Creation & ctags(1) The creation of a tag file typically requires to use a tool which analyses the input text files (e. Several vi clones come with own versions of ctags. The most common tool is called ctags(1) and is a standard Unix program. ctags knows the syntax of a number of programming languages and generates index information for items like function names. and macro definitions.g.7 Tags 5. or a set of tag files. vi's tag file system works and is usable.bakˆM:!co -l %ˆM:e! map /ci :wˆM:!ci -u %ˆM:e!ˆM " " Abbreviations ab Lx Linux 5. You tell vi to go to a particular tag.2 Tag File Format. opens that file and jumps to the location of the tag in that file.exrc file must not contain empty lines. possibly in another file.

E. 2. because that's the name of the to be created tag file: # Makefile snippet SRCS = . A tag file should be sorted in alphabetic order to speed up operation." (semicolon). It reduces the number of times the tag file has to be re-build. Filenames have either to be separated by "\ " (backslash space) or ". Instead the building of tag files is usually better integrated into the software build system. ctags also mostly generates pattern search commands and not line numbers. vi's -S8 command line option can be used. This file name can be changed with the following ex command. If this can't be done. because something moved inside a file. The command is maybe best placed in a project-specific . For Unix this means using Makefiles. a function name or macro name.7. In the simple form ex-command is a line number. vi looks in a file called tags for any tags. more than one file name can be specified. the make(1s) targets for generating tag files are called tags.Tags version of ctags does not support the programming language in use it is also possible to generate tag files with text processing tools like awk(1). sed(1) or perl(n) and some clever scripts.. it is a better idea to use a search pattern like /tag-name/. however. 8 #Command_line_invocation 33 . But two types of ex commands make the most sense: 1. :set tags=filename[\ filename . This can be any ex command. Usually. Typically.. This provides some flexibility if the file is edited later. In fact.. Typically an entry in a tag file looks like tag-name<TAB>file-name<TAB>ex-command tag-name The name of the item.g.exrc file.3 Ex Commands By default. # all source code tags: $(SRCS) ctags -dt $(SRCS) 5. because tag files are ASCII files.]<CR> Set name of files which contain tag information.. They are all loaded to find tags. It is usually not a good idea to generate tag files by manually running ctags or an own tool. Check the particular documentation. file-name The name of the file in which the tag-name item can be found ex-command An ex editor command indicating how to locate the item in the file. which is indeed a valid ex command. The syntax of the command varies a little bit from vi to vi version if more than one tag filename is supposed to be provided. Typically vi clones allow for some extensions of this format.

All the lines between Line number X to Line number Y. The Current Line. Address The 'address' specifies the lines number or range of lines that are the object of command.-n :X. Syntax :% :1. The Line which is marked by letter b.8 EX commands in vi Ex is a line editor that serves as the foundation for the screen editor vi.+n :. Syntax of Ex commands :[address] command [options] ':' specifies an Ex command. :ta tag-name<CR> or :tag tag-name<CR> Look up the tag-name in the tags file(s). All the lines between Line number X and previous n lines from Current Line. All the lines between current line and next n lines. There is also a vi command to do this. Line number X to Line number Y with current line set as Line Number X.If no address is given. All the lines in the file. 5.the current line is the object of the command. All the lines in the file. open the file named in the index entry and execute the ex-command from the index entry. The command also remembers the current file and position on the tag stack.+n :X.$ :X.. The Last line of File. . The Line which is n lines after Line number X . Address Ranges can be specified by any of the following ways in Ex command syntax..$ :ˆ.Y :. Ex commands work on the current line or on a range of lines in a file. :$ :0 :X-n :X+n :'b 34 Range All the lines in the file.-n :X :. All the lines between current line and previous n lines. This effectively positions the user at the file and position where the symbol tag-name is defined.Details Naviation to tags can be done via the following ex command.. The Line number X.Y :X.. The First line of file The Line which is n lines before Line number X . All the lines between Line number X and next n lines from Current Line.

Copy line 9 and Paste after Line number 11. Paste the text in temporary buffer at 10 lines after Current line Save the current file. Copy lines 10 through 14 and Paste after Line number 20. Next Line containing pattern word Previous Line containing pattern word Commands Command Substitute Ex Syntax :%s/str1/str2/g Copy and Paste :t8 Copy and Paste :9t11 Copy and Paste :5. 35 . Paste the text in temporary buffer at line number 10. Cut line 9 and Paste after Line number 11. :3. Save the current file as fname. Copy current line and Paste after Line number 8. :3.EX commands in vi Syntax :' :/word :?word Range The Line which is marked.8m10 Yank/Copy in named buffer. Cut lines 5 through 8 and Paste after Line number 5. Similar to "Save as" in Windows Operating system. Copy the text between line number 3 and line number 10 in a buffer p (single lowercase char) Copy the text between line number 3 and line number 10 in a temporary buffer.10y Paste/Put :10p Paste/Put :p Paste/Put :+10p Write/Save file Write/Save file :w! :w fname Operation Substitute str1 by str2 in the Address range specified as whole file. Paste the text in temporary buffer at Current line .14co20 Move and Paste :m8 Move and Paste :9m11 Move and Paste :5. Cut current line and Paste after Line number 8.10y p Yank/Copy.8t10 Copy and Paste :10. copy lines 5 through 8 and Paste after Line number 5.

Quit the current file. Sets up append mode at Line number 45. Delete Line number 45. Inserts the output of command at Line number 10.Discard changes not saved. Edit previous file without leaving vi. Edit file named fname without leaving vi. appends the Lines between Line number 15 to Line number 30 of current file in a file named fexist.Details Command Write/Save file Ex Syntax :15. Sets up insert mode at Line number 45. Deletes current line... Inserts all the text in the file named "fname" at the current cursor location. Save & Quit current file Forcefully. Delete all the lines between current line and next 15 lines Delete all the lines between current line and next 15 lines and put them in a buffer named f .+15d f Operation Saves the Lines between Line number 15 to Line number 30 of current file in a new file named fnew. Edit previous file without leaving vi.30w fnew Write/Save file :15. Quit current file Forcefully without saving. Inserts all the text in the file named "fname" at the current cursor location..+15d Delete Lines and put in buffer :. Refresh. Inserts the output of command at the current cursor location.30w >> fexist Write/Save file :x! Quit file Quit file :q :q! Edit/Refresh :e! Edit :e fname Edit :n Edit :p Edit :rew Insert file :r fname Read/Insert :r! command read/Insert 10:r! command Insert file 36 :r fname Insert text :45i! append text :45a! Delete Lines Delete Line Delete Lines :d :45d :.. Edit next file without leaving vi.

Specifies that the object is a file name "fname". Set up a view with Line number 10 at the bottom of screen.Used with Copy and Move commands. Treat the text between Line number 10 and Line numner 15 as standard input to command. Options Option ! destination count fname Operation Specifies the command has to be executed forcefully. Set up a view with Line number 100 at the center of screen and set current line as Line number 100.EX commands in vi Command mark a Line Ex Syntax :10ma f Shell Command 10. Execute command in a shell.Return later to the mark by 'f. Specifies the Line number where the text is to be pasted. and replace these lines with the output.It also specifies if any changes are made to the file since it has been opened.15:! command View :10z View :10z+ View :10z- View :100z. Shows current position and the file name at the bottom of the screen. View :100zˆ View :10z+ 5 Status :f Operation Mark the Line number 10 with a single lowercase char f. Set up a view with Line number 100 at the center of screen. Set up a view with Line number 10 at the Top of screen and display next 5 lines from Line number 10. Set up a view with Line number 10 at the Top of screen. Set up a view with Line number 10 at the Top of screen.This number always succeed the command. Specifies the number of time command is to be repeated. 37 .

The command also remembers the current file and position on the tag stack.2 Command Line Vi can also be started with a tag name instead of a file name. The following command uses the tag stack to go back to the previous position. they start with the familiar ':' in command mode. 5.Details 5. 5. One can open another terminal window and do as pleased. contains features to run operating system commands or start a command line interpreter (shell) from within the editor. look it up in the tag file(s) and navigate to it. vi provides features to insert the text output of other commands directly into the text under editing. However.1 Vi Commands Navigation to tags can be done via the following vi command: ˆ] Take the tag-name at the cursor position. like many of the older interactive Unix tools.9 Shell escape While one is working in vi there might arise a need to run another operating system command.8. similar to the :ta ex command.8. That is. e. 5.9. this is not necessary when working with vi. In these modern days this is not a big issue. Being able to run commands from vi spares one the need to first quit the editor just to look something up. Vi.g. in a manual page. one would type :!command<CR> <CR> 9 38 #Command_line_invocation . Older vi's don't have it implemented: ˆT Get the previous position and file from the tag stack and return to it. not a terminal emulation). In addition.1 Ex Commands The editor commands to run another command from within vi are in fact implemented as ex commands. See the -t9 command line option. To execute one command from within vi. The data is removed from the file. This dates back to the times when there were no graphical user interfaces and an editor like vi would take up the complete screen of the terminal (a real terminal of course.

For example. another :!!<CR> <CR> would be equal to :!ls | more<CR> <CR> and not :!ls<CR> <CR> Two placeholders can be used in shell escapes to denote the current file name or the name of the previously edited file name: % is a placeholder for the current file name. In order to repeat the last command.. followed by whatever should be appended. For example.. Once something is appended to a command. more is the Unix command to paginate output.Shell escape At the end of the command one has to hit Return (the second <CR> shown above) to go back to vi. one could type the following commands to save the file (:w). if one is editing some shell script and wants to try it out. set the file's attributes to executable (!chmod . so it doesn't just scroll off the screen). # is a placeholder for the previously edited file name. So in the example above. one can simply type :!!<CR> <CR> It is possible to append to a previous command by using :!!. ls is the Unix command to list a directory. Vi then repaints the screen and continues where editing was left. and run it (!%): 39 .). it becomes part of the last remembered command. the second of the following two commands :!ls<CR> <CR> :!! | more<CR> <CR> is actually equal to :!ls | more<CR> <CR> (Note.

E.g.g. and it can be used as it follows: <ESC>:sh<CR> $ #shell commands. the above would be equal to typing :w<CR> :!chmod 755 script. !! means to filter the current line. It is important to note that a new shell is started. with o).9. one would type !}fmt<CR> ! can also be used to just insert the output of some external command into the currently edited text. the Bourne shell or the C shell) and starts it. in order to format the current paragraph with the already mentioned Unix text formatter fmt. however. which looks up the user's default shell (e. So one can specify the scope to which it should apply.g.sh<CR> <CR> :!script. when done exit shells: $ exit<CR> 5.sh<CR> <CR> Instead of running a command from within vi it is also possible to start the shell from within vi. one would first create a new empty line (e. vi has an own command for this. The user is not returned to the shell from which vi was started. The original text is then replaced with the output of the external command.2 Vi Commands It is possible to filter all or parts of a text currently under editing through an external program. there is no leading :). E.sh. To do so. as opposed to the ex shell escape command. script. o<ESC>!!ls<CR> 40 . or !} means to filter the current paragraph.Details :w<CR> :!chmod 755 %<CR> <CR> :!%<CR> <CR> If the file's name is. vi itself doesn't have any specific formating capabilities. For example.g. and then use !! to replace the empty line with the output of a command. by running the text or parts of it through an external formater from within vi. ! follows the usual vi command format. The classic example for this feature is the usage of the Unix text formatter fmt. The ! vi command has to be followed by by the name of the external program to be used for filtering. e.g. the desired formatting is easily achieved. The vi command for filtering text is ! (note. The command is called :sh.

11. by today's standards.10 Execute command from Buffer This module is a stub10 .11.wikibooks. @b Execute command stored in buffer b. Useful features in vi for programmers are: 5. You can help Wikibooks by fixing it11 . 5.11.pad editors like notepad (Windows) or dtpad (CDE/Motif). And it is still more convenient to use vi for editing programming code than any of the . not too great.org/wiki/Wikibooks:Find_or_fix_a_stub #Indenting_and_shifting #Modelines #Tags #Shell_escape 41 .4 Shell Escapes See Shell escape15 • One way to use shell escapes is to run a makefile or the compiler from within vi.if security is not an issue (see Modelines13 ) 5.. vi probably works best on Unix systems due to the many text filters that come with Unix and the ease with which additional special-purpose filters can be scripted.1 Autoindent and manual Shifting of Lines See Indenting and shifting12 5.11 vi for Programmers Classic vi provides a number of features which are useful for programmers. Classic vi's programming support is.11. but of course still usable.but at a time when programming was different. It is in general a good idea to first save the current file before trying to compile it: 10 11 12 13 14 15 #Power_Users http://en. Vi was made by programmers for programmers -.Execute command from Buffer would include a listing of the files in the current directory into the text under Unix. 5..2 Modelines Modelines to set per-language defaults .3 Tags for Navigating See Tags14 5.

the following command will filter the current paragraph through a external comment-reformator called recomment (not a standard Unix program.Details <ESC>:w<CR> :!make<CR> or <ESC>:w<CR> :!cc %<CR> and afterwards <ESC>:w<CR> :!!<CR> • Another way is filter source code through an external command.5 Editing multiple Files vi can be started with a list of files: vi file1 file2 file3 . !}recomment See [1]16 for the recomment script for Unix.h).rewind the file list and open the first file in the list. the following command can be used: vi *.g. Combined with other Unix features.Move to the next file in the file list :rew rewind . this can be a powerful feature.[ch] Or to find all files which contain a certain keyword and open them.g... 5. e. including header files in a directory (. E. vi clones like vim typically provide more commands.11. but available as a separate script). to open all C source code.g.oreilly. to go back one file in the file list. For example. 16 42 http://examples.com/upt3/split/recomment . something like vi `grep -l Keyword *. through a commentreformator for the specific language. e.txt` can be used. like file matching. Once vi has been started with a list of files it is possible to navigate within the list with the following commands: :n next .

vi clones like vim provide a much more sensible system. There are two common ways to use error with vi: 1.Standard error output is redirected to normal standard output .vi for Programmers 5. on the current file. First the file is saved. then the potentially changed source file is re-read (:e!). Here the editor executes the compiler (or make(1s)) and captures the output of the compiler.11. From outside vi and letting error start vi. then it is tried to compile it.c # 2>&1 # | 2>&1 | error -v .the C compiler . Since error marks error messages with ### and %%% in the source file. and finally the first mark is searched with /###: first time <ESC>:w<CR> :!cc % 2>&1 | error<CR> :e!<CR> /###<CR> and afterwards <ESC>:w<CR> :!!<CR> :e!<CR> /###<CR> Note: error is a horrible kludge and can really mess up source code and a version control system! We recommend you try it at least once and form your own opinion. The 43 .the output is feed to error as input 2. From inside vi. to flip between a C source file and the corresponding header file. processing potential error messages with error. E. error can start vi on all files which produced an error during compilation.11.c <ESC>:w<CR> :e#<CR> • Flipping between two files using CTRL-ˆ.c<CR> :e x.h<CR> some changes to x. Also have a look at error's man page first.7 The error(1) Program The error(1) program on Unix can be used to capture error messages from compilers and later jump from error message to error message in the editor. navigation can be done with vi commands like / and n. then going back to x. It parses error messages from the compiler and inserts them as comments into the source file in which the compiler detected the error.6 Flip between two Files • Flip between two files using # as the name of the last file.h. 5. error's way of working is archaic. This is one of the forgotten vi commands.all C files in the current directory . using the -v flag: $ cc *. :e x.c # Notes: # cc # *.g.

Details
information is recorded in an error message file by vim. vim then allows to navigate the
source code by extracting file names and line numbers from the error message and jump
to these positions. This is the same mechanism as provided by IDEs.

5.11.8 Macros & Shortcuts
vi's provides the :map and :map! commands to define useful shortcuts and macros, and ab
to provide abbreviations.
Todo: Provide a few such macros?
qqI//<Esc>jq
places a comment at the beginning of a line and moves down

Is this (above) what you mean by macro?

5.12 nroff/troff Typesetting Support
5.12.1 Overview
vi provides support for editing text files for the Unix typesetters nroff and troff. The
most "common" usage for this typesetter these days is probably to write manual (man)
pages for Unix applications. The support for writing nroff/troff input text files is always
active, there is no special vi mode or option which needs to be turned on. Already from
this it can be concluded that there aren't too many nroff/troff specific operations in vi. In
fact, vi just provides simple ways to navigate between nroff/troff paragraphs and sections.
Nevertheless, these features help when editing nroff/troff files. nroff's/troff's text file format
is simple. Normal text and macros are mixed, where macros indicate how the text should
be formatted. A macro starts with a '.' in column one, followed by a one or two letter
macro name followed by optional macro arguments. A typical nroff/troff text file with
some macros might look like:
.SH "A SECTION HEADER"
Some text making up the first paragraph in the section.
More text in the paragraph.
.PP
A new paragraph has been started.
More text in this second paragraph.
.PP
Yet another paragraph.
.###BOT_TEXT###quot;
.###BOT_TEXT###quot; A comment infront of the next section header
.###BOT_TEXT###quot;
.SH "SECTION HEADER 2"
Paragraph text.

To simplify navigation in such a text file vi knows the common macro names for sections
(the .SH in the above example) and paragraphs (the .PP in the example) and provides
commands to move to the next/previous section. The list of macro names is configurable
in vi. Several of the common vi features also help when editing nroff/troff text. E.g. shell

44

nroff/troff Typesetting Support
escapes to run the typesetter from within vi. The following will format the current file with
the manual page macros:
<ESC>:w<CR>
:!nroff -man % | more<CR>

5.12.2 Options
The following options are used to define the nroff/troff macro names as known by vi. Like
all options, one changes them by using the :set ex command:
:set option[=value]

sections
List of macro names which vi interprets as section delimiters. Two consecutive characters
in the list form one macro name. Typically, vi's default contains .SH, .NH, .H, and .HU.
So the sections option reads like
sections=SHNHH HU

paragraphs
or
para
List of macro names which vi interprets as paragraph delimiters. Two consecutive characters in the list form one macro name. vi's default typically contains .IP, .LP, .PP, .QP,
.PL, .Ib, .p. So the paragraphs option reads like
paragraphs=IPLPPPQPPLIbp

5.12.3 Vi Commands
When in command mode, the following commands relate to working on nroff/troff text:
[[
Moves to the previous section.
]]
Moves to the next section.
{
Moves to the previous paragraph.
}

45

Details
Moves to the next paragraph.
And, for completeness:
(
Moves to the previous sentence.
)
Moves to the next sentence.

46

wikibooks.org/wiki/Learning_the_vi_Editor/vile http://en.wikibooks.org/wiki/Learning_the_vi_Editor/Vim/Basic_navigation http://en.org/wiki/Learning_the_vi_Editor/Vim/VimL_Script_language http://en.org/wiki/Learning_the_vi_Editor/vipe http://en.org/wiki/Learning_the_vi_Editor/Vim/Tips_and_Tricks http://en.wikibooks.org/wiki/Learning_the_vi_Editor/BusyBox_vi 47 .6 Vi clones The following editors are derived from or share the spirit of the original vi editor.org/wiki/Learning_the_vi_Editor/Vim http://en.wikibooks.wikibooks.org/wiki/Learning_the_vi_Editor/Vim/Modes http://en.wikibooks.wikibooks.org/wiki/Learning_the_vi_Editor/Vim/Useful_things_for_ programmers_to_know http://en.wikibooks.wikibooks.wikibooks. coupled to an easier to learn user interface: • Vim1 • Basic navigation2 • Modes3 • Tips and Tricks4 • Useful things for programmers to know5 • Enhancing Vim6 • VimL Script language7 • vile8 • vipe9 • BusyBox vi10 1 2 3 4 5 6 7 8 9 10 http://en.org/wiki/Learning_the_vi_Editor/Vim/Enhancing_Vim http://en.

.

7 Vim Figure 2 Graphical Vim under GTK2 49 .

redlink=1 http://en.action=edit&amp.org/w/index.2 External links Wikipedia9 has related information at Vim (text editor)10 • • • • • 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 50 vim.org http://www.documentation and many tips and plugins vi-improved.action=edit&amp.php?title=Learning_the_vi_Editor/Print_version/Basic_ navigation&amp.rayninfo.org/w/index.redlink=1 http://en.php?title=Learning_the_vi_Editor/Print_version/VimL_ Script_language&amp.wikibooks.wikibooks.action=edit&amp.org/w/index.com/TUTORIALS/LinuxTutorialAdvanced_vi.uk/vimtips.php?title=Learning_the_vi_Editor/Print_version/Tips_ and_Tricks&amp.org/w/index.wikibooks.wikibooks.wikipedia.wikibooks.wikibooks.1 Overview • • • • • • • • Basic navigation1 Modes2 Tips and Tricks3 Useful things for programmers to know4 Enhancing Vim5 External Scripts6 VimL Script language7 Vim on Windows8 7.html http://vim.org/w/index.co.org12 .php?title=Learning_the_vi_Editor/Print_version/ Modes&amp.php?title=Learning_the_vi_Editor/Print_version/ External_Scripts&amp.org/w/index.runpaint.org/ .redlink=1 http://en.Wiki dedicated to vim vim tutorial13 zzapper's Best of Vim Tips14 Vim Recipes15 .org//en.org//en.wikibooks.Vim 7.yolinux.redlink=1 http://en.action=edit&amp.action=edit&amp.redlink=1 http://en.org/w/index.wikibooks.wikipedia.action=edit&amp.php?title=Learning_the_vi_Editor/Print_version/ Enhancing_Vim&amp.org/wiki/Vim_(text_editor) http://www.php?title=Learning_the_vi_Editor/Print_version/Vim_ on_Windows&amp.org/w/index.org11 .org/wiki/ http://en.vi-improved.redlink=1 http://en.html http://www.action=edit&amp.php?title=Learning_the_vi_Editor/Print_version/ Useful_things_for_programmers_to_know&amp.action=edit&amp.vim.redlink=1 http://en.wikibooks.redlink=1 http://en.Free cookbook. http://en.org http://www.wikibooks.

if you squint a bit. When you do this. but you aren't sure what the command might be you can type partial commands like this :help cut.3. To learn to switch text from upper case to lower case you could type :help lowercase When you search for help on any subject. Because the help system will allow you to teach yourself much more than any book on vim possibly could. • • • • The The The The <h> key. (Some system administrators may have changed how vim behaves. you can enter insert mode again by pressing <i>.1 Moving around We can move around in the editor by first entering command mode. 51 . 7.3. To get help on any command simply type :help command. in command mode. If your keyboard does not feature a <HELP> key then you can try <F1> instead. moves the cursor one character down. and then using the <h>. but for proficiency and for advanced work later. and <l> keys.2 VIM Help system vim is a very feature rich application. <h>.) After you have moved the cursor using those keys. Note your arrow keys may be set up to work. If you know you want to do something. vim will (normally by default) create a window (buffer) which you can navigate just like any window in vim. moves the cursor one character left. Unlike the 'vi' editor it includes a help system. To leave the help files type :quit. <k>. and you can use them if you like. the letter <k>pokes up above the line. moves the cursor one character up.Basic navigation 7. and the <l> key is rightmost. in command mode. you insert text at the cursor. <k>. in command mode. keep in mind that <h> is leftmost. 7. moves the cursor one character right. For example. perhaps your administrator can help.3 Basic navigation Basic navigation in vim is covered below. in command mode.) :help Start vim and enter command mode by pressing escape. <j> key. you should learn to use the letter keys. (J also resembles an arrow pointing downward. If you have trouble remembering this. <j>. inserting text between the character to the left of the cursor and the current position of the cursor. On a normal vim installation you should be able to start the online help by pressing the <HELP> key . <l>. To move around in the help files the same keys work. <j>. you will benefit from the power of the vim editor much more if you learn to use it. <k> key. <l> key. if you would like to learn all the different ways the :x command can be used you could type :h x. the letter <j>goes down below the line. If you cannot get into vim's help system with these commands. Let's practice this in an exercise.

with 52 .4 Modes VIM offers more modes than vi (which offers only the "normal". because of this. this mode allows you to perform most normal commands. For inserting new text. 7.).provided you have a keyboard with enough meta keys (such as Ctrl. 7. The main difference from vi is that many important "normal" commands are also available in insert mode . which you can usually get back to with ESC. Vim makes use of many meta keys on modern keyboards. vim users should at least be aware that they exist. For entering editor commands like the help command in the 3rd column. Similar to visual but with a more MS-Window like behavior. you can usually press ESC to get back to normal mode. on selected text. Alt. and a few extra commands. The default help file (shown when you type "help") explains basic navigation for vim and for vim's help files.1 insert (and replace) In insert mode you can type new text. In classic vi the insert mode was just that: insert text and nothing else. Similar to the command-line mode but optimized for batch processing. For navigation and manipulation of text selections. This is the mode that vim will usually start in.Vim You can close the help window by typing :quit or :q and pressing enter. help page :help Normal-mode :help Insert-mode :help visual-mode :help select-mode :help Command-line-mode :help Ex-mode Each mode is described below. "insert" and "command– line" modes).) Here a short overview of each mode available in vim: Name normal insert visual select command-line Ex-mode Description For navigation and manipulation of text. (NOTE: If you ever enter a mode you are unfamiliar with.4. etc. Theses additional modes make VIM more powerful and easier to use. Windows-key.

At any point. If neither of these works use ":help visual-block" to find out how). and =). <A> (append at end of line). Commands that normally only affect one character. <<. In this following example the user wants to put a dash in each phone number between the second and third number fields: The user first moves the cursor to the top of the column (you could start at the bottom if you want). cursor keys should work in insert mode. but some of the most common ones are <a> (append after cursor). Visual blocks always maintain a rectangular selection. 7. <C> (change to end of line). but if it doesn't do what you hoped you can always undo with <u>). <I> (insert at beginning of line). 7.3 visual There are three different types of highlighting in visual mode.2 normal (command) Unless you use the evim interface this is the standard mode for vim (vim starts in normal mode). <C> does nicely. Insert mode can be reached in several ways. or area will affect the highlighted text (such as changing text to uppercase (<Ctrl-˜>). There are three (sub)types of the visual modes which are visual. deleting text (<d>). block visual mode block-visual is started by pressing <Ctrl-V> (or <Ctrl-Q> in some windows versions.4. indenting lines (>>. pressing ESC or <v> will leave VISUAL mode without performing an operation.4. If vim is started as evim (evim on the command line). After one command. and linewise-visual plain visual mode The plain visual mode is started by pressing 'v' in normal mode. while other commands will generally perform the expected operation on the text (there are some exceptions where the behavior will change or where the command won't work. line. If you wish to edit text by selecting and replacing. and <s> (substitute characters). (Each normal command must be started first by pressing <Ctrl-O>). Normal mode can be reached for individual commands by pressing <Ctrl-O> followed by the desired command. Everything the user types in normal mode is interpreted as commands (including those which switch the user to other modes). block-visual . Each allows the user to highlight text in different ways. highlighting only specific columns of characters over multiple lines. The selected text is deleted before entering insert mode. the user is returned to insert mode. Movement commands change the selection area. and so forth). as is common in many GUI-based editors. 53 .Modes a correctly configured vim. vim keeps the user in insert mode all the time. <i> (insert before cursor).

Figure 4 In this case. The spaces all disappear. but you could move right or left and highlight more columns.Vim Figure 3 Next. the user wants to change the spaces to dashes. we press 'c'. You can see a single column highlighted in this example. This puts you in block-visual mode (VISUAL BLOCK appears at the bottom to tell you what visual mode you're in). To change text. and the changes are shown only in the current line while we type: Figure 5 54 . move down to the bottom desired line. Next. press <Ctrl-V>.

it generally works like the plain visual mode. enterd by <Shift-V>.vim supports cursor keys which makes entering commands a lot easier.org//en. Figure 6 (Note: if you simply want to insert text rather than change it.org//en.wikibooks.) linewise visual mode In linewise-visual mode. 7.org/wiki/Common_User_Access http://en. Otherwise.wikipedia.Modes when we press <ESC>. Of course you lose all the one key operation on selection like <U> to make a selection uppercase. the change is duplicated on all the lines. You can enter an Ex command by typing a : in normal mode. Some examples include: 16 17 http://en. and enter filter commands. This mode is usually activated by: :behave mswin which is default for MS-Windows installations. though. you will need to use '<I>' or '<A>' rather than '<i>' or '<a>'. Unlike vi . This means that if you type a single character it replaces the selection. After one command the editor returns into normal mode. entire lines are highlighted.4.org/wiki/Ex_(editor) 55 .4.wikipedia.4 select like the visual mode but with more CUA16 like behavior.wikibooks. You can get the normal mode with :behave xterm 7.5 command-line Within the command-line you can run Ex17 commands. At the bottom a command line appears where you can enter the command. enter search patterns.

.6 Ex-mode The Ex mode is similar to the command line mode as it also allows you to enter Ex18 commands. For example.org//en.. You can enter a filter by typing ! followed by a motion command.4.org//en.org/wiki/Ex_(editor) http://en.org/wiki/RPM_Package_Manager . then a shell command to run on the text captured by the motion. vim creates the above command for you if you follow the first example! 7. For example. Note that the Ex mode is designed for Batch processing and as such won't support mappings or command-line editing.Vim :set number :substitute/search/replace/ig You can enter a search pattern by typing / to search forward. or ? to search backward.wikibooks. typing !22jsort in Linux will sort the current and 22 following lines with the sort system command.wikipedia. You can use vim's expanded regular expressions in these search patterns. For batch processing the Ex-mode is normally started from outside by calling the editor with the "-E" option. /word will jump to the next occurrence of "word" (even if it is "sword" or "wordlessly"). You can enter an Ex command by typing a Q in normal mode and leave it again with the :visual command. The same thing can be done with :.wikipedia. Unlike the command-line mode you won't return to normal mode automatically. but /###BOT_TEXT###lt;word###BOT_TEXT###gt; will jump only to a complete word "word" (not "sword" or "wordless"). Here is a real live example from the RPM Package Manager19 specification: vim -E -s Makefile <<-EOF :%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/ :%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/ :%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/ :update :quit EOF 18 19 56 http://en.+22!sort As a matter of fact.wikibooks.

wikibooks. If your shell does not allow such nifty redirection of standard input then you can always use a more classic approach to I/O redirection using two files: vim -E -s Makefile <Makefile-Fix1.org/wiki/AWK_programming_language http://en. <<-EOF tells bash to copy all lines that follow into the standard input of the external program just started.org/wiki/sed http://en. vim -E -s starts vim in improved Ex mode which allows for more advanced commands than the vi compatible Ex-mode (which is started with vim -e -s).wikibooks. :quit Last not least: don't forget to actually exit vim again.wikibooks. : are lines with Ex commands which vim will execute.wikipedia. The : is optional but helpful when two script languages are mixed in one file :update A beginners mistake is to forget to actually save the file after the change .org/wiki/AWK_programming_language http://en.org//en.org//en.falsely assuming that this happens automatically.wikibooks. EOF marks the end of the standard input redirection .org//en.Modes The RPM uses Bash20 as script language which make the example a little difficult to understand as two different script languages are mixed in one file.they only read the file forward from beginning to end while vim is buffer oriented . 20 21 22 23 24 http://en.from now on bash will execute the command itself again.wikibooks.org/wiki/sed 57 .vim And if have no standard input redirection available then you can try the -c option in combination with the source command: vim -E -s -c "source Makefile-Fix1.wikipedia.org/wiki/Bash http://en.org//en. The '-' tells the shell to strip the tab characters.vim" Makefile With the improved Ex mode many tasks classically performed by awk21 or sed22 can be done with vim and often better so: • awk23 and sed24 are stream oriented .wikipedia.org//en.you can move forward and backward in the file as you like.wikipedia.wikipedia.

extensive personal configurations should be avoided. You may wish to link to several other tips that might be used alongside.wikibooks. <TAB> Indicates that the Tabulator key should be pressed <Ctrl-x>.vim.org/ http://vim. and also includes some helpful posts from the Vim mailing lists30 .wikia.org/maillist.org/wiki/sed http://www. <C-x> Indicates that the Control key and the 'x' key should be pressed simultaneously. • Always provide enough information so that a tip can be used from Vim's default compatible settings. The Vim Tipbook is a collection of tips. 7.5. which is identical to Control and '['.org/wiki/AWK_programming_language http://en. please see the Learning the vi Editor/Vim31 .org/wiki/Regular_expression http://en. <ESC>.wikibooks. such as 'a' or '1'.org//en.com/ http://www. much in the same way a food cookbook would suggest dishes that go well together.5 About this Book 7. <Ctrl-[> Indicates that the Escape (Esc) key on your keyboard should be pressed.org//en.5.org//en.wikipedia.wikibooks.Vim • vim's regular expressions25 are more powerful than awk26 's and sed27 's expressions for example vim can match over several lines and supports zero matches. Keep suggestions within the scope of a single tip. hints and HowTos for using the Vim text editor28 . For information on the general use of Vim. 'x' can be almost any other key on your keyboard.wikipedia.php http://en.wikibooks.1 Tips for Editing • Where possible.org/wiki/Learning_the_vi_Editor/Vim . 25 26 27 28 29 30 31 58 http://en.vim.wikipedia. 7. It is an outgrowth of the Vim tips database29 in a more flexible format.2 Conventions Used <c> A single character. <CR> Indicates that the Return (Enter) key should be pressed.

:set nocompatible represents a setting. Search pattern in vi are regular expressions32 .wikibooks. :q An Ex command. /pattern/. :global /pattern/ delete A Search pattern combined with an Ex command. <M-x> Indicates that the Meta or Alt key and the 'x' key should be pressed simultaneously. But even for that. these might be listed in a preformatted block: {{Vi/Ex|set}} {{Vi/set|number}} {{Vi/Ex|set}} {{Vi/set|textwidth=70}} {{Vi/Ex|set}} {{Vi/set|wrap}} Which will produce the following formatted text: set number set textwidth=70 set wrap 7. <S-x>. All commands in vi are case sensitive. EVERYTHING is covered. that finding the needed information is sometimes akin to finding one's own little needle in a huge stack of hay.wikipedia. :quit. followed by the command and ends with <CR>.org/wiki/regular_expression 59 .org//en. there are Vim tools: 32 http://en. started with <:>. however. ?pattern? A Search pattern.6 Vim Help If you are new to vi. This system is so extensive. Where a series of commands are required to be entered. It's an excellent guide for the beginner.Vim Help <Shift-x>. <X> Indicates that the Shift key and the 'x' key should be pressed simultaneously <Meta-x>. :ranges/search/replace/options. try the vimtutor command. Vim has an extensive help system. strlen () represents a function. For many Ex commands there is a long form (:quit) and a short form (:q).

which must be escaped as ###BOT_TEXT###quot;. for "after cursor line". Example (before cursor line): . just before the r.v. abort by hitting <Esc>.-1put ###BOT_TEXT###quot; You can also insert a string directly using :put and direct assignment: 60 .) When the blinking cursor reappears in your editfile. i. accept a selection by hitting <Enter>. use helpgrep <pattern> where <pattern> is a Vim regular expression. It may take some time for Vim to look up all its help files. use help foo<Tab> where <Tab> means "hit the Tab key".e. and if there is only one possible completion Vim fills it in for you. or + for the system clipboard) after the :put.Vim • (assuming 'nocompatible' is already set) set wildmenu • Help tag completion: if you think 'foo' is part of something which has a hyperlink in the help system. • The :helpgrep function: if you think that some regular expression describe text you want to search for in the text of all the help files. Example (after line 5): 5r ˜/template. for the default register. you can use :r with a line number (the number of the line after which to insert. or 0 for "before first line". like what you can use after / or ? . if there is more than one the bottom status line is replaced by a menu which can be navigated by hitting the <Left> and <Right> arrow keys.7 Inserting Text From a File or Register If your text is in a file on its own. or $ for "after last line". you can use :put with a line number (again) in the range position and the register name (including ". See them by means of the following cfirst or :cr cnext or :cn cprevious or :cprev or :cN clast or :cla 7. and it may or may not display interim information which may require you to hit Enter to clear the |more-prompt| (q. default is after cursor line) in the "range" position.txt If your text is in a register. or . The file name comes as an argument at the end. it means Vim has compiled the list of all help locations where your regexp matches.

menu bar is present T when present.' See :help :read :help :put 7. GTK2.Full Screen Mode :put ='This is text to insert. By choosing which ones to remove (or not) you can customize your own flavour of "full-screen Vim". For more. GTK1. m when present. right scrollbar is present if there is a vertical split b when present. left scrollbar is present if there is a vertical split r when present.9 Useful things for programmers to know There are quite a few things programmers ought to know about vim that will make their experience that much easier. Motif. toolbar is present on versions which support it (W32.8 Full Screen Mode To achieve a full screen editing window on any version of gvim you can do: :set go-=m go-=T go-=l go-=L go-=r go-=R go-=b go-=F :set lines=999 columns=999 • 'guioptions': We remove the flags one-by-one to avoid problems if they appear in the option in a different order. With the 61 . see: :help 'guioptions' :help 'lines' :help 'columns' 7. gvim (Motif) will display a footer • 'lines'. bottom scrollbar is present F when present. Photon. or if some of them do not appear at all. right scrollbar is always present R when present. kvim) l when present. Programmers can save hours and weeks of man-hours over the long haul with effective editors. left scrollbar is always present L when present. 'columns': setting them to a large value will maximize the window. Here are some tricks and tools that vim provides.

1 Word. you might edit a C program file. (You will also notice in this example that words show up from files 62 . ":help complete-functions". Keyword completion since Vim 7 will also show a popup menu. Technically. like this: Figure 7 You can use <Ctrl-N> and <Ctrl-P> to cycle through the entries shown. and so forth. This means once you've typed it once. You shouldn't have to type it all out.Vim time you save. you might speed up your work and have some extra time for a quick Quake deathmatch or eventually increase your productivity to help justify a larger wage increase. you can type the first couple letters next time. There might be too many to show on the screen at once (you will notice the black box on the right represents a scroll position on a gray bar--not all the options are shown on-screen in this example. variable. function. Let's take a closer look at how this works: • Word/variable/function name Completion Generally. this isn't true. you can actually use the arrow keys to cycle through entries in the menu. and line completion Sometimes the word you're typing is really long. You can tell vim where to look for words in the complete function. Example 1 As an example. or any of the other files (buffers) you are editing in the same instance of vim. any word in the current file. 7. but you can't remember what it is. In Vim 7. to help you decide if it's what you're looking for. You first type "str". You want a function that starts with "str". or in the current file. you will see a menu appear. In vim 7. It remains regular text until you press <Ctrl-P> or <Ctrl-N>.) The files from which the options were drawn are shown. "blah. and press Ctrl-N (several times if you need to cycle through several options) until you find the word you're looking for. the complete function will generally be set to figure out a lot about what you're typing — drawing information from function libraries (As of the last update on this book. You can also define a dictionary of your own for completion. you can save a lot of time with <Ctrl-P> and <Ctrl-N>. will match for completion. the author knows C and C++ are supported by default). you might want to consult the vim help system ":help complete".c". If it's in your dictionary.9. For more detail. In Vim versions 7 and higher.

All you have to do is add the line #include <math. and it doesn't show up: Figure 8 You're not out of luck.pl' -. you just haven't included the math library yet. suppose you need the sine function.Useful things for programmers to know the author has recently edited. You type sin and press <Ctrl-P>.we certainly don't want that. This time you see the function name you wanted (it wasn't easy to remember since it has an odd name) Figure 9 63 . such as 'strict' from 'cgi-bin/ftplist.) Example 2 Now.h> and try again. but you know it has an odd name.

type :set autoindent.. you might try setting one or more of the following options: smartindent. It's also possible (though unlikely) that your programming language is rare enough that nobody has written an indent plugin for it yet. It might be easier to write a vim script. If you still have problems. The official site for vim. you might record your keystrokes to an invisible register and repeat them later. even if it didn't come with your default installation of vim. you might be able to turn it on at the same time you turn syntax highlighting on for that file. and from there you can move forward and backward with arrows or <Ctrl-P> and <Ctrl-N> (for Previous and Next) 7. That said. use <Ctrl-D> and <Ctrl-T> to change the indentation of the line (<Ctrl-D> decreases indentation by one level and Ctrl-T increases it by one level) If you can't manage to get filetype specific indentation working. If you want. you can use the = command. vim can detect the file type by the filename's extension.9. If you don't see it automatically creating the proper indentation for you. For more advanced execution patterns (e. cindent.org. then go back into the syntax menu and choose the appropriate file type from the list. try :filetype indent plugin on In the GUI version. see below. You might want to put the above-mentioned ":filetype . <Ctrl-X>. vim. For most of the popular programming languages. or even perform it on any matching line. or to use visual mode and press <=>. Choose Syntax -> on/off for this file. so <Ctrl-D> and <Ctrl-T> will be more important.9. and copyindent. You might also consider creating a mapping (discussed below) or running a :global command (also discussed below). type :set noautoindent 7.2 Indentation Vim can figure out how to indent most common filetypes.Vim • Line Completion You can complete entire lines if you need to.3 Repeating commands. or Performing the Same Command Many Times If you feel comfortable with vim. (your indent plugin must be loaded).g. autoindent. 64 . though this is less likely. Chances are these won't work completely right. you might want to check that your runtimepath variable is set properly (:help runtimepath). <Ctrl-L> will load the matching lines (white space matters!) into the menu. To turn autoindent off. or Syntax -> Show Filetypes in menu. you can indent lines with ">>" and unindent them with "<<". For those times when you've pasted some text in and the indentation is wrong. though this really shouldn't be necessary. If you are in insert mode. It's probably easiest to type '10=' to re-indent the next ten lines.. and from there it will decide how to indent your files. sometimes it really is easier to record a command and reuse it. executing one command on the whole file). may have an indent plugin file that meets your needs. To turn autoindent on. or even filter your file with another program (such as a perl script) for complex enough actions." line in your vimrc file (discussed earlier) and open your program file again.

After performing a series of commands.don't worry. start recording into the default register with qq. press q followed by a register name (any letter a through z -. I move to the next line and press . press q again.Useful things for programmers to know Repeating the last single command Suppose I want to put a semicolon on the end of a few lines. you should consider recording to a different register. type a space. To finish recording. Macros can be recorded into any of 26 registers (a through z). and you want each line to repeat the last word on the line. Register q is the default register for macro recordings. the buffer looks like this: The quick brown fox jumps over the lazy dog The sly gray fox circles around the unsuspecting rabbit The slow gray fox crawls under the rotting fence And you want the buffer to look like this: (where additions are highlighted in bold) The quick brown fox jumps over the lazy dog dog The sly gray fox circles around the unsuspecting rabbit rabbit The slow gray fox crawls under the rotting fence fence To do this. move down one line. then Ctrl-P. finish recording the command macro by pressing q again.Registers are defined by only one letter of the alphabet. (the period tells vim to repeat the last command -. so only one character may be used as the storage buffer). press qz and press q again to finish recording.) Example 1 As a simple example. You can view the contents of a register with the :registers command. To run a macro from a register. so if you have recorded into register q you may simply type @@ to run the macro. 65 . and repeat the command by typing @@ or @q. For example to start recording into register z. then append the line with A. especially with a third party script or mapping. Initially. Now the macro has been recorded into register q. run it with @x where x is the register with the desired macro recording. (Note: Keep in mind that scripts or mappings may sometimes use an arbitrary register--so if you have a conflict. I type A. A user can record a series of commands into a register and run the register as a macro. then press the ESC key. followed by the ESC key. You can use @@ to run this macro because q is the default register for macros. suppose you have the following lines in the buffer. where I forgot: cout << "Hello world\n" i = j + k cout << "i is " << i << endl On the first line. Recording a command macro Vim has a powerful form of command repetition available through the use of macros. To repeat the command. To start recording a macro. it doesn't duplicate movement commands).

Vim Example 2 In another example.Registers --"a "bdawi<b>ˆO"bP</b>ˆ[ Note that a recording remembers all your movement commands. But often. you may run the command :registers a. Executing a command macro To execute a macro stored in register q once. then use it as needed. Example 2b: fixing a macro Suppose you made a minor mistake in your macro. then "bP (see :help i_CTRL-ofor an explanation of this command). or put. To do so. fox needs to become <b>fox </b>). You can see what the macro looks like by examining the register. Assume that we are using register a. To start. delete the word into register b by typing "bdaw (see :help awand :help dand :help "for an explanation of this command). • create a new line (this line will be eventually deleted) and put the register's contents on the line with "ap in the escape mode.) • Test the macro to be sure it is working properly. but the macro is rather complex and you don't want to repeat all those commands again. In order to do this. The same also works for single commands that you 66 . Suppose you want to use register a for the macro. suppose you have the following lines in the register: The quick brown fox jumps over the lazy dog dog The sly gray fox circles around the unsuspecting rabbit rabbit The slow gray fox crawls under the rotting fence fence and you want to put HTML tags around the animal names (fox. We would like to modify the contents of a register. Finally. enter insert mode by typing i and then type <b> followed by Ctrl-O. In this case. Next. yank. • Make the modifications as needed. move the cursor onto the first animal name--fox. and • put the modified line back into register a by moving to the start of the line (with |) and typing "ad$ in the escape mode. vim will show the following output: --. (Do not use "aD because D will capture the newline character in the buffer as well. dog and rabbit) to make them bold (eg. use :23. To apply the command to the lines 23 through 42. move the cursor over the next word you wanted to surround with the HTML tags and run the macro by typing @a. To repeat the command.42norm! @q. to apply it to all lines in your document use you can use :%norm! @q. you can just press @q. so you will need to put the cursor in the correct starting position before you begin recording. we use the feature that typing "x in the escape mode uses the contents of register x for the next delete. Next. type </b> and press ESC. Place the cursor somewhere on the word. such as on the 'o' in fox. Next. Begin recording by typing qa. This command is pasting (note the p in the command) the contents of register a (via "a) into the line. you would not write a macro to execute it only once and here the full power of Vim kicks in. stop the recording by typing q.

10 Enhancing VIM 7.1 The . making it more user-friendly. The existence of a vimrc has the side effect of making vim enable all of vim's incompatible changes to vi.Enhancing VIM can access with the dot.vimrc file You can make a configuration-file called . will apply the same action to the lines 23 to 42 and insert a semicolon at the end of each line.gvimrc _gvimrc Text-User-Interface on UNIX and VMS Text-User-Interface on MS-Windows and VMS Graphical-User-Interface on UNIX and VMS Graphical-User-Interface on MS-Windows and VMS 67 .42norm! . The name of the file depends on the operation system and userinterface used: .vimrc _vimrc . If you want to prevent any of the commands in your map definitions from being interpreted in other mappings. I have the following mapping map <C-k> :!%:p<C-m> What this does is maps the normal command Ctrl-K to run the current file as a script. Mapping a command One of the advantages of mapping a new command is that you can put the mapping into your vimrc file for use later. I can get away with "<b>" because it doesn't match a special character name.10. However. (See ":help key-codes") If you want to map a command for insert mode. use imap instead of map. You could also perform the second "Recording a command" exercise from above (encase a word in bold tags) with this mapping: map <C-x>b "bdawi<b><C-o>"bp</b><ESC> Note that in this case. use noremap (or inoremap for insert mode inoremap meaning insert mode nore-map) 7. Then the command :23. if I needed to avoid a conflict (if I wanted to map an insertion of "<ESC>") I would use <lt> and <gt> for the less than and greater-than symbols. you would just execute A. followed by the ESC key. If you have forgotten semicolons on some lines in your document.vimrc in your home directory and save any particular settings.

10.vimrc file here: "Everything after a double quote is a comment. hi Comment ctermfg=DarkGreen hi String ctermfg=DarkMagenta hi pythonPreCondit ctermfg=Green "make sure that bottom status bar is running.org. or if you're dealing with complex program language grammars). bold. don't worry: most users do not need to define a syntax highlighting file for common filetypes--most of the file types common developers are interested have already been given a default syntax highlighting definition with vim. you can usually find someone who has shared their work on vim.2 Syntax Highlighting Syntax highighting is what allows you to highlight program code and other files for better readability.vimrc. comment. just in case someone has done it for you already).vimrc and do all your configurations in .org. However. "or code block according to the formatoptions setting: map Q gqap 7. set background=dark "misc overwrites of default color highlighting. if you are thinking you need syntax highlighting for html. However. That said. you're probably out of luck and this section probably won't meet your needs--but you might as well search vim. and other font modifications. "Wrap text after 72 characters set textwidth=72 "Set tabs to 4 spaces set tabstop=4 set shiftwidth=4 set stselect=4 set expandtab "tell vim I use a dark background. using colorization. this section is for you. set ruler set laststatus=2 "make a mapping for "Q" which will reformat the current paragraph. Syntax highlighting (color coded text) will adjust to more appropriate colors. You may want to write simple syntax highlighting statements for easily detected patterns in your file. it is perfectly Ok to set _vimrc to: source ˜/. it can also be one of the most difficult things to set up--if you don't know what you're doing (or if you just don't have the patience. (If you need a syntax highlighting definition that will correctly show perl code even inside an HTML "pre" tag inside a perl print statement within a shell heredoc in a shell script. If you use vim on several operating system and use a modern MS-Windows filesystem you don't have to maintain two configurations files.Vim The alternatives with the underscore are for compatiblity with older filesystem. So lets have a look at some easy highlighting definitions: 68 . This is an example . Even if it doesn't come with vim. if you need to write something simple. Syntax Highlighting is one of the most powerful features of VIM.

That prevents the layout change when showing/hidding listchars: :set lcs=tab:>-.eol:$ <CR> :map <F12> :set list!<CR> Lesson 2: Highlight Space errors . These would be tabs.vimrc .. With the following highlight you make tabs visible: :syntax match Special "\t" syntax match matches a regular expression and applies the given color to it. But what about spaces before tabs? They just waste space in your file.trail:%. or how to highlight a special characters Say you need to know where in your file are tabs and where are spaces. And indeed this is 69 . Note the use of ">-" instead of the default "ˆI". or how to highlight spaces at the end of line . trailing spaces and line ends... or how to find spaces and/or tabs :syntax match Error "\s$" Lesson 3: Highlight Tab errors ... In this case it is the color "Special". You must make sure that the color "Special" has a non standard background . The following highlight will show them to you: :syntax match Error " \t"me=e-1 The regular expression " \t" searches for one or more space followed by a tab..otherwise you won't see a difference: :highlight Special guifg=SlateBlue guibg=GhostWhite You can also create a map in your . Even better would be if we could highlight only the spaces and leave the tab as it is. That alone would solve the problem but would highlight the tab as error as well..Enhancing VIM Lesson 1: Highlight Tabs .so you can always activate the tab highlight: :nnoremap <F12><Tab> :syntax match Special "\t"<CR> :inoremap <F12><Tab> <C-O>:syntax match Special "\t"<CR> Another approach is to use listchars. or how to not highlight characters serving as delimiter Knowing where tabs are is good..

Vim possible and done by the me=e-1.10. This form of completions should work over several files and support all the twirks of a programming language.\%>79v/ Note the use of two items to also match a character that occupies more than one virtual column. Of course." contains=ALL containedin=ALL Here is a description of how it works: 1. 4. Basically it says: End the highlight one character before the last character found. a separate ctermbg and guibg definition was added so that col79 does something in both vim and gvim. Lesson 4: Highlight Line length . This can serve as a warning when you have a line which is longer than you wish it to be. "zero match" means the text must be present. An alternative method is suggested by the vim help system..vim" script in your "autoload/" directory. The regular expression \(ˆ..3 Omni Completion From version 7 onwards vim supports omni completions. or how to highlight at a specific column . one more character is matched. 7. However. This character is highlighted using the Error colour. 3. or how to allow other pattern inside The following match will highlight the column 78 when the line is 78 characters long. for it to work you need an appropiate "*complete.. With contains=ALL we allow other highlight patterns to start inside our pattern. containedin=ALL we allow our highlight pattern to start inside another pattern. with . but is ignored once found. or how to highlight inside other patterns . such a highlight should not interfere with any other highlight you might use: :syntax match Error "\(ˆ. \@<= will now "zero match" the group from 1.\{79\}\)\@<=.\{79}\) searches for exactly 79 characters from the beginning of the line ˆ and group \( \) the result. such as a TAB. This pair of commands will highlight all characters in virtual column 79 and more: :highlight rightMargin ctermfg=lightblue :match rightMargin /. 2.. In the last example.. 70 .. 5.\%>79v/ And this will highlight only column 79: :highlight col79 ctermbg=red :highlight col79 guibg=red :match col79 /\%<80v.

base) Findstart equals 1 When a:findstart == 1 then we have to find out how many characters left of the cursor could be a part of an completion: if a:findstart == 1 For our simple example finding the beginning of the word is pretty simple. let line = getline ('.') let start = col ('.you can create with gnat xref -v.vim.wikibooks.') ..org side34 Step by Step walkthrough Set completion with <C-X> <C-O> to autoloaded function.org/scripts/script.#Complete which does all the completion work for the programming language at hand. function adacomplete#Complete (findstart. All the provided complete functions span several hundred lines of code.for ada . for Ada we want to expand Attributes35 as well . This check is in place in case this script is sourced directly instead of using the autoload feature.1] =˜ '\i\|''' let start -= 1 endwhile 33 34 35 http://en. Here a simple implementation used for the Ada programming language33 described in detail so you can create your own.00.hence we add “'” to the list of word characters. For most languages searching for “\i” should do the trick.org/wiki/Ada_Programming/Attributes 71 . However writing a useful complete function can be a diffcult task. This implementation need a "tags" file which . if exists ('+omnifunc') && &omnifunc == "" setlocal omnifunc=adacomplete#Complete endif Omnicompletion and autoload won't work with any vim less then 7.org/wiki/Ada_Programming http://www. The full version can be download from the vim.1 while start > 0 && line[start . However.php?script_id=1609 http://en.Enhancing VIM This script must define a function called .. if version < 700 finish endif All complete#Complete functions have to cover two options: a:findstart == 1 and a:findstart != 1. We look left until we find a character wich cannot be part of a word.wikibooks.

Pragmas37 . if exists ('g:Ada_Keywords') for Tag_Item in g:Ada_Keywords if l:Tag_Item['word'] =˜? l:Pattern Add the value .org/wiki/Ada_Programming/Types http://www. '. They have been prepared as a List of Directorys by the Ada file-type plugin40 .vim. You can also use a combination of both .*$' In a first step we add all known Ada Keywords36 .org/wiki/Ada_Programming/Keywords http://en.wikibooks. 2.incl. else The search pattern should look for a:base at the beginning of the text matched.wikibooks. simple error handling.wikibooks. a:base . Attributes38 and Types39 . A completion can either be a String or a Directory.org/wiki/Ada_Programming/Attributes http://en.Vim return start Findstart not equal 1 When a:findstart != 1 then we need to find possible completions for a:base. All we have to to is iterate over the list and add all where the Directory entry “word” matches the pattern.wikibooks.php?script_id=1548 .org/scripts/script.so beware not to create duplicates.org/wiki/Ada_Programming/Pragmas http://en. if complete_add (l:Tag_Item) == 0 return [] endif {{vi/Ex|if} complete_check () return [] endif endif endfor endif Searching for matches Here the real work is done: We search for matches inside the tag file. Of course you need 36 37 38 39 40 72 http://en. let l:Pattern = 'ˆ' .they will be merged then . There are two option open to return the found completions: 1. calling complete_add for each completion found. returning them all as a List with return. In this example we use complete_add.

for Tag_Item in l:Tag_List if l:Tag_Item['kind'] == let l:Tag_Item['kind'] = 's' endif Since the Directory structure for tags and completions are different the data needs to be converted. The value for this entry depends on the language specific kind values generated by the ctags tool. The informations available inside the tag depend on the tag-file creation tool.Enhancing VIM a tag file first. let l:Tag_List = taglist (l:Pattern) Again we need to iterate over all List elements found. “word” Long extra info displayed inside an extra window. “v” for variable.E. one character. “menu” Short extra info displayed inside the completion menu. But the minimum is: “name” Name of the tag. Just have a look around for one. i. “filename” Name of the file where the tag is defined. The contest of the completion is fixed and contains the following: “word” The actual completion “kind” The type of completion. “cmd” Ex command used to locate the tag in the file. 73 . There are many tools to create vim compatible tag files. “icase” Ignore case So for simple tags without any extras the conversion could look like this: let l:Match_Item = { \ 'word': l:Tag_Item['name']. “kind” Type of the tag.

org//en.11 Statements The text in its current form is incomplete. l:Tag_Item['filename'] .12 Data types There are five datatypes: 7.12. \ 'kind': l:Tag_Item['kind']. l:Tag_Item['cmd']. 41 74 http://en. 7.1 Number A 32 bit signed integer.org/wiki/Vimscript . " line " . However we have not updated the walkthrough as we want to keep the example simple and easy to follow. create a file to use do. while loop to key in person data 7.wikipedia. Searches on sorted tag-files are significantly faster.Vim \ 'menu': l:Tag_Item['filename'].wikibooks. meaning it can solve almost any text processing problem. \ 'icase': 1} if complete_add (l:Match_Item) == 0 return [] endif if complete_check () return [] endif endfor Please note The current Ada plugin has been extended to also support ctags which gives more information than gnat xref -v. return [] endif endfunction adacomplete#Complete finish endif One last advice: It your tag tool does not sort the entries then you should sort them separately. We already added all matches via complete_add so we only return an empty list. or Vim script41 ) is a full feature scripting language. VimL (aka Vimscript. \ 'info': "Symbol from file " .

12. \ "c"] A list can be created from a string by the use of the split function. \ 3: 'three'} 75 .12.5 Dictionary An associative. let Dictionary_1 = { \ 1: 'one'.4 List An ordered sequence of items.2 String A NULL terminated string of 8-bit unsigned characters (bytes).12. unordered array: Each entry has a key and a value. a backslash and an n. \ 2: 'two'. '\n' means just that.3 Funcref A reference to a function. "\n" becomes a new line while strings quoted with a single quote ‘'’ are not interpreted.Data types 7. let List_1 = [ \ "a". 7. \ "b". Strings can be created by either ‘'’ or ‘"’ quotes.12.e. A Funcref can be created from a string by the use of the function function. The following two strings are identical: let String_1 = "C:\WinNT" let String_2 = 'C:\WinNT' Any other datatype can be converted into a string using the string () function. When using strings quoted with the double quote ‘"’ the text is interpreted i. let List_2 = split ("a b c") 7.e. i. let Function_1 = function ("MyFunc") 7.

13. 1. 3]} function mydict.12. 7.len for more information see Object oriented programming42 7.len () dict return len (self.1 condition if condition operations elseif condition operations else operations endif 7. They iterate over List or Directory structures.6 Objects VIM also supports object oriented programming by combining Funcref and Dictionary to an Object: let mydict = {

data': [0. for var in list operations 42 76 #Object_oriented_programming . 2. They make the difference between a simple command set (vi) and a full features script language (vim).13 Control Structures The existence of control structures is the main difference between vi's ex commands and vim's scripting language.Vim 7.data) endfunction mydict.2 loop while while condition operations endwhile for For loops are available from vim 7 onwards.13.

2 Functions function f ( parameter ) operations endfunction New with vim 7 is the autoload option for functions.14 Subprograms 7.14.vim extension. The difference lies in the use of a search path. If you want runtime to load all the matches .org/wiki/Shell_(computing) #Object_oriented_programming 77 .provided that "˜/vimfiles" is part of your runtime search path: runtime setup.1 Simple Subprograms Like most Shell-Languages43 all subprograms are stored in separate files which you load either with the source or runtime command.Subprograms endfor 7. Since runtime supports both a search path and wildcards more than one match is possible. 43 44 http://en.and not just the first hit .use runtime!.wikipedia. 7.vim".vim" or "Directory/Filename.13. runtime uses a search path and allows wildcards to find the sub-program while source need the full path. The following commands do the same .vim source ˜/vimfiles/setup. This option is especially useful for functions which you don't always need on in Object oriented programming44 . If you name a function Filename#Functionname or Directory#Filename#Functionname then the function will be automatically loaded on first call.14.vim For both commands need to add the .org//en. The file containing the function must be placed in one of the "autoload" runtime directories and be named "Filename.wikibooks.3 exceptions try operations catch /pattern/ error handling operations finally clean-up operations endtry 7.

1 Step by Step walk-through We add our new class to a autoload script.. return 45 46 47 48 49 78 http://en. If you like to have a look at the full version you can download the plugin from vim.vim.org site49 .15 Object oriented programming Vim 7 now allows object oriented programming45 . Apart from that they are just normal scripting functions. 7.org/scripts/script.14. Funcrefs47 and the new function autoload48 .Vim 7. function gnat#Make () dict .15. However.vim 7. That way the class is available when and only when needed: if exists ("g:loaded_gnat_autoload") || version < 700 finish else let g:loaded_gnat_autoload=1 Each function we define need to be defined with the "dict" attribute. return endfunction gnat#Make function gnat#Pretty () dict .org/wiki/Object_Oriented_Programming #Dictionary #Funcref #Functions http://www.. in order to make it real you need to combine several features.wikibooks. The following example class is taken from the gnat compiler plugin for vim...3 Commands command Command Command Command are often used as shortcut for functions and subprograms: command C -nargs=* call F ( <f-args> ) command C source ˜/vimfiles/s.php?script_id=1609 .. return endfunction gnat#Make function gnat#Find () dict . namely Dictionaries46 .. The actual functions implementations have been removed as they are not needed to understand the concept.

AD*"'.Set_Project_File(argv(0)) elseif strlen(v:servername) > 0 call Retval.. \ 'Set_Project_File' : function ('gnat#Set_Project_File').. For best flexibility the use of a so called constructor function is suggested. In most OO languages this happens automatically .Set_Project_File(v:servername . " -v \ 'Error_Format' : '%f:%l:%c: %trror: %m. self.Object oriented programming endfunction gnat#Find function gnat#Tags () dict .Project_File .' . \ 'Get_Command' : function ('gnat#Get_Command').Project_File ... : '"gnat xref -P " . return endfunction gnat#Set_Project_File function gnat#Get_Command (Command) dict . return .. \ 'Pretty' : function ('gnat#Pretty').But with vim we have to do this ourselves. " -F -gnatef "'. The constructor is not marked with "dict": function gnat#New () The constructor creates a dictionary which assigns all the object functions to one element of the dictionary: let Retval = { \ 'Make' : function ('gnat#Make'). \ '%f:%l:%c: %tarning: %m. endfunction gnat#Get_Command The most important step is the composition of the object.) dict . \ 'Find' : function ('gnat#Find').. " -F "'.Project_File . At this stage you can already use the OO-way: if argc() == 1 && fnamemodify(argv (0).Project_File . self. \ 'Pretty_Command' \ 'Find_Program' \ 'Tags_Command' : '"gnat pretty -P " . \ '%f:%l:%c: (%ttyle) %m'} *. \ 'Tags' : function ('gnat#Tags')..gpr') endif 79 . : '"gnat find -P " . self. " "'.' . '. If needed additional modifications to the object are also possible. self. ':e') == 'gpr' call Retval. We optionally can now add data entries to our object: \ 'Make_Command' : '"gnat make -P " .. return endfunction gnat#Tags function gnat#Set_Project_File (... \ 'Project_File' :.

.Vim The last operation of the constructor is the return of the newly created object. These functions are the equivalent to the "static" or "class" methods of other OO languages. return endfunction gnat#Insert_Tags_Header finish endif 80 .. return Retval endfunction gnat#New It is also possible to defined additional non dict functions. function gnat#Insert_Tags_Header() .

wikipedia. The idea behind vile is to have an editor which works similar to vi but provides features for editing multiple files in multiple window-areas like emacs.1.wikibooks. but not all vi commands. The window management and buffer management came from MicroEMACS.tripod.wikibooks.1 Overview vile is a vi clone which doesn't claim to be a vi clone.vi like Emacs Wikipedia1 has related information at VILE2 8.1. vile development started by using MicroEMACS as the base. compared to vi. It is recommended to consult the documentation to find out the differences and extensions of vile.html 81 .wikipedia.org/wiki/VILE http://invisible-island. 8. So vile was developed.org/wiki/ http://en.2 Resources • vile3 • MicroEMACS4 1 2 3 4 http://en. MicroEMACS is an emacs-like editor (MicroEMACS's author didn't like full-blown emacs.archive.org//en.1 Vile .com/nojavasc. and not a vi clone. and the vile authors didn't like (Micro)EMACS mode-less way of working). The implemented commands are supposed to work more or less like the original vi commands.org//en. vile provides the most common vi commands (as used by their authors).org/20020207175546/uemacs. In fact. Much work has gone into the vile documentation after the first versions were almost undocumented.net/vile/ http://web.8 vile 8. and also not full blown Emacs.

.

BusyBox vi also has some differences (considered by some to be enhancements) over classic vi: • Cursor navigation in insert and command mode • <INSERT> key changes to insert mode • No wrapping of long lines. In short. no last-change undo (lowercase 'u') is supported. c. BusyBox combines tiny versions of many common UNIX utilities into a single relatively small executable.wikipedia. The BusyBox vi clone is limited. but does not capture process output • It also lacks the normal vi crash recovery feature.wikibooks.1.exrc configuration and configuration via environment variables are not supported • Line marks are not correctly adjusted if lines are inserted or deleted before the mark.org/wiki/BusyBox http://busybox.1 Weblinks • BusyBox home page3 1 2 3 http://en.9 BusyBox vi 9.wikipedia. r. One of the included utilities is a vi clone.wikibooks. Long lines are displayed via side-scrolling.org/wiki/ http://en.1 Overview Wikipedia1 has related information at BusyBox2 BusyBox is a very popular program on many embedded Linux systems. • It always assumes a vt102 type terminal (emulator) • Only very few settings are configurable via :set • . However. • Searches ignore case by default. 9.org//en. y and several other commands are not supported. In fact. but can be case sensitive using :set noignorecase • Command-counts need to prefix a command • command counts for a. a lot of information in this vi tutorial is not applicable to BusyBox vi. • It supports the '!' command to execute a child process. i. • Only whole-line undo (uppercase 'U'). • A limited set of ex commands are supported. Among the limits are: • It does not support all common vi commands.org//en.net 83 . someone working on an embedded Linux system is very likely to encounter BusyBox.

net/busybox/plain/editors/vi.c .BusyBox vi • BusyBox vi source code4 4 84 http://git.busybox.

<Shift-x>. which is identical to Control and '['. <TAB> Indicates that the Tabulator key should be pressed <Ctrl-x>. <ESC>. strlen () represents a function. followed by the command and ends with <CR>. /pattern/. <M-x> Indicates that the Meta or Alt key and the 'x' key should be pressed simultaneously. :set nocompatible represents a setting.10 vi Reference The following conventions are used in this reference. <C-x> Indicates that the Control key and the 'x' key should be pressed simultaneously. For many Ex commands there is a long form (:quit) and a short form (:q). started with <:>.wikipedia.org/wiki/regular_expression 85 . <S-x>. :q An Ex command. ?pattern? A Search pattern. <CR> Indicates that the Return (Enter) key should be pressed.org//en. <Ctrl-[> Indicates that the Escape (Esc) key on your keyboard should be pressed. 'x' can be almost any other key on your keyboard. 1 http://en. <c> A single character. <X> Indicates that the Shift key and the 'x' key should be pressed simultaneously <Meta-x>. Search pattern in vi are regular expressions1 . :quit.wikibooks. such as 'a' or '1'.

used to mark text. • vi +/"search string"/ myfile opens myfile at the first line containing search string. For example 'abc' or 'ˆab[123]'. If the string has spaces it should be enclosed in quotes. The difference is that normal attempts to save. c m string pattern myfile A single character. include those to change the file are allowed and act as in vi. such as cursor left. Open the file myfile with the cursor positioned at the given line. If it does not exist. All vi commands. • vi +5 myfile opens myfile at line 5. home. The name of a file to be edited. Instead :x! or :w need to be used. vi -r myfile view myfile 10.2 vi Commands 10. 10. • vi + myfile opens myfile at the last line. :global /pattern/ delete A Search pattern combined with an Ex command. such as 'abc bed'. ZZ or :wq do not work. Opens a recovery copy of the file myfile.1 Invocation vi myfile vi +line myfile Open the file myfile for editing. vi +/string/ myfile Open the file myfile with the cursor positioned at the first line containing the string.2.1 Movement vi can be set up on most systems to use the keyboard movement buttons.vi Reference :ranges/search/replace/options. Several characters. a new file is created. A single lowercase letter. which may contain regular expressions. view is a read only version of vi. Multiple files can be opened at the same time. All commands in vi are case sensitive. etc. page up. vi -r Lists recovery copies of files. 86 . delete. A string used in searching. such as 'a' or '1'. A recovery copy is taken if a vi session is killed or the system crashes.

Can be preceded by a number. <+> Moves to the first non-whitespace character of the line below. 5l moves right 5 places. Moves to the first non-whitespace character on the current line. <CR> <> Same as <+>. Moves to the end of the current line. Moves to the line in the middle of the screen. 87 . Moves to the start of the current line. Same as <f><x><. Can be preceded by a number. Moves to the line at the bottom of the screen. <1><G> moves to the first line of the file. Moves backwards to the start of the current word or to the previous word if between words or at the start of a word. which may be on the next line. Move forward one character. or cursor left.><. Move one line up.> or <. or cursor right. Find first occurrence of character c on the same line. • <3><f><x> moves forward on the third occurrence of x (if present). <5><h> moves left 5 places. Must be preceded by a number. <5><j> moves down 5 lines.> <E> <b> <B> <f>c <F>c <t>c <T>c <0> <ˆ> <$> Same as f but backward. 5k moves up 5 lines. • 10.moves up 10 lines. As e but takes into account punctuation. Moves to the line at the top of the screen. <w> <W> <e> Moves to the start of the next word. Can be preceded by a number. Move left one character. placing the cursor after character c. Same as t but backward. Find the character before the first occurrence of character c on the same line. As w but takes into account punctuation. Can be preceded by a number indicating the line to move to. Moves to the first non-whitespace character of the line above. Can be preceded by a number.vi Commands <G> <h> <j> <k> <l> <H> <M> <L> <-> Move to the last line of the file. • 10| moves to column 10. As b but takes into account punctuation. Moves to the end of the current word or to the next word if between words or at the end of a word.This command may be repeated using <. Moves to the specified column on the current line. Can be preceded by a number. or cursor down.> (reverse direction). or cursor up. Can be preceded by a number. Move one line down. • 10+ moves down 10 lines.

The original line is placed into the buffer. or append to the end of the current line. <i> <I> <a> <A> <o> <O> Enters insert mode at the cursor position. 10. Insert mode is terminated by the ESC key. Buffered text can be retrieved by p or P. Display one more line at the top of the screen. replacing any text already in the buffer.2. Move backwards by half a page. Inserts a new line underneath the current line and then goes into insert mode. the deleted text is placed into the buffer. or appends. dd 88 Deletes the current line. Each time a letter is typed it replaces the one under the cursor and the cursor moves to the next character. the next character by b and then inserts another 4 abs. 5Rab followed by ESC replaces the character under the cursor by a. • 5<Ctrl-F> moves forwards five pages. Enters insert mode at the start of the current line. <Ctrl-B> Move backwards one page. Can be preceded by a number. replacing any text already there.2 Inserting All insert commands put vi into insert mode. d5d is the same as 5dd. Enters insert mode at the end of the current line. Can be preceded by a number. • 5dd deletes five lines. • 5<Ctrl-B> moves backwards five pages. 10. Enters replace mode.3 Replacing r R Replaces the character underneath the cursor with the next character typed. Replace mode is terminated by the ESC key.2.4 Deleting Each time a delete command is used. .2. 5ra replaces 5 characters with the letter a. Enters insert mode after the cursor. Can be preceded by a number. 10. <Ctrl-D> <Ctrl-U> <Ctrl-E> <Ctrl-Y> Move forwards by half a page. Inserts a new line above the current line and then goes into insert mode.vi Reference <Ctrl-F> Move forwards one page. Display one more line at the bottom of the screen.

Deletes from the cursor position to before the first instance of the character. but will not delete the end of line marker or any characters on the next line. Can be preceded by a number. replacing any text already there. Deletes from the cursor to the string. d5w is the same as 5dw. dE dw As de but takes into account punctuation. • xp swaps the character underneath the cursor with the one to the right of it.5 Changing The change commands all select text to be removed. dG d/string D d$ dˆ x Deletes the current line and everything to the end of the file. 10. • 5de deletes five words. • 5db deletes five words to the left of the cursor. Deletes from the character underneath the cursor to the start of the next word. d5e is the same as 5de. any remaining original text is deleted. the first letter 'a'. the first letter 'a'. • 5dw deletes five words. and including. either forwards or backwards. Deletes from the cursor to the end of the line. dfc Deletes from the cursor position to the first instance of the character. • dfa deletes text up and to. dW db As dw but takes into account punctuation. Same as D.2.vi Commands de Deletes from the character underneath the cursor to the end of the word. Can be preceded by a number. Can be preceded by a number. Text deleted during a change is placed into the buffer. but not including. Buffered text can be retrieved by p or P. the end of which is indicated by a $. 89 . Insert mode is entered and new text overwrites or extends the text. When the <ESC> key is pressed to terminate the insert. Can be preceded by a number. Deletes from the left of the cursor to the start of the line. • 5x deletes the character underneath the cursor and the next 4 characters. Deletes from the left of the cursor to the start of the previous word. dB dtc As db but takes into account punctuation. Can be preceded by a number. X Delete the character to the left of the cursor. • dta deletes text up and to. Delete the character underneath the cursor. • 5X deletes 5 characters to the left of the cursor.

they are inserted after the current line. • 5s changes 5 characters. the first letter 'a'. Can be preceded by a number. Yanks from the cursor to the start of the next word into the buffer. Can be preceded by a number. • 5ce changes five words. • 5yw yanks five words. it consists of characters only. c5e is the same as 5ce. Can be preceded by a number. Can be preceded by a number. Can be preceded by a number. Change the entire line. • 5yy yanks five lines. cM cc Generally the same as dMi. • cta changes text up and to. they are inserted after the cursor. Text is also copied into the buffer by delete and change commands. Y yw Same as yy. the current line and the next 4 lines. but not including. it consists of characters only.6 Cut and Paste The yank commands copy text into the vi buffer. p If If If If P 90 the buffer consists of whole lines. Same as ddO (uppercase letter "O"). 10. • 5cc changes 5 lines. the buffer consists of whole lines. the current line and the next 4 lines. Can be preceded by a number. ce Change the current word. Changes from the start of the current line to the end of the file. they are inserted before the cursor.vi Reference C Change from the cursor position to the end of the line. yy Yanks the current line into the buffer. they are inserted before the current line. • 5C changes 5 lines. where M is any movement command. Changes from the cursor position to the first instance of the character. . Change the character underneath the cursor. ctc cfc cG s S Changes from the cursor position to the first instance of the character (including the character c). Change the current line. the one under the cursor and the next 4.2. The put or place commands retrieve text from the buffer. cw Exactly the same as ce. This command is inconsistent with the usual vi moving: cw and ce is the same as dei but dwi removes also the spaces until the next word.

wikipedia.org/wiki/regular_expression 91 .7 Searching Searching uses regular expressions2 . Goes to the line above the one containing the search string.> 2 Repeat last search. Repeat last search but in the opposite direction. /pattern/+ Goes to the line after the one containing the search string. it will continue from the start of the file to the cursor position.org//en. • /abc/ seaches for the first occurrence of abc. • /abc/+3 goes to the third line after the one containing abc. which could be a regular expression. Search forward on the current line for the next occurrence of char. If not found.* By using b instead of e you can specify a character offset from the beginning of the matched string. /\cpattern/ ?pattern? ?pattern?- <n> <N> <f>char <F>char <t>char <T>char <. Search backward on the current line for the next occurrence of char. The trailing slash character is optional. Search backward on the current line for the next occurrence of char and leave the cursor on the character after char. The trailing question mark character is optional. Search forward on the current line for the next occurrence of char and leave the cursor on the character before char.vi Commands 10. /pattern/e Leaves the cursor on the last character of the string that pattern matched. http://en. • ?abc?-3 goes to the third line above the one containing abc. As /pattern/ but searches upwards.2.wikibooks. Repeat the last f or F search. /pattern/ Searches for the string.* By adding +num or -num after e you can supply an offset in characters to where the cursor gets left. Does a case insensitive search. For example: /foo/e+3 will leave the cursor 3 characters past the next occurrence of foo. Searching is from the cursor position downwards. stopping at the first match.

wikibooks.$s/foo/bar/g will replace all occurrences of foo with bar on the current line through the end of the file.s/pattern/replacement/g :%s/pattern/replacement/g :x.wikipedia.the Ed8 editor.which is not surprising sed5 .org//en.wikipedia.vi Reference 10. For example: :..wikipedia. can be used to indicate the current line and the character $ can be used to indicate the last line.wikipedia.org//en. For example :. Ex6 and w:Vi7 have common roots . Turn on lowercase mode.* If pattern contains \( and \) they are used to remember what matched between them instead of matching parenthesis characters. Turn on capitalization mode.wikibooks.s/\(\d*\)-\(\d*\)/:/ could match the string 12345-6789 and substitute 6789:12345 for it. The following meta-characters have special meaning in the replacement pattern: & \n \u \l \U \L \E \e 3 4 5 6 7 8 92 Replaced by the text that matched the search pattern. where all of the following characters are capitalized.ys/pattern/replacement/g Replaces the first occurrence of pattern on the current line with replacement.org//en.wikibooks. Replaces all occurrences of pattern on the current line with replacement. • The character . Capitalize the next character (if the character is a letter). http://en.org/wiki/sed http://en.wikipedia.2.org/wiki/Ed_(text_editor) . Turn off capitalization or lowercase mode.18s/foo/bar/g will replace all occurrences of foo with bar on lines 14 through 18.org/wiki/Ex_(text_editor) http://en.org/wiki/Vi http://en. Lowercase the next character (if the character is a letter). Replaces all occurrences of pattern in the whole file with replacement.wikibooks. Replaced by the text matching the search pattern between \( and \).org//en.wikibooks.org/wiki/sed http://en.org//en.8 Search and Replace Search and replace uses regular expressions3 and the Ex command :substitute (short :s) which has syntax similar to the sed4 utility . where n is in the range of 1 through 9 with being replaced by the match from the first set.* For example: :14.wikibooks. Replaces all occurrences of pattern on lines x through y with replacement.s/pattern/replacement/ :.org/wiki/regular_expression http://en. where all of the following characters are lowercased. Turn off capitalization or lowercase mode.org//en.wikipedia. :.

2. Refreshes the screen so that the current line is in the middle of the screen.10 Screen Refresh <Ctrl-L> z<CR> Refresh the screen. in which case the line is at the middle. 10. so that 5˜ changes the case of 5 characters. • 35z. Refreshes the screen so that the current line is at the top.11 Others <˜> Changes the case of the character underneath the cursor and moves to the next character. • 35z refreshes the screen so that line 35 is at the top. refreshes the screen so that line 35 is in the middle. • <'><a> moves to the line marked by a. <'>m Move to the line marked by the letter. The sequence zz also has the same effect. 93 .refreshes the screen so that line 35 is at the bottom. z. Can be preceded by a line number.vi Commands For example . <m>m Mark the current line with the letter. 10. z- /string/z- Finds the line with the first occurrence of string and then refreshes the screen so that it is at the bottom. /string/z.9 Mark Text Marked lines can be used when changing or deleting text. /pattern/z Finds the line with the first occurrence of string and then refreshes the screen so that it is at the top. Can be preceded by a line number. • 35z. in which case the line is at the bottom. Can be preceded by a line number.2.:s/\(foo\) \(bar\) \(baz\)/\u \U\E / could match the string foo bar baz and substitute Foo BAR baz for it. Refreshes the screen so that the current line is at the bottom. • <m><a> marks the current line with the letter a. 10. Finds the line with the first occurrence of string and then refreshes the screen so that it is in the middle. Can be preceded by a number.2.

Used to save and quit in view. but only if no changes have been made. Saves to the file. that is control is returned to the operating system. Quits without saving. any of (). Moves the cursor to the matching bracket. Puts vi into the background.> <%> <Ctrl-G> :f <J> <u> <U> <Ctrl-Z> Repeats the last insert or delete. Can be preceded by a number. 10. regardless of any changes. In UNIX. Saves and quits.vi Reference <. deletes a line and then deletes another 5 lines. Quits.13 Files :e filename :e + filename 94 Quits the current file and starts editing the named file.12 Saving and Quitting <Z><Z> :quit :q :quit! :q! :write :w :write!filename :w!filename :wq :write|quit :exit :xit :x :exit! :xit! :x! Saves and quits. overwriting any existing contents. • {Vi/Ex|:write!}} myfile saves to the file called myfile. Same as <Ctrl-G>. Quits the current file and starts editing the named file with the cursor at the end of the file. It is symbolic of sleep. the vi session can be returned to the foreground with fg. 10. Joins the next line to the end of the current line. Undoes all changes to the current line. the current line and the next two lines. Saves and quits. Temporarily displays a status line at the bottom of the screen.2.2. Undoes the last change. . dd followed by 5. • 3J joins three lines together. Can be preceded by a number. • :e +5 myfile quits the current file and begins editing myfile at line 5. indicating the end of work. Saves the current file without quitting. [] or {}. Both 1J and 2J do the same as J.

ex Commands :e! :e# :n :n files :r filename The current file is closed. and so require an initial colon. ! Set on :set ignorecase :set ic :set list ! Set off :set noignorecase :set noic :set nolist :set number :set nu :set term :set nonumber :set nonu :set autoindent :set ai :set noautoindent :set noai :set hlsearch :set nohlsearch ! Meaning Ignore case. Shows control characters. <Ctrl-I> is tab.4 ex Commands ex commands start with :. Quits the current file and starts editing the previous file. all unsaved changes discarded. which puts vi into last line mode. • :r myfile inserts the file named myfile after the cursor. 10. Turns on line numbering. and the file is re-opened for editing. entered on the last line of the screen. set ic :set all Displays all the current settings. $ is linefeed. The current file will be closed and the first file in the list will be opened for editing. Resets the list of files for :n. Spaces within the command are ignored. Read a file. When multiple files were quoted on the command line. Displays the terminal type. e. Highlights searches matched by /term/. • :5r myfile inserts the file after line 5. 10. Automatically indents lines while in insert mode upon <CR>. Makes searching case insensitive.exrc. start editing the next file. Default options may be placed into a file in the user's home directory called . 95 .3 vi Options All options are ex options. It's a visual aide.g. that is insert a file. Options in this file do not have the initial colon.

• :d deletes the current line. meaning work on the current line..+1 means the line after the current line.4. so . • :1. • :map v i--<Ctrl-[> new command v will insert -. Either number can be replaced with . exit returns to the vi session. Exit last line mode and return to normal command mode. • :m 10 moves the current line and places it after line 10.. 3.vi Reference :! command Executes the named operating system command and then returns to vi.$ means from the current line to the end of the file and 1.and return to command mode. 10.5' meaning work on lines 3 to 5 inclusive.3 m 4 moves lines 1 to 3 and places after line 4. . followed by the line position to copy to. co Copy. No line number. So . • :! ls runs the UNIX ls command. • :. • :%d deletes all lines.1 ex line commands These commands edit lines and have the following syntax: 1.$ means the same as %. 10. Additionally simple arithmetic may be used. <Ctrl-[> is the escape character typed as <CTRLV><ESC>. • :1. m Move. meaning work on all lines.2 Mapping / Remapping vi Commands :map 96 Create new command or overwrite existing in vi command mode. 2.3 co 4 copies lines 1 to 3 and places after line 4.+5d delete the current line and the next 5 lines. • :co 5 copies the current line and places it after line 5. or $-5 means 5 lines before the last line.. such as '3. standing for the current line or $ standing for the last line. d Delete. A pair of line numbers. :sh :vi Starts up a shell. followed by the line position to move to. With %.4..

r in insert mode will return to command mode.org/tutorials/introduction_to_the_vi_editor.sourceforge.html http://planzero. 10.html 97 .r <Ctrl-[> typing .External link :map! Create new command in both command and insert mode.5 External link • vim Official Reference Manual9 • An introduction to the vi editor10 • Learning Unix in 10min11 9 10 11 http://vimdoc. • :map! .php http://freeengineer.net/htmldoc/ref_toc.org/learnUNIXin10minutes.

.

org/wiki/User:Krischik http://en.org/wiki/Learning_the_vi_Editor/Vim http://en.wikibooks.org/wiki/Special:Contributions/Dysprosia http://en.wikibooks.wikibooks.1 List of major contributors • Dysprosia1 ( Contributions2 ) • Martin Krischik3 Learning the vi Editor/Vim4 ( Contributions5 ) • N.wikibooks.wikibooks.whatever it is currently called . Whoever we are. • Others (add your name and description if you made a major contribution) • Various anonymous persons Category7 : • Learning the vi Editor8 1 2 3 4 5 6 7 8 http://en.org/wiki/User:Dysprosia http://en. including the public: it is open for anyone and everybody to improve.org/wiki/Category:Learning_the_vi_Editor 99 .(anonymous): The advanced/Power User/Extra Details part ( Learning the vi Editor/Details6 ) .org/wiki/Special:Contributions/Krischik http://en.wikibooks. Therefore.11 Authors This book has many authors.org/wiki/Learning_the_vi_Editor/Details http://en.wikibooks.wikibooks.N. 11. this is more properly a list of acknowledgements of contributors than a list of authors. this is where we get to brag about our accomplishments in writing this book.org/wiki/Special:Categories http://en.

.

12 Contributors
Edits
69
1
8
1
1
6
7
1
2
4
14
1
78
2
1
1
359
1
1
1
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

User
Adrignola1
AlbertCahalan2
Andreas Ipp3
CarsracBot4
Chinasaur5
Darklama6
Dreftymac7
Eibwen8
Hagindaz9
Hannes Röst10
Jguk11
Jomegat12
Jonathan Webley13
Jusjih14
Kazkaskazkasako15
Kernigh16
Krischik17
LFaraone18
Lee J Haywood19
Liblamb20
Mahanga21

http://en.wikibooks.org/wiki/User:Adrignola
http://en.wikibooks.org/wiki/User:AlbertCahalan
http://en.wikibooks.org/wiki/User:Andreas_Ipp
http://en.wikibooks.org/wiki/User:CarsracBot
http://en.wikibooks.org/wiki/User:Chinasaur
http://en.wikibooks.org/wiki/User:Darklama
http://en.wikibooks.org/wiki/User:Dreftymac
http://en.wikibooks.org/wiki/User:Eibwen
http://en.wikibooks.org/wiki/User:Hagindaz
http://en.wikibooks.org/wiki/User:Hannes_R%25C3%25B6st
http://en.wikibooks.org/wiki/User:Jguk
http://en.wikibooks.org/wiki/User:Jomegat
http://en.wikibooks.org/wiki/User:Jonathan_Webley
http://en.wikibooks.org/wiki/User:Jusjih
http://en.wikibooks.org/wiki/User:Kazkaskazkasako
http://en.wikibooks.org/wiki/User:Kernigh
http://en.wikibooks.org/wiki/User:Krischik
http://en.wikibooks.org/wiki/User:LFaraone
http://en.wikibooks.org/wiki/User:Lee_J_Haywood
http://en.wikibooks.org/wiki/User:Liblamb
http://en.wikibooks.org/wiki/User:Mahanga

101

Contributors
1
3
1
5
2
2
1
2
1
2
1
1
2
3
5
1
1

22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

102

Mercy22
Mga23
Mkn24
Nikai25
Njk26
Panic2k427
Polluks28
R3m0t29
Ramac30
Remi31
Robert Horning32
Thenub31433
Tompurl34
Van der Hoorn35
Waxmop36
Whiteknight37
Xania38

http://en.wikibooks.org/wiki/User:Mercy
http://en.wikibooks.org/wiki/User:Mga
http://en.wikibooks.org/wiki/User:Mkn
http://en.wikibooks.org/wiki/User:Nikai
http://en.wikibooks.org/wiki/User:Njk
http://en.wikibooks.org/wiki/User:Panic2k4
http://en.wikibooks.org/wiki/User:Polluks
http://en.wikibooks.org/wiki/User:R3m0t
http://en.wikibooks.org/wiki/User:Ramac
http://en.wikibooks.org/wiki/User:Remi
http://en.wikibooks.org/wiki/User:Robert_Horning
http://en.wikibooks.org/wiki/User:Thenub314
http://en.wikibooks.org/wiki/User:Tompurl
http://en.wikibooks.org/wiki/User:Van_der_Hoorn
http://en.wikibooks.org/wiki/User:Waxmop
http://en.wikibooks.org/wiki/User:Whiteknight
http://en.wikibooks.org/wiki/User:Xania

List of Figures
• GFDL: Gnu Free Documentation License.
html

http://www.gnu.org/licenses/fdl.

• cc-by-sa-3.0: Creative Commons Attribution ShareAlike 3.0 License.
creativecommons.org/licenses/by-sa/3.0/

http://

• cc-by-sa-2.5: Creative Commons Attribution ShareAlike 2.5 License.
creativecommons.org/licenses/by-sa/2.5/

http://

• cc-by-sa-2.0: Creative Commons Attribution ShareAlike 2.0 License.
creativecommons.org/licenses/by-sa/2.0/

http://

• cc-by-sa-1.0: Creative Commons Attribution ShareAlike 1.0 License.
creativecommons.org/licenses/by-sa/1.0/

http://

• cc-by-2.0: Creative Commons Attribution 2.0 License. http://creativecommons.
org/licenses/by/2.0/
• cc-by-2.0: Creative Commons Attribution 2.0 License. http://creativecommons.
org/licenses/by/2.0/deed.en
• cc-by-2.5: Creative Commons Attribution 2.5 License. http://creativecommons.
org/licenses/by/2.5/deed.en
• cc-by-3.0: Creative Commons Attribution 3.0 License. http://creativecommons.
org/licenses/by/3.0/deed.en
• GPL: GNU General Public License. http://www.gnu.org/licenses/gpl-2.0.txt
• LGPL: GNU Lesser General Public License. http://www.gnu.org/licenses/lgpl.
html
• PD: This image is in the public domain.
• ATTR: The copyright holder of this file allows anyone to use it for any purpose,
provided that the copyright holder is properly attributed. Redistribution, derivative
work, commercial use, and all other use is permitted.
• EURO: This is the common (reverse) face of a euro coin. The copyright on the design
of the common face of the euro coins belongs to the European Commission. Authorised
is reproduction in a format without relief (drawings, paintings, films) provided they
are not detrimental to the image of the euro.
• LFK: Lizenz Freie Kunst. http://artlibre.org/licence/lal/de
• CFR: Copyright free use.

103

39 104 Chapter 13 on page 107 . php Copies of the GPL.List of Figures • EPL: Eclipse Public License.org/org/documents/epl-v10. http://www. the LGPL as well as a GFDL are included in chapter Licenses39 . Please note that images in the public domain do not require attribution. You may click on the image numbers in the following table to open the webpage of the images in your webbrower.eclipse.

Byondlimits48 . AzaToth44 .org/wiki/User:Procus_the_Mad http:////en.org/The_People http:////en.wikipedia.wikipedia.org/wiki/User:Heptite http:////en.wikipedia42 Later version(s) were uploaded by Wapcaplet43 .wikipedia.freedesktop.wikipedia.wikipedia50 .org/wiki/User:Jvihavainen http://en. Mineralè46 .List of Figures 1 2 3 4 5 6 7 8 9 40 41 42 43 44 45 46 47 48 49 50 The people from the Tango! project40 Original uploader was Ehamberg41 at en.wikipedia.wikipedia.org/wiki/User:Mineral%C3%83%C2%A8 http:////en.wikipedia. Procus the Mad47 .org/wiki/User:Ehamberg http://en.wikipedia.org 105 .org/wiki/User:AzaToth http:////en.wikipedia. Krischik GPL HDBot http://tango.wikipedia.org/wiki/User:Byondlimits http:////en.org http:////en.org/wiki/User:Wapcaplet http:////en. Heptite45 . Jvihavainen49 at en.

.

Corresponding Source conveyed. The “Corresponding Source” for a work in object code form means all the source code needed to generate. In the following three paragraphs. distribution (with or without modification). in this context. This alternative is allowed only occasionally and noncommercially. Some devices are designed to deny users access to install or run modified versions of the software inside them. Protecting Users' Legal Rights From AntiCircumvention Law. or subdividing an organization. is not conveying. 6. or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. provided that you also meet all of these conditions: * a) The work must carry prominent notices stating that you modified it. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations. A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. Conveying Non-Source Forms. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. trademarks. using. that part may be used separately under those permissions. and grant a patent license to some of the parties receiving the covered work authorizing them to use. provided that you also convey the machine-readable Corresponding Source under the terms of this License. then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. Therefore. to any of the parties who would receive the covered work from you. propagate. you must place. and must require no special password or key for unpacking. accompanied by a written offer. each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License. and (for an executable work) run the object code and to modify the work. or (2) arrange to deprive yourself of the benefit of the patent license for this particular work. so that their problems will not be attributed erroneously to authors of previous versions. or embodied in.1 GNU GENERAL PUBLIC LICENSE Version 3. the recipient automatically receives a license from the original licensors. family. as provided by copyright law. If the Program as you received it. royalty. would infringe one or more identifiable patents in that country that you have reason to believe are valid. subject to this License. 1. we stand ready to extend this provision to those domains in future versions of the GPL. regardless of how they are packaged. you may add to a covered work material governed by the terms of that license document. The precise terms and conditions for copying. or the modifications to produce it from the Program. you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. A “User Product” is either (1) a “consumer product”. or if you modify it: responsibilities to respect the freedom of others. but the entire Program remains governed by this License without regard to the additional permissions. If the interface presents a list of user commands or options. but in those that do. and so on) of the specific operating system (if any) on which the executable work runs. This License acknowledges your rights of fair use or other equivalent. through a publicly available network server or other readily accessible means. or. and (b) permanently. or * d) Limiting the use for publicity purposes of names of licensors or authors of the material. or requiring that modified versions of such material be marked in reasonable ways as different from the original version. although the manufacturer can do so. A patent license is “discriminatory” if it does not include within the scope of its coverage. “Licensees” and “recipients” may be individuals or organizations. in one of these ways: * a) Convey the object code in. for a price no more than your reasonable cost of physically performing this conveying of source. To “propagate” a work means to do anything with it that. or * f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient. and you cure the violation prior to 30 days after your receipt of the notice. For example. or that patent license was granted. you may remove that term. A “Major Component”. need not be included in conveying the object code work. and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require. Patents. Moreover. and giving a relevant date. and (2) offer you this License giving you legal permission to copy. You are not responsible for enforcing compliance by third parties with this License. you indicate your acceptance of this License to do so. Acceptance Not Required for Having Copies. To prevent this. contains a notice stating that it is governed by this License along with a term that is a further restriction. royalty-free patent license under the contributor's essential patent claims. For purposes of this definition. 7. or selling its contributor version. section 10 makes it unnecessary. When we speak of free software. valid for at least three years and valid for as long as you offer spare parts or customer support for that product model. 10. in the relevant source files. An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice. which are not by their nature extensions of the covered work. These actions infringe copyright if you do not accept this License. or propagate by procuring conveyance of. such as semiconductor masks. 9. and Installation Information provided. which means any tangible personal property which is normally used for personal. whether gratis or for a fee. modify and propagate that work. You may convey a work based on the Program. If such problems arise substantially in other domains. Each time you convey a covered work. A compilation of a covered work with other separate and independent works. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. If. modify or convey a specific copy of the covered work.13 Licenses 13. authorization keys. if the predecessor has it or can get it with reasonable efforts. Automatic Licensing of Downstream Recipients. prohibits the exercise of. You may convey verbatim copies of the Program's source code as you receive it. or other charge for exercise of rights granted under this License. then you must either (1) cause the Corresponding Source to be so available. or similar laws prohibiting or restricting circumvention of such measures. provided you maintain clear directions next to the object code saying where to find the Corresponding Source. in a manner consistent with the requirements of this License. use. you may not impose a license fee. it does not include the work's System Libraries. provided that the further restriction does not survive such relicensing or conveying. prior to 28 March 2007. for any liability that these contractual assumptions directly impose on those licensors and authors. other than the work as a whole. 11. Inc. one that is widely used among developers working in that language. the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. For the developers' and authors' protection. The Corresponding Source for a work in source code form is that same work. your or third parties' legal rights to forbid circumvention of technological measures. and that you know you can do these things. and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making. in or on a volume of a storage or distribution medium. plus a right to possession of the Corresponding Source of the work from the predecessor in interest. or expects or is expected to use. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish). a User Product. or stated as exceptions. the product. You may make. and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). or updates for a work that has been modified or installed by the recipient. you have certain responsibilities if you distribute copies of the software. for material you add to a covered work. Preamble The GNU General Public License is a free. If you convey a covered work. Additional terms. “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. it applies also to any other work released this way by its authors. as a whole. or * c) Prohibiting misrepresentation of the origin of that material. using. permissive or non-permissive. run and propagate covered works that you do not convey. install. procedures. By contrast. or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. copyleft license for software and other kinds of works. 12. unless you entered into that arrangement. A “covered work” means either the unmodified Program or a work based on the Program. * b) Convey the object code in. constitutes a covered work. and the Corresponding Source of the work is not available for anyone to copy. and under which the third party grants. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software. a statement of the additional terms that apply to those files. making available to the public. For example. Additional Terms. a physical product (including a physical distribution medium). along with any applicable section 7 additional terms. not price. if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program. a prominent item in the list meets this criterion. Therefore. offer for sale. Corresponding Source includes interface definition files associated with source files for the work. the work has been installed in ROM). If the place to copy the object code is a network server. we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. or any part of it. or from any part of it. to the whole of the work. industrial or non-consumer uses. Notwithstanding any other provision of this License. To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. 5. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. that you receive source code or can get it if you want it. provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. we are referring to freedom. or embodied in. Finally. “Object code” means any non-source form of a work. import and otherwise run. or substantially all assets of one. You are not required to accept this License in order to receive or run a copy of the Program. Each contributor grants you a non-exclusive. except executing it on a computer or modifying a private copy. to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License. This License explicitly affirms your unlimited permission to run the unmodified Program. Therefore. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. However. you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work. unless and until the copyright holder explicitly and finally terminates your license. they do not excuse you from the conditions of this License. receive or can get the source code. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996. Those thus making or running the covered works for you must do so exclusively on your behalf. A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body. You may not propagate or modify a covered work except as expressly provided under this License. The output from running a covered work is covered by this License only if the output. sell. However. Regardless of what server hosts the Corresponding Source. means a major essential component (kernel. Conveying Verbatim Copies. For a particular product received by a particular user. too. and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Conveying under any other circumstances is permitted solely under the conditions stated below. we need to prevent others from denying you these rights or asking you to surrender the rights. and how to view a copy of this License. <http://fsf. and only if you received the object code with such an offer. and all its parts. your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means. For example. The “System Libraries” of an executable work include anything. without conditions so long as your license otherwise remains in force. You need not require recipients to copy the Corresponding Source along with the object code. * b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. If your rights have been terminated and not permanently reinstated. 8. to run. and (b) serves only to enable use of the work with that Major Component. then as a consequence you may not convey it at all. too. Each licensee is addressed as “you”. or to implement a Standard Interface for which an implementation is available to the public in source code form. under your direction and control. or (3) arrange. We. this is the first time you have received notice of violation of this License (for any work) from that copyright holder. and in some countries other activities as well. You may convey a covered work in object code form under the terms of sections 4 and 5. such as a menu. * d) Convey the object code by offering access from a designated place (gratis or for a charge). under which you make payment to the third party based on the extent of your activity of conveying the work. the GPL clearly explains that there is no warranty for this free software. 3. if you cease all violation of this License. your conveying the covered work in a country. and give all recipients a copy of this License along with the Program. The “source code” for a work means the preferred form of the work for making modifications to it. or specifically for use in. permitted by this License. reading or copying. you convey. you must pass on to the recipients the same freedoms that you received. is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. the only way you could satisfy . A product is a consumer product regardless of whether the product has substantial commercial. States should not allow patents to restrict development and use of software on general-purpose computers. of making. No Surrender of Others' Freedom. regardless of the status of the particular user or of the way in which the particular user actually uses. An “entity transaction” is a transaction transferring control of an organization. the Free Software Foundation. that (a) is included in the normal form of packaging a Major Component. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. or your recipient's use of the covered work in a country. A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor. in any medium. the Corresponding Source conveyed under this section must be accompanied by the Installation Information. but for the patent license. offering for sale. or a notice indicating where to find the applicable terms. In determining whether a product is a consumer product. on a durable physical medium customarily used for software interchange. 2. whose source code is excluded from the Corresponding Source as a System Library. or (2) access to copy the Corresponding Source from a network server at no charge. If propagation of a covered work results from an entity transaction. * c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. by modifying or propagating a covered work. would make you directly or secondarily liable for infringement under applicable copyright law. your work need not make them do so. 4. (Additional permissions may be written to require their own removal in certain cases when you modify the work. to the extent that they are valid under applicable law. as needed to protect the freedom of users. A separable portion of the object code. pursuant to or in connection with a single transaction or arrangement. The requirement to provide Installation Information does not include a requirement to continue to provide support service. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example. however denominated.) You may place additional permissions on material. in the case of interfaces specified for a particular programming language. free of charge and under the terms of this License. TERMS AND CONDITIONS 0. If additional permissions apply only to part of the Program. * e) Convey the object code using peer-to-peer transmission. or with. and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided). to extend the patent license to downstream recipients. a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies). a “patent license” is any express agreement or commitment. If you convey an object code work under this section in. or provide you with facilities for running those works. When you convey a copy of a covered work. All rights granted under this License are granted for the term of copyright on the Program. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. To protect your rights. or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. or (b) primarily for and in connection with specific products or compilations that contain the covered work. added by you to a covered work. This License gives no permission to license the work in any other way. or merging organizations. or (2) anything designed or sold for incorporation into a dwelling. and are irrevocable provided the stated conditions are met. in accord with subsection 6b. for which you have or can give appropriate copyright permission. with no transfer of a copy. but do not include claims that would be infringed only as a consequence of further modification of the contributor version. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. in the form of source code under the terms of section 4. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. nothing other than this License grants you permission to propagate or modify any covered work. “Knowingly relying” means you have actual knowledge that. if the Program has interactive interfaces that do not display Appropriate Legal Notices. if you distribute copies of such a program. distribution and modification follow. If a license document contains a further restriction but permits relicensing or conveying under this License. This requirement modifies the requirement in section 4 to “keep intact all notices”. use the GNU General Public License for most of our software. such as by intimate data communication or control flow between those subprograms and other parts of the work. You must make sure that they. To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission. you do not qualify to receive new licenses for the same material under section 10. provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice. “normally used” refers to a typical or common use of that class of product. Termination. we have designed this version of the GPL to prohibit the practice for those products. if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. The work thus licensed is called the contributor's “contributor version”. under this License to anyone who comes into possession of a copy. However. that licensees may convey the work under this License. The systematic pattern of such abuse occurs in the area of products for individuals to use. Basic Permissions. the above requirements apply either way. If you add terms to a covered work in accord with this section. If conditions are imposed on you (whether by court order. accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you. provided that you comply with the terms of this License in conveying all material for which you do not control copyright. keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code. knowingly relying on a patent license. but which is not part of that Major Component. that you can change the software or use pieces of it in new free programs. Propagation includes copying. in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form). that would be infringed by some manner. “This License” refers to version 3 of the GNU General Public License.org/> Everyone is permitted to copy and distribute verbatim copies of this license document. every program is threatened constantly by software patents. may be stated in the form of a separately written license. For both users' and authors' sake. All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. which is precisely where it is most unacceptable. you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: * a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License. or * b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it. or a compiler used to produce the work. Definitions. unless such uses represent the only significant mode of use of the product. each must display Appropriate Legal Notices. Source Code. Conveying Modified Source Versions. or household purposes. selling. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software. or an object code interpreter used to run it. and which are not combined with it such as to form a larger program. doubtful cases shall be resolved in favor of coverage. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. window system. however. * d) If the work has interactive user interfaces. “The Program” refers to any copyrightable work licensed under this License. the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities. distribute and/or modify it. You can apply it to your programs. you may at your option remove any additional permissions from that copy. given its content. * c) You must license the entire work. “Installation Information” for a User Product means any methods. the GPL requires that modified versions be marked as changed. keep intact all notices of the absence of any warranty. This License will therefore apply. against the work's users. “Copyright” also means copyright-like laws that apply to other kinds of works. Sublicensing is not allowed. Mere interaction with a user through a computer network. To “convey” a work means any kind of propagation that enables other parties to make or receive copies. the GPL assures that patents cannot be used to render the program non-free. or for the User Product in which it has been modified or installed. modify and propagate the contents of its contributor version. and you disclaim any intention to limit operation or modification of the work as a means of enforcing. 29 June 2007 Copyright © 2007 Free Software Foundation. or service marks. a physical product (including a physical distribution medium). For example. warranty. and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized). but changing it is not allowed. worldwide. then your license from a particular copyright holder is reinstated (a) provisionally. on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. to make. and you may offer support or warranty protection for a fee. a covered work. When you convey a covered work. or * e) Declining to grant rights under trademark law for use of some trade names. whether already acquired or hereafter acquired. without permission. including scripts to control those activities. other than the making of an exact copy. You may charge any price or no price for each copy that you convey. Any attempt otherwise to propagate or modify it is void. And you must show them these terms so they know their rights. agreement or otherwise) that contradict the conditions of this License. but it does not invalidate such permission if you have separately received it. not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. or importing the Program or any portion of it.

in or on a volume of a storage or distribution medium. you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. you would use an “about box”. Delete any section Entitled "Endorsements". Each version of the License is given a distinguishing version number. in the form shown in the Addendum below.3. Permission is granted to copy. 9. Inc. "Endorsements". We have designed this License in order to use it for manuals for free software. Disclaimer of Warranty. or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. If you distribute a large enough number of copies you must also follow the conditions in section 3. or state in or with each Opaque copy a computer-network location from which the general networkusing public has access to download using public-standard network protocols a complete Transparent copy of the Document. PostScript or PDF produced by some word processors for output purposes only. BE LIABLE TO YOU FOR DAMAGES. or distribute the Document except as expressly provided under this License.) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. If the Document does not identify any Invariant Sections then there are none. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. you may accept compensation in exchange for copies. you must enclose the copies in covers that carry. * B.org/> Everyone is permitted to copy and distribute verbatim copies of this license document. commercial. the original version will prevail. The GNU General Public License does not permit incorporating your program into proprietary programs. and the machine-generated HTML. and to convey the resulting work. Preserve the network location. as long as they preserve the title of the Document and satisfy these conditions. the name of the original author or publisher of that section if known. * G. Include an unaltered copy of this License.org/copyleft/. and (b) permanently. If not. * L. but the special requirements of the GNU Affero General Public License.gnu. Secondarily. previously added by you or by arrangement made by the same entity you are acting on behalf of. or if the original publisher of the version it refers to gives permission. ADDENDUM: How to use this License for your documents To use this License in a document you have written. unless they release you from this requirement. or the electronic equivalent of covers if the Document is in electronic form. distribute and/or modify this document under the terms of the GNU Free Documentation License. . You should have received a copy of the GNU General Public License along with this program. 7. make it output a short notice like this when it starts in an interactive mode: If you develop a new program. and any Warranty Disclaimers. 2001. * N. * K. modify. sublicense. all these Cover Texts: Front-Cover Texts on the front cover. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses It is requested. in the notice that says that the Document is released under this License. and from those of previous versions (which should. Such a section may not be included in the Modified Version. The "Document". 5. For more information on this. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used. If you publish printed copies (or copies in media that commonly have printed covers) of the Document. and that you add no other conditions whatsoever to those of this License. and you cure the violation prior to 30 days after your receipt of the notice. in the notice that says that the Document is released under this License. make the title of each such section unique by adding at the end of it. 2009. You may omit a network location for a work that was published at least four years before the Document itself. 3 November 2008 Copyright © 2000. <one line to give the program's name and a brief idea of what it does. unlimited in duration. and follow this License in all other respects regarding verbatim copying of that document. you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. A Front-Cover Text may be at most 5 words. Any member of the public is a licensee. ethical or political position regarding them. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. and publisher of the Modified Version as given on the Title Page. refers to any such manual or work. A "Modified Version" of the Document means any work containing the Document or a portion of it. INCLUDING. but may differ in detail to address new problems or concerns. If you publish or distribute Opaque copies of the Document numbering more than 100. List on the Title Page. * O. Also add information on how to contact you by electronic and paper mail. section 13. State on the Title page the name of the publisher of the Modified Version. TERMINATION If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document. PREAMBLE The purpose of this License is to make a manual. Title (section 1) will typically require changing the actual title. a Secondary Section may not explain any mathematics. your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means. either commercially or noncommercially. and subsequently incorporated in whole or in part into the MMC. Such new versions will be similar in spirit to the present version. If you use the latter option. year. one or more persons or entities responsible for authorship of the modifications in the Modified Version. VERBATIM COPYING You may copy and distribute the Document in any medium.) The relationship could be a matter of historical connection with the subject or with related matters. and if all works that were first published under this License somewhere other than this MMC. 14. TO THE EXTENT PERMITTED BY APPLICABLE LAW. The "Title Page" means." line with this: with the Invariant Sections being LIST THEIR TITLES. You may use the same title as a previous version if the original publisher of that version gives permission. You may extract a single document from such a collection. Examples of transparent image formats include PNG. You should also get your employer (if you work as a programmer) or school. and list them all as Invariant Sections of your combined work in its license notice. Any attempt otherwise to copy. but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. To do so. the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. SGML or XML using a publicly available DTD. "Incorporate" means to publish or republish a Document. the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate. 2. Such new versions will be similar in spirit to the present version. * I. a license notice giving the public permission to use the Modified Version under the terms of this License. this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. clearly and legibly. * F. If there are multiple Invariant Sections with the same name but different contents. but you may replace the old one. but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. and you want it to be of the greatest possible use to the public. and that you preserve all their Warranty Disclaimers. you may not add another. preceding the beginning of the body of the text. unaltered in their text and in their titles. in parentheses.0 license published by Creative Commons Corporation. Version 1. which means that derivative works of the document must themselves be free in the same sense. Preserve its Title. to use that work under the conditions stated herein. under the same conditions stated above. and you may publicly display copies. Notwithstanding any other provision of this License. which is a copyleft license designed for free software. Both covers must also clearly and legibly identify you as the publisher of these copies. provided that you include in the combination all of the Invariant Sections of all of the original documents. 11. A "Transparent" copy of the Document means a machine-readable copy. be listed in the History section of the Document). These titles must be distinct from any other section titles. numbering more than 100. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms. You must delete all sections Entitled "Endorsements". because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. your program's commands might be different. In addition. while not being considered responsible for modifications made by others. if it has fewer than five). APPLICABILITY AND DEFINITIONS following text that translates XYZ in another language. A public wiki that anybody can edit is an example of such a server. or some other combination of the three. and any sections Entitled "Dedications". * C. California. 2008. (Thus. you must take reasonably prudent steps. Moreover. modify. "Dedications". as authors. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works. Use with the GNU Affero General Public License. with or without modifying it. statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. you may consider it more useful to permit linking proprietary applications with the library. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1. * E. You may include a translation of this License. However. with the Modified Version filling the role of the Document.html>. you should put the first ones listed (as many as fit reasonably) on the actual cover. create one stating the title. use the GNU Lesser General Public License instead of this License. and no Back-Cover Texts. If you have Invariant Sections.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. given in the Document for public access to a Transparent copy of the Document. without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Preserve all the copyright notices of the Document. BUT NOT LIMITED TO. that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. concerning interaction through a network will apply to the combination as such. and standardconforming simple HTML. forming one section Entitled "History". if any. to permit their use in free software. and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. and will automatically terminate your rights under this License. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER. 3. If the Document does not specify a version number of this License. if there were any. on explicit permission from the previous publisher that added the old one. You may also lend copies. and a passage of up to 25 words as a Back-Cover Text. "Dedications". no Front-Cover Texts. EITHER EXPRESSED OR IMPLIED. and how to apply and follow the GNU GPL. we recommend releasing these examples in parallel under your choice of free software license. authors. unmodified. include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. However. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above. 17. and multiple identical Invariant Sections may be replaced with a single copy. The Document may contain zero Invariant Sections. but changing it is not allowed. (Here XYZ stands for a specific section name mentioned below. legibly. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. For works in formats which do not have any title page as such. "Title Page" means the text near the most prominent appearance of the work's title. please read <http://www. likewise combine any sections Entitled "Acknowledgements". Replacing Invariant Sections with translations requires special permission from their copyright holders. with no Invariant Sections. and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. The "Invariant Sections" are certain Secondary Sections whose titles are designated. However. EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 6. The "publisher" means any person or entity that distributes copies of the Document to the public. modify or distribute the work in a way requiring permission under copyright law. TRANSLATION Translation is considered a kind of modification. COMBINING DOCUMENTS You may combine the Document with other documents released under this License. Of course. below.org/licenses/>. royalty-free license. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. the copyright notices. Section numbers or the equivalent are not considered part of the section titles. The terms of this License will continue to apply to the part which is the covered work. with the Front-Cover Texts being LIST. These may be placed in the "History" section. and you are welcome to redistribute it under certain conditions. you may choose any version ever published by the Free Software Foundation. the requirement (section 4) to Preserve its You may not copy. 0. and publisher of the Document as given on its Title Page. provided you insert a copy of this License into the extracted document. free of added material. 2007. LaTeX input format. or "History". type `show c' for details. you must combine any sections Entitled "History" in the various original documents. attach the following notices to the program.gnu. if necessary. INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS). revised versions of the GNU Free Documentation License from time to time. SHOULD THE PROGRAM PROVE DEFECTIVE. as Front-Cover Texts or Back-Cover Texts. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND. A copy of the license is included in the section entitled "GNU Free Documentation License". Each version is given a distinguishing version number. to sign a “copyright disclaimer” for the program. Revised Versions of this License. no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. you must do these things in the Modified Version: * A. * D. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License. when you begin distribution of Opaque copies in quantity. but not required. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. under the terms defined in section 4 above for modified versions. and is addressed as "you". 2008 Free Software Foundation. to give them a chance to provide you with an updated version of the Document. see <http://www. and the license notice saying this License applies to the Document are reproduced in all copies. but WITHOUT ANY WARRANTY. then your license from a particular copyright holder is reinstated (a) provisionally. a not-forprofit corporation with a principal place of business in San Francisco. But this License is not limited to software manuals. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3. you may choose any version ever published (not as a draft) by the Free Software Foundation. textbook. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. then if the Document is less than one half of the entire aggregate. that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. and each file should have at least the “copyright” line and a pointer to where the full notice is found. you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. 2002. 4. You may add other material on the covers in addition. that you contact the authors of the Document well before redistributing any large number of copies. to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. if you cease all violation of this License. You may add a section Entitled "Endorsements". and Back-Cover Texts on the back cover. <http://fsf. 13. Preserve all the Invariant Sections of the Document. Texinfo input format. as being those of Invariant Sections. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works.both those terms and this License would be to refrain entirely from conveying the Program. and (2) were thus incorporated prior to November 1. so you may distribute translations of the Document under the terms of section 4. but may differ in detail to address new problems or concerns. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. merge those two alternatives to suit the situation. that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor.org/licenses/>. and likewise the network locations given in the Document for previous versions it was based on. it can be used for any textual work. COPYING IN QUANTITY This License applies to any manual or other work. The front cover must present the full title with all words of the title equally prominent and visible. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program. that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. 15. See http://www. the title page itself. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. sublicense. in any medium. To do this. or "History".2 GNU Free Documentation License Version 1. Preserve any Warranty Disclaimers. An image format is not Transparent if used for any substantial amount of text. 10.org/philosophy/why-not-lgpl. It complements the GNU General Public License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. for a GUI interface. or distribute it is void. Preserve the section Entitled "History". A copy made in an otherwise Transparent file format whose markup. These Warranty Disclaimers are considered to be included by reference in this License. If your document contains nontrivial examples of program code. OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE. 13. Copying with changes limited to the covers. This program is distributed in the hope that it will be useful. For any section Entitled "Acknowledgements" or "Dedications". such as the GNU General Public License. But first. If you have Invariant Sections without Cover Texts.3 or any later version published by the Free Software Foundation. unless and until the copyright holder explicitly and finally terminates your license. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new. An MMC is "eligible for relicensing" if it is licensed under this License. If the Cover Text requirement of section 3 is applicable to these copies of the Document. If there is no section Entitled "History" in the Document.gnu. in whole or in part. You accept the license if you copy. if any) a title distinct from that of the Document. and add to it an item stating at least the title. if the Document is in part a textbook of mathematics. or absence of markup. has been arranged to thwart or discourage subsequent modification by readers is not Transparent. to the end of the list of Cover Texts in the Modified Version. and distribute it individually under this License. and continue the rest onto adjacent pages. you may at your option designate some or all of these sections as invariant. YOU ASSUME THE COST OF ALL NECESSARY SERVICING. SGML or XML for which the DTD and/or processing tools are not generally available. and replace the individual copies of this License in the various documents with a single copy that is included in the collection. Interpretation of Sections 15 and 16. Preserve the Title of the section. Otherwise they must appear on printed covers that bracket the whole aggregate. * M. if any. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors. or else a unique number. either copied verbatim. PostScript or PDF designed for human modification. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. A copy that is not "Transparent" is called "Opaque". for a printed book. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty. INCLUDING ANY GENERAL. If the Document specifies that a particular numbered version of this License "or any later version" applies to it. this License preserves for the author and publisher a way to get credit for their work. plus such following pages as are needed to hold. provided it contains nothing but endorsements of your Modified Version by various parties—for example. receipt of a copy of some or all of the same material does not give you any rights to use it. provided the MMC is eligible for relicensing. provided that you also include the original English version of this License and the original versions of those notices and disclaimers. year. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If the program does terminal interaction. You may add a passage of up to five words as a Front-Cover Text. Limitation of Liability. philosophical. the material this License requires to appear in the title page. Such a notice grants a world-wide. if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer. If this is what you want to do. and all the license notices in the Document. SPECIAL. 16. either version 3 of the License. Use in the Title Page (and on the covers. (1) had no cover texts or invariant sections. replace the "with … Texts. represented in a format whose specification is available to the general public. REPAIR OR CORRECTION. If your program is a subroutine library. In the combination. this is the first time you have received notice of violation of this License (for any work) from that copyright holder. unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. either commercially or noncommercially. or (at your option) any later version. Later license versions may give you additional or different permissions. for details type `show w'. We recommend this License principally for works whose purpose is instruction or reference. The "Cover Texts" are certain short passages of text that are listed. see <http://www. If the Document specifies that a proxy can decide which future versions of this License can be used. If the Program does not specify a version number of the GNU General Public License. can be treated as verbatim copying in other respects. 8. such as "Acknowledgements". If the required texts for either cover are too voluminous to fit legibly. <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY. When the Document is included in an aggregate. and a Back-Cover Text may be at most 25 words. If your rights have been terminated and not permanently reinstated. The combined work need only contain one copy of this License. Front-Cover Texts and Back-Cover Texts. and the Document's license notice requires Cover Texts. Examples of suitable formats for Transparent copies include plain ASCII without markup.gnu. * H. you must either include a machine-readable Transparent copy along with each Opaque copy. provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. then add an item describing the Modified Version as stated in the previous sentence. This is free software. This License is a kind of "copyleft". THERE IS NO WARRANTY FOR THE PROGRAM. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. 1. If the Document already includes a cover text for the same cover. regardless of subject matter or whether it is published as a printed book. together with at least five of the principal authors of the Document (all of its principal authors. XCF and JPG. as part of another Document. or with modifications and/or translated into another language. If a section in the Document is Entitled "Acknowledgements". add their titles to the list of Invariant Sections in the Modified Version's license notice. new authors. Include. and with the Back-Cover Texts being LIST. or of legal. provided that this License. * J. See the GNU General Public License for more details. as the publisher. immediately after the copyright notices. provided that you release the Modified Version under precisely this License. as well as future copyleft versions of that license published by that same organization.

If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply. if the incorporated material is not limited to numerical parameters. and convey such a combined library under terms of your choice. and the Corresponding Application Code in a form suitable for. and performs whatever part of its purpose remains meaningful. you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work.) * a) Accompany the combined library with a copy of the same work based on the Library. 2. data structure layouts and accessors. 4. as well as a reference directing the user to the copies of the GNU GPL and this license document. * a) under this License. Object Code Incorporating Material from Library Header Files. If you modify a copy of the Library. provided that. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system. include the copyright notice for the Library among these notices. . You may convey such object code under terms of your choice. The object code form of an Application may incorporate material from a header file that is part of the Library. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. other than an Application or a Combined Work as defined below. * d) Do one of the following: o 0) Convey the Minimal Corresponding Source under the terms of this License. conveyed under the terms of this License. uncombined with any other library facilities. or small macros. then you may convey a copy of the modified version: As used herein. or * b) under the GNU GPL. but changing it is not allowed. If the Library as you received it does not specify a version number of the GNU Lesser General Public License. * b) Accompany the object code with a copy of the GNU GPL and this license document. that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. If you use option 4d1. * e) Provide Installation Information. and not on the Linked Version. effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications. if you do both of the following: * a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. 6. 0. “this License” refers to version 3 of the GNU Lesser General Public License. * c) For a Combined Work that displays copyright notices during execution. <http://fsf.3 GNU Lesser General Public License GNU LESSER GENERAL PUBLIC LICENSE Version 3. and under terms that permit. Conveying Modified Versions. and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. taken together. you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. you do both of the following: * a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked). If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License “or any later version” applies to it. but may differ in detail to address new problems or concerns. * b) Give prominent notice with the combined library that part of it is a work based on the Library. Inc.13. An “Application” is any work that makes use of an interface provided by the Library. Revised Versions of the GNU Lesser General Public License. in your modifications. * b) Accompany the Combined Work with a copy of the GNU GPL and this license document. You may convey a Combined Work under terms of your choice that. excluding any source code for portions of the Combined Work that. Such new versions will be similar in spirit to the present version. supplemented by the additional permissions listed below. with none of the additional permissions of this License applicable to that copy. and the “GNU GPL” refers to version 3 of the GNU General Public License. Everyone is permitted to copy and distribute verbatim copies of this license document. 29 June 2007 Copyright © 2007 Free Software Foundation. Combined Works. o 1) Use a suitable shared library mechanism for linking with the Library. 1. 5. Additional Definitions. inline functions and templates (ten or fewer lines in length). A “Combined Work” is a work produced by combining or linking an Application with the Library. Combined Libraries. The “Minimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work. Each version is given a distinguishing version number. “The Library” refers to a covered work governed by this License. provided that you make a good faith effort to ensure that. but which is not otherwise based on the Library. and. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. are based on the Application. and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. The particular version of the Library with which the Combined Work was made is also called the “Linked Version”. 3. but only if you would otherwise be required to provide such information under section 6 of the GNU GPL. if you also do each of the following: You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License. considered in isolation. in the event an Application does not supply the function or data. the facility still operates. (If you use option 4d0. and explaining where to find the accompanying uncombined form of the same work.org/> The “Corresponding Application Code” for a Combined Work means the object code and/or source code for the Application. but excluding the System Libraries of the Combined Work. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. including any data and utility programs needed for reproducing the Combined Work from the Application. Exception to Section 3 of the GNU GPL.

Related Interests

data': [0. for var in list operations 42 76 #Object_oriented_programming . 2. They make the difference between a simple command set (vi) and a full features script language (vim).13 Control Structures The existence of control structures is the main difference between vi's ex commands and vim's scripting language.Vim 7.data) endfunction mydict.2 loop while while condition operations endwhile for For loops are available from vim 7 onwards.13.

2 Functions function f ( parameter ) operations endfunction New with vim 7 is the autoload option for functions.14 Subprograms 7.14.vim extension. The difference lies in the use of a search path. If you want runtime to load all the matches .org/wiki/Shell_(computing) #Object_oriented_programming 77 .provided that "˜/vimfiles" is part of your runtime search path: runtime setup.1 Simple Subprograms Like most Shell-Languages43 all subprograms are stored in separate files which you load either with the source or runtime command.Subprograms endfor 7. Since runtime supports both a search path and wildcards more than one match is possible. 43 44 http://en.and not just the first hit .use runtime!.wikipedia. 7.vim".vim" or "Directory/Filename.13. runtime uses a search path and allows wildcards to find the sub-program while source need the full path. The following commands do the same .vim source ˜/vimfiles/setup. This option is especially useful for functions which you don't always need on in Object oriented programming44 . If you name a function Filename#Functionname or Directory#Filename#Functionname then the function will be automatically loaded on first call.14.vim For both commands need to add the .org//en. The file containing the function must be placed in one of the "autoload" runtime directories and be named "Filename.wikibooks.3 exceptions try operations catch /pattern/ error handling operations finally clean-up operations endtry 7.

1 Step by Step walk-through We add our new class to a autoload script.. return 45 46 47 48 49 78 http://en. If you like to have a look at the full version you can download the plugin from vim.vim.org site49 .15 Object oriented programming Vim 7 now allows object oriented programming45 . Apart from that they are just normal scripting functions. 7.org/scripts/script.14. Funcrefs47 and the new function autoload48 .Vim 7. function gnat#Make () dict .15. However.vim 7. That way the class is available when and only when needed: if exists ("g:loaded_gnat_autoload") || version < 700 finish else let g:loaded_gnat_autoload=1 Each function we define need to be defined with the "dict" attribute. return endfunction gnat#Make function gnat#Pretty () dict .org/wiki/Object_Oriented_Programming #Dictionary #Funcref #Functions http://www.. in order to make it real you need to combine several features.wikibooks. The following example class is taken from the gnat compiler plugin for vim...3 Commands command Command Command Command are often used as shortcut for functions and subprograms: command C -nargs=* call F ( <f-args> ) command C source ˜/vimfiles/s.php?script_id=1609 .. return endfunction gnat#Make function gnat#Find () dict . namely Dictionaries46 .. The actual functions implementations have been removed as they are not needed to understand the concept.

AD*"'.Set_Project_File(argv(0)) elseif strlen(v:servername) > 0 call Retval.. \ 'Set_Project_File' : function ('gnat#Set_Project_File').. For best flexibility the use of a so called constructor function is suggested. In most OO languages this happens automatically .Set_Project_File(v:servername . " -v \ 'Error_Format' : '%f:%l:%c: %trror: %m. self.Object oriented programming endfunction gnat#Find function gnat#Tags () dict .Project_File .' . \ 'Get_Command' : function ('gnat#Get_Command').Project_File ... : '"gnat xref -P " . return endfunction gnat#Set_Project_File function gnat#Get_Command (Command) dict . return .. \ 'Pretty' : function ('gnat#Pretty').But with vim we have to do this ourselves. " -F -gnatef "'. The constructor is not marked with "dict": function gnat#New () The constructor creates a dictionary which assigns all the object functions to one element of the dictionary: let Retval = { \ 'Make' : function ('gnat#Make'). \ '%f:%l:%c: %tarning: %m. endfunction gnat#Get_Command The most important step is the composition of the object.) dict . \ 'Find' : function ('gnat#Find').. " -F "'.Project_File . At this stage you can already use the OO-way: if argc() == 1 && fnamemodify(argv (0).Project_File . self. \ 'Pretty_Command' \ 'Find_Program' \ 'Tags_Command' : '"gnat pretty -P " . \ '%f:%l:%c: (%ttyle) %m'} *. \ 'Tags' : function ('gnat#Tags')..gpr') endif 79 . : '"gnat find -P " . self. " "'.' . '. If needed additional modifications to the object are also possible. self. ':e') == 'gpr' call Retval. We optionally can now add data entries to our object: \ 'Make_Command' : '"gnat make -P " .. return endfunction gnat#Tags function gnat#Set_Project_File (... \ 'Project_File' :.

.Vim The last operation of the constructor is the return of the newly created object. These functions are the equivalent to the "static" or "class" methods of other OO languages. return endfunction gnat#Insert_Tags_Header finish endif 80 .. return Retval endfunction gnat#New It is also possible to defined additional non dict functions. function gnat#Insert_Tags_Header() .

wikipedia. The idea behind vile is to have an editor which works similar to vi but provides features for editing multiple files in multiple window-areas like emacs.1.wikibooks. but not all vi commands. The window management and buffer management came from MicroEMACS.tripod.wikibooks.1 Overview vile is a vi clone which doesn't claim to be a vi clone.vi like Emacs Wikipedia1 has related information at VILE2 8.1. vile development started by using MicroEMACS as the base. compared to vi. It is recommended to consult the documentation to find out the differences and extensions of vile.html 81 .wikipedia.org/wiki/VILE http://invisible-island. 8. So vile was developed.org/wiki/ http://en.2 Resources • vile3 • MicroEMACS4 1 2 3 4 http://en. MicroEMACS is an emacs-like editor (MicroEMACS's author didn't like full-blown emacs.archive.org//en.1 Vile .com/nojavasc. and not a vi clone. and the vile authors didn't like (Micro)EMACS mode-less way of working). The implemented commands are supposed to work more or less like the original vi commands.org//en. vile provides the most common vi commands (as used by their authors).org/20020207175546/uemacs. In fact. Much work has gone into the vile documentation after the first versions were almost undocumented.net/vile/ http://web.8 vile 8. and also not full blown Emacs.

.

BusyBox vi also has some differences (considered by some to be enhancements) over classic vi: • Cursor navigation in insert and command mode • <INSERT> key changes to insert mode • No wrapping of long lines. In short. no last-change undo (lowercase 'u') is supported. c. BusyBox combines tiny versions of many common UNIX utilities into a single relatively small executable.wikipedia. The BusyBox vi clone is limited. but does not capture process output • It also lacks the normal vi crash recovery feature.wikibooks.1.exrc configuration and configuration via environment variables are not supported • Line marks are not correctly adjusted if lines are inserted or deleted before the mark.org/wiki/BusyBox http://busybox.1 Weblinks • BusyBox home page3 1 2 3 http://en.9 BusyBox vi 9.wikipedia. r. One of the included utilities is a vi clone.wikibooks. Long lines are displayed via side-scrolling.org/wiki/ http://en.1 Overview Wikipedia1 has related information at BusyBox2 BusyBox is a very popular program on many embedded Linux systems. • It always assumes a vt102 type terminal (emulator) • Only very few settings are configurable via :set • . However. • Searches ignore case by default. 9.org//en. y and several other commands are not supported. In fact. but can be case sensitive using :set noignorecase • Command-counts need to prefix a command • command counts for a. a lot of information in this vi tutorial is not applicable to BusyBox vi. • It supports the '!' command to execute a child process. i. • Only whole-line undo (uppercase 'U'). • A limited set of ex commands are supported. Among the limits are: • It does not support all common vi commands.org//en.net 83 . someone working on an embedded Linux system is very likely to encounter BusyBox.

net/busybox/plain/editors/vi.c .BusyBox vi • BusyBox vi source code4 4 84 http://git.busybox.

<Shift-x>. which is identical to Control and '['. <TAB> Indicates that the Tabulator key should be pressed <Ctrl-x>. <ESC>. strlen () represents a function. followed by the command and ends with <CR>. /pattern/. <M-x> Indicates that the Meta or Alt key and the 'x' key should be pressed simultaneously. :set nocompatible represents a setting.10 vi Reference The following conventions are used in this reference. <C-x> Indicates that the Control key and the 'x' key should be pressed simultaneously. For many Ex commands there is a long form (:quit) and a short form (:q). started with <:>.wikipedia.org/wiki/regular_expression 85 . <S-x>. :q An Ex command. ?pattern? A Search pattern. <CR> Indicates that the Return (Enter) key should be pressed.org//en. <Ctrl-[> Indicates that the Escape (Esc) key on your keyboard should be pressed. 'x' can be almost any other key on your keyboard. 1 http://en. <c> A single character. <X> Indicates that the Shift key and the 'x' key should be pressed simultaneously <Meta-x>. Search pattern in vi are regular expressions1 . :quit.wikibooks. such as 'a' or '1'.

used to mark text. • vi +/"search string"/ myfile opens myfile at the first line containing search string. For example 'abc' or 'ˆab[123]'. If the string has spaces it should be enclosed in quotes. The difference is that normal attempts to save. c m string pattern myfile A single character. include those to change the file are allowed and act as in vi. such as cursor left. Open the file myfile with the cursor positioned at the given line. If it does not exist. All vi commands. • vi +5 myfile opens myfile at line 5. home. The name of a file to be edited. Instead :x! or :w need to be used. vi -r myfile view myfile 10.2 vi Commands 10. 10. • vi + myfile opens myfile at the last line. :global /pattern/ delete A Search pattern combined with an Ex command. such as 'abc bed'. ZZ or :wq do not work. Opens a recovery copy of the file myfile.1 Invocation vi myfile vi +line myfile Open the file myfile for editing. vi +/string/ myfile Open the file myfile with the cursor positioned at the first line containing the string.2.1 Movement vi can be set up on most systems to use the keyboard movement buttons.vi Reference :ranges/search/replace/options. Several characters. a new file is created. A single lowercase letter. which may contain regular expressions. view is a read only version of vi. Multiple files can be opened at the same time. All commands in vi are case sensitive. etc. page up. vi -r Lists recovery copies of files. 86 . delete. A string used in searching. such as 'a' or '1'. A recovery copy is taken if a vi session is killed or the system crashes.

Can be preceded by a number. <+> Moves to the first non-whitespace character of the line below. 5l moves right 5 places. Moves to the first non-whitespace character on the current line. <CR> <> Same as <+>. Moves to the end of the current line. Moves to the line in the middle of the screen. 87 . Moves to the start of the current line. Same as <f><x><. Can be preceded by a number. Moves to the line at the bottom of the screen. <1><G> moves to the first line of the file. Moves backwards to the start of the current word or to the previous word if between words or at the start of a word. which may be on the next line. Move forward one character. or cursor left.><. Move one line up.> or <. or cursor right. Find first occurrence of character c on the same line. • <3><f><x> moves forward on the third occurrence of x (if present). <5><h> moves left 5 places. Must be preceded by a number. <5><j> moves down 5 lines.> <E> <b> <B> <f>c <F>c <t>c <T>c <0> <ˆ> <$> Same as f but backward. 5k moves up 5 lines. • 10.moves up 10 lines. As e but takes into account punctuation. Moves to the line at the top of the screen. <w> <W> <e> Moves to the start of the next word. Can be preceded by a number. Move left one character. placing the cursor after character c. Same as t but backward. Find the character before the first occurrence of character c on the same line. As w but takes into account punctuation. Can be preceded by a number indicating the line to move to. Moves to the first non-whitespace character of the line above. Can be preceded by a number.vi Commands <G> <h> <j> <k> <l> <H> <M> <L> <-> Move to the last line of the file. • 10| moves to column 10. As b but takes into account punctuation. Moves to the end of the current word or to the next word if between words or at the end of a word.This command may be repeated using <. Moves to the specified column on the current line. Can be preceded by a number. or cursor down.> (reverse direction). or cursor up. Can be preceded by a number. Move one line down. • 10+ moves down 10 lines.

The original line is placed into the buffer. or append to the end of the current line. <i> <I> <a> <A> <o> <O> Enters insert mode at the cursor position. 10. Insert mode is terminated by the ESC key. Buffered text can be retrieved by p or P. Display one more line at the top of the screen. replacing any text already in the buffer.2. Move backwards by half a page. Inserts a new line underneath the current line and then goes into insert mode. the deleted text is placed into the buffer. or appends. dd 88 Deletes the current line. Each time a letter is typed it replaces the one under the cursor and the cursor moves to the next character. the next character by b and then inserts another 4 abs. 5Rab followed by ESC replaces the character under the cursor by a. • 5<Ctrl-F> moves forwards five pages. Enters insert mode at the start of the current line. <Ctrl-B> Move backwards one page. Can be preceded by a number. replacing any text already there.2 Inserting All insert commands put vi into insert mode. d5d is the same as 5dd. Enters insert mode at the end of the current line. Can be preceded by a number. • 5dd deletes five lines. • 5<Ctrl-B> moves backwards five pages. 10. Enters replace mode.3 Replacing r R Replaces the character underneath the cursor with the next character typed. Replace mode is terminated by the ESC key.2.4 Deleting Each time a delete command is used. .2. 5ra replaces 5 characters with the letter a. Enters insert mode after the cursor. Can be preceded by a number. 10. <Ctrl-D> <Ctrl-U> <Ctrl-E> <Ctrl-Y> Move forwards by half a page. Inserts a new line above the current line and then goes into insert mode.vi Reference <Ctrl-F> Move forwards one page. Display one more line at the bottom of the screen.

Deletes from the cursor position to before the first instance of the character. but will not delete the end of line marker or any characters on the next line. Can be preceded by a number. replacing any text already there. Deletes from the cursor to the string. d5w is the same as 5dw. dE dw As de but takes into account punctuation. • xp swaps the character underneath the cursor with the one to the right of it.5 Changing The change commands all select text to be removed. dG d/string D d$ dˆ x Deletes the current line and everything to the end of the file. 10. • 5de deletes five words. • 5db deletes five words to the left of the cursor. Deletes from the character underneath the cursor to the start of the next word. d5e is the same as 5de. any remaining original text is deleted. the first letter 'a'. the first letter 'a'. • 5dw deletes five words. and including. either forwards or backwards. Deletes from the cursor to the end of the line. dfc Deletes from the cursor position to the first instance of the character. • dfa deletes text up and to. dW db As dw but takes into account punctuation. Same as D.2.vi Commands de Deletes from the character underneath the cursor to the end of the word. Can be preceded by a number. Can be preceded by a number. Text deleted during a change is placed into the buffer. but not including. Buffered text can be retrieved by p or P. the end of which is indicated by a $. 89 . Insert mode is entered and new text overwrites or extends the text. When the <ESC> key is pressed to terminate the insert. Can be preceded by a number. Deletes from the left of the cursor to the start of the line. • 5x deletes the character underneath the cursor and the next 4 characters. Deletes from the left of the cursor to the start of the previous word. dB dtc As db but takes into account punctuation. Can be preceded by a number. X Delete the character to the left of the cursor. • dta deletes text up and to. Delete the character underneath the cursor. • 5X deletes 5 characters to the left of the cursor.

they are inserted after the current line. • 5s changes 5 characters. the first letter 'a'. Can be preceded by a number. Yanks from the cursor to the start of the next word into the buffer. Can be preceded by a number. • 5ce changes five words. • 5yw yanks five words. it consists of characters only. c5e is the same as 5ce. Can be preceded by a number. Can be preceded by a number. Can be preceded by a number. Change the entire line. • 5yy yanks five lines. cM cc Generally the same as dMi. • cta changes text up and to. they are inserted after the cursor. Text is also copied into the buffer by delete and change commands. Y yw Same as yy. the current line and the next 4 lines. but not including. it consists of characters only.6 Cut and Paste The yank commands copy text into the vi buffer. p If If If If P 90 the buffer consists of whole lines. Same as ddO (uppercase letter "O"). 10. • 5cc changes 5 lines. the buffer consists of whole lines. the current line and the next 4 lines. Can be preceded by a number. ce Change the current word. Changes from the start of the current line to the end of the file. they are inserted before the cursor.vi Reference C Change from the cursor position to the end of the line. yy Yanks the current line into the buffer. they are inserted before the current line. • 5C changes 5 lines. where M is any movement command. Changes from the cursor position to the first instance of the character. . Change the character underneath the cursor. ctc cfc cG s S Changes from the cursor position to the first instance of the character (including the character c). Change the current line. the one under the cursor and the next 4.2. The put or place commands retrieve text from the buffer. cw Exactly the same as ce. This command is inconsistent with the usual vi moving: cw and ce is the same as dei but dwi removes also the spaces until the next word.

wikipedia.org/wiki/regular_expression 91 .7 Searching Searching uses regular expressions2 . Goes to the line above the one containing the search string.> 2 Repeat last search. Repeat last search but in the opposite direction. /pattern/+ Goes to the line after the one containing the search string. it will continue from the start of the file to the cursor position.org//en. • /abc/ seaches for the first occurrence of abc. • /abc/+3 goes to the third line after the one containing abc. which could be a regular expression. Search forward on the current line for the next occurrence of char. If not found.* By using b instead of e you can specify a character offset from the beginning of the matched string. /\cpattern/ ?pattern? ?pattern?- <n> <N> <f>char <F>char <t>char <T>char <. Search backward on the current line for the next occurrence of char. The trailing slash character is optional. Search backward on the current line for the next occurrence of char and leave the cursor on the character after char. The trailing question mark character is optional. Search forward on the current line for the next occurrence of char and leave the cursor on the character before char.vi Commands 10. /pattern/e Leaves the cursor on the last character of the string that pattern matched. http://en. • ?abc?-3 goes to the third line above the one containing abc. As /pattern/ but searches upwards.2.wikibooks. Repeat the last f or F search. /pattern/ Searches for the string.* By adding +num or -num after e you can supply an offset in characters to where the cursor gets left. Does a case insensitive search. For example: /foo/e+3 will leave the cursor 3 characters past the next occurrence of foo. Searching is from the cursor position downwards. stopping at the first match.

wikibooks.$s/foo/bar/g will replace all occurrences of foo with bar on the current line through the end of the file.s/pattern/replacement/g :%s/pattern/replacement/g :x.wikipedia.the Ed8 editor.which is not surprising sed5 .org//en.wikipedia.vi Reference 10. For example: :..wikipedia. can be used to indicate the current line and the character $ can be used to indicate the last line.wikipedia.org//en. For example :. Ex6 and w:Vi7 have common roots . Turn on lowercase mode.* If pattern contains \( and \) they are used to remember what matched between them instead of matching parenthesis characters. Turn on capitalization mode.wikibooks.s/\(\d*\)-\(\d*\)/:/ could match the string 12345-6789 and substitute 6789:12345 for it. The following meta-characters have special meaning in the replacement pattern: & \n \u \l \U \L \E \e 3 4 5 6 7 8 92 Replaced by the text that matched the search pattern. where all of the following characters are capitalized.ys/pattern/replacement/g Replaces the first occurrence of pattern on the current line with replacement.org//en.wikibooks. Replaces all occurrences of pattern on the current line with replacement. • The character . Capitalize the next character (if the character is a letter). http://en.org/wiki/sed http://en.wikipedia.2.org/wiki/Ed_(text_editor) . Turn off capitalization or lowercase mode.18s/foo/bar/g will replace all occurrences of foo with bar on lines 14 through 18.org/wiki/Ex_(text_editor) http://en.org/wiki/Vi http://en. Lowercase the next character (if the character is a letter). Replaces all occurrences of pattern in the whole file with replacement.wikibooks. Replaced by the text matching the search pattern between \( and \).org//en.wikibooks.org/wiki/sed http://en.org//en.8 Search and Replace Search and replace uses regular expressions3 and the Ex command :substitute (short :s) which has syntax similar to the sed4 utility . where n is in the range of 1 through 9 with being replaced by the match from the first set.* For example: :14.wikibooks. Replaces all occurrences of pattern on lines x through y with replacement.s/pattern/replacement/ :.org/wiki/regular_expression http://en. where all of the following characters are lowercased. Turn off capitalization or lowercase mode.org//en.wikipedia. :.

2. Refreshes the screen so that the current line is in the middle of the screen.10 Screen Refresh <Ctrl-L> z<CR> Refresh the screen. in which case the line is at the middle. 10. so that 5˜ changes the case of 5 characters. • 35z. Refreshes the screen so that the current line is at the top.11 Others <˜> Changes the case of the character underneath the cursor and moves to the next character. • 35z refreshes the screen so that line 35 is at the top. refreshes the screen so that line 35 is in the middle. • <'><a> moves to the line marked by a. <'>m Move to the line marked by the letter. The sequence zz also has the same effect. 93 .refreshes the screen so that line 35 is at the bottom. z. Can be preceded by a line number.vi Commands For example . <m>m Mark the current line with the letter. 10. z- /string/z- Finds the line with the first occurrence of string and then refreshes the screen so that it is at the bottom. /string/z.9 Mark Text Marked lines can be used when changing or deleting text. /pattern/z Finds the line with the first occurrence of string and then refreshes the screen so that it is at the top. Can be preceded by a line number. • 35z. in which case the line is at the bottom. Can be preceded by a line number.2.:s/\(foo\) \(bar\) \(baz\)/\u \U\E / could match the string foo bar baz and substitute Foo BAR baz for it. Refreshes the screen so that the current line is at the bottom. • <m><a> marks the current line with the letter a. 10. Finds the line with the first occurrence of string and then refreshes the screen so that it is in the middle. Can be preceded by a number.2.

Used to save and quit in view. but only if no changes have been made. Saves to the file. that is control is returned to the operating system. Quits without saving. any of (). Moves the cursor to the matching bracket. Puts vi into the background.> <%> <Ctrl-G> :f <J> <u> <U> <Ctrl-Z> Repeats the last insert or delete. Can be preceded by a number. 10. regardless of any changes. In UNIX. Saves and quits.vi Reference <. deletes a line and then deletes another 5 lines. Quits.13 Files :e filename :e + filename 94 Quits the current file and starts editing the named file.12 Saving and Quitting <Z><Z> :quit :q :quit! :q! :write :w :write!filename :w!filename :wq :write|quit :exit :xit :x :exit! :xit! :x! Saves and quits. overwriting any existing contents. • {Vi/Ex|:write!}} myfile saves to the file called myfile. Same as <Ctrl-G>. Quits the current file and starts editing the named file with the cursor at the end of the file. It is symbolic of sleep. the vi session can be returned to the foreground with fg. 10. Joins the next line to the end of the current line. Undoes all changes to the current line. the current line and the next two lines. Saves and quits. Temporarily displays a status line at the bottom of the screen.2.2. Undoes the last change. . dd followed by 5. • 3J joins three lines together. Can be preceded by a number. • :e +5 myfile quits the current file and begins editing myfile at line 5. indicating the end of work. Saves the current file without quitting. [] or {}. Both 1J and 2J do the same as J.

ex Commands :e! :e# :n :n files :r filename The current file is closed. and so require an initial colon. ! Set on :set ignorecase :set ic :set list ! Set off :set noignorecase :set noic :set nolist :set number :set nu :set term :set nonumber :set nonu :set autoindent :set ai :set noautoindent :set noai :set hlsearch :set nohlsearch ! Meaning Ignore case. Shows control characters. <Ctrl-I> is tab.4 ex Commands ex commands start with :. Quits the current file and starts editing the previous file. all unsaved changes discarded. which puts vi into last line mode. • :r myfile inserts the file named myfile after the cursor. 10. Turns on line numbering. and the file is re-opened for editing. entered on the last line of the screen. set ic :set all Displays all the current settings. $ is linefeed. The current file will be closed and the first file in the list will be opened for editing. Resets the list of files for :n. Spaces within the command are ignored. Read a file. When multiple files were quoted on the command line. Displays the terminal type. e. Highlights searches matched by /term/. • :5r myfile inserts the file after line 5. 10. Automatically indents lines while in insert mode upon <CR>. Makes searching case insensitive.exrc. start editing the next file. Default options may be placed into a file in the user's home directory called . 95 .3 vi Options All options are ex options. It's a visual aide.g. that is insert a file. Options in this file do not have the initial colon.

• :d deletes the current line. meaning work on the current line..+1 means the line after the current line.4. so . • :1. • :map v i--<Ctrl-[> new command v will insert -. Either number can be replaced with . exit returns to the vi session. Exit last line mode and return to normal command mode. • :m 10 moves the current line and places it after line 10.. 3.vi Reference :! command Executes the named operating system command and then returns to vi.$ means from the current line to the end of the file and 1.and return to command mode. 10.5' meaning work on lines 3 to 5 inclusive.3 m 4 moves lines 1 to 3 and places after line 4. . followed by the line position to copy to. co Copy. No line number. So . • :! ls runs the UNIX ls command. • :. • :%d deletes all lines.1 ex line commands These commands edit lines and have the following syntax: 1.$ means the same as %. 10. Additionally simple arithmetic may be used. <Ctrl-[> is the escape character typed as <CTRLV><ESC>. • :1. m Move. meaning work on all lines.2 Mapping / Remapping vi Commands :map 96 Create new command or overwrite existing in vi command mode. 2.3 co 4 copies lines 1 to 3 and places after line 4.+5d delete the current line and the next 5 lines. • :co 5 copies the current line and places it after line 5. or $-5 means 5 lines before the last line.. such as '3. standing for the current line or $ standing for the last line. d Delete. A pair of line numbers. :sh :vi Starts up a shell. followed by the line position to move to. With %.4..

r in insert mode will return to command mode.org/tutorials/introduction_to_the_vi_editor.sourceforge.html http://planzero. 10.html 97 .r <Ctrl-[> typing .External link :map! Create new command in both command and insert mode.5 External link • vim Official Reference Manual9 • An introduction to the vi editor10 • Learning Unix in 10min11 9 10 11 http://vimdoc. • :map! .php http://freeengineer.net/htmldoc/ref_toc.org/learnUNIXin10minutes.

.

org/wiki/User:Krischik http://en.org/wiki/Learning_the_vi_Editor/Vim http://en.wikibooks.org/wiki/Special:Contributions/Dysprosia http://en.wikibooks.wikibooks.1 List of major contributors • Dysprosia1 ( Contributions2 ) • Martin Krischik3 Learning the vi Editor/Vim4 ( Contributions5 ) • N.wikibooks.wikibooks.whatever it is currently called . Whoever we are. • Others (add your name and description if you made a major contribution) • Various anonymous persons Category7 : • Learning the vi Editor8 1 2 3 4 5 6 7 8 http://en.org/wiki/User:Dysprosia http://en. including the public: it is open for anyone and everybody to improve.org/wiki/Category:Learning_the_vi_Editor 99 .(anonymous): The advanced/Power User/Extra Details part ( Learning the vi Editor/Details6 ) .org/wiki/Special:Contributions/Krischik http://en.wikibooks. Therefore.11 Authors This book has many authors.org/wiki/Learning_the_vi_Editor/Details http://en.wikibooks.wikibooks.N. 11. this is more properly a list of acknowledgements of contributors than a list of authors. this is where we get to brag about our accomplishments in writing this book.org/wiki/Special:Categories http://en.

.

12 Contributors
Edits
69
1
8
1
1
6
7
1
2
4
14
1
78
2
1
1
359
1
1
1
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

User
Adrignola1
AlbertCahalan2
Andreas Ipp3
CarsracBot4
Chinasaur5
Darklama6
Dreftymac7
Eibwen8
Hagindaz9
Hannes Röst10
Jguk11
Jomegat12
Jonathan Webley13
Jusjih14
Kazkaskazkasako15
Kernigh16
Krischik17
LFaraone18
Lee J Haywood19
Liblamb20
Mahanga21

http://en.wikibooks.org/wiki/User:Adrignola
http://en.wikibooks.org/wiki/User:AlbertCahalan
http://en.wikibooks.org/wiki/User:Andreas_Ipp
http://en.wikibooks.org/wiki/User:CarsracBot
http://en.wikibooks.org/wiki/User:Chinasaur
http://en.wikibooks.org/wiki/User:Darklama
http://en.wikibooks.org/wiki/User:Dreftymac
http://en.wikibooks.org/wiki/User:Eibwen
http://en.wikibooks.org/wiki/User:Hagindaz
http://en.wikibooks.org/wiki/User:Hannes_R%25C3%25B6st
http://en.wikibooks.org/wiki/User:Jguk
http://en.wikibooks.org/wiki/User:Jomegat
http://en.wikibooks.org/wiki/User:Jonathan_Webley
http://en.wikibooks.org/wiki/User:Jusjih
http://en.wikibooks.org/wiki/User:Kazkaskazkasako
http://en.wikibooks.org/wiki/User:Kernigh
http://en.wikibooks.org/wiki/User:Krischik
http://en.wikibooks.org/wiki/User:LFaraone
http://en.wikibooks.org/wiki/User:Lee_J_Haywood
http://en.wikibooks.org/wiki/User:Liblamb
http://en.wikibooks.org/wiki/User:Mahanga

101

Contributors
1
3
1
5
2
2
1
2
1
2
1
1
2
3
5
1
1

22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

102

Mercy22
Mga23
Mkn24
Nikai25
Njk26
Panic2k427
Polluks28
R3m0t29
Ramac30
Remi31
Robert Horning32
Thenub31433
Tompurl34
Van der Hoorn35
Waxmop36
Whiteknight37
Xania38

http://en.wikibooks.org/wiki/User:Mercy
http://en.wikibooks.org/wiki/User:Mga
http://en.wikibooks.org/wiki/User:Mkn
http://en.wikibooks.org/wiki/User:Nikai
http://en.wikibooks.org/wiki/User:Njk
http://en.wikibooks.org/wiki/User:Panic2k4
http://en.wikibooks.org/wiki/User:Polluks
http://en.wikibooks.org/wiki/User:R3m0t
http://en.wikibooks.org/wiki/User:Ramac
http://en.wikibooks.org/wiki/User:Remi
http://en.wikibooks.org/wiki/User:Robert_Horning
http://en.wikibooks.org/wiki/User:Thenub314
http://en.wikibooks.org/wiki/User:Tompurl
http://en.wikibooks.org/wiki/User:Van_der_Hoorn
http://en.wikibooks.org/wiki/User:Waxmop
http://en.wikibooks.org/wiki/User:Whiteknight
http://en.wikibooks.org/wiki/User:Xania

List of Figures
• GFDL: Gnu Free Documentation License.
html

http://www.gnu.org/licenses/fdl.

• cc-by-sa-3.0: Creative Commons Attribution ShareAlike 3.0 License.
creativecommons.org/licenses/by-sa/3.0/

http://

• cc-by-sa-2.5: Creative Commons Attribution ShareAlike 2.5 License.
creativecommons.org/licenses/by-sa/2.5/

http://

• cc-by-sa-2.0: Creative Commons Attribution ShareAlike 2.0 License.
creativecommons.org/licenses/by-sa/2.0/

http://

• cc-by-sa-1.0: Creative Commons Attribution ShareAlike 1.0 License.
creativecommons.org/licenses/by-sa/1.0/

http://

• cc-by-2.0: Creative Commons Attribution 2.0 License. http://creativecommons.
org/licenses/by/2.0/
• cc-by-2.0: Creative Commons Attribution 2.0 License. http://creativecommons.
org/licenses/by/2.0/deed.en
• cc-by-2.5: Creative Commons Attribution 2.5 License. http://creativecommons.
org/licenses/by/2.5/deed.en
• cc-by-3.0: Creative Commons Attribution 3.0 License. http://creativecommons.
org/licenses/by/3.0/deed.en
• GPL: GNU General Public License. http://www.gnu.org/licenses/gpl-2.0.txt
• LGPL: GNU Lesser General Public License. http://www.gnu.org/licenses/lgpl.
html
• PD: This image is in the public domain.
• ATTR: The copyright holder of this file allows anyone to use it for any purpose,
provided that the copyright holder is properly attributed. Redistribution, derivative
work, commercial use, and all other use is permitted.
• EURO: This is the common (reverse) face of a euro coin. The copyright on the design
of the common face of the euro coins belongs to the European Commission. Authorised
is reproduction in a format without relief (drawings, paintings, films) provided they
are not detrimental to the image of the euro.
• LFK: Lizenz Freie Kunst. http://artlibre.org/licence/lal/de
• CFR: Copyright free use.

103

39 104 Chapter 13 on page 107 . php Copies of the GPL.List of Figures • EPL: Eclipse Public License.org/org/documents/epl-v10. http://www. the LGPL as well as a GFDL are included in chapter Licenses39 . Please note that images in the public domain do not require attribution. You may click on the image numbers in the following table to open the webpage of the images in your webbrower.eclipse.

Byondlimits48 . AzaToth44 .org/wiki/User:Procus_the_Mad http:////en.org/The_People http:////en.wikipedia.wikipedia.org/wiki/User:Heptite http:////en.wikipedia42 Later version(s) were uploaded by Wapcaplet43 .wikipedia.freedesktop.wikipedia.wikipedia50 .org/wiki/User:Jvihavainen http://en. Mineralè46 .List of Figures 1 2 3 4 5 6 7 8 9 40 41 42 43 44 45 46 47 48 49 50 The people from the Tango! project40 Original uploader was Ehamberg41 at en.wikipedia.wikipedia.org/wiki/User:Mineral%C3%83%C2%A8 http:////en.wikipedia. Procus the Mad47 .org/wiki/User:Ehamberg http://en.wikipedia.org 105 .org/wiki/User:AzaToth http:////en.wikipedia. Krischik GPL HDBot http://tango.wikipedia.org/wiki/User:Byondlimits http:////en.org http:////en.org/wiki/User:Wapcaplet http:////en. Heptite45 . Jvihavainen49 at en.

.

Corresponding Source conveyed. The “Corresponding Source” for a work in object code form means all the source code needed to generate. In the following three paragraphs. distribution (with or without modification). in this context. This alternative is allowed only occasionally and noncommercially. Some devices are designed to deny users access to install or run modified versions of the software inside them. Protecting Users' Legal Rights From AntiCircumvention Law. or subdividing an organization. is not conveying. 6. or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. provided that you also meet all of these conditions: * a) The work must carry prominent notices stating that you modified it. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations. A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. Conveying Non-Source Forms. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. trademarks. using. that part may be used separately under those permissions. and grant a patent license to some of the parties receiving the covered work authorizing them to use. provided that you also convey the machine-readable Corresponding Source under the terms of this License. then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. Therefore. to any of the parties who would receive the covered work from you. propagate. you must place. and must require no special password or key for unpacking. accompanied by a written offer. each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License. and (for an executable work) run the object code and to modify the work. or (2) arrange to deprive yourself of the benefit of the patent license for this particular work. so that their problems will not be attributed erroneously to authors of previous versions. or embodied in.1 GNU GENERAL PUBLIC LICENSE Version 3. the recipient automatically receives a license from the original licensors. family. as provided by copyright law. If the Program as you received it. royalty. would infringe one or more identifiable patents in that country that you have reason to believe are valid. subject to this License. 1. we stand ready to extend this provision to those domains in future versions of the GPL. regardless of how they are packaged. you may add to a covered work material governed by the terms of that license document. The precise terms and conditions for copying. or the modifications to produce it from the Program. you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. A “User Product” is either (1) a “consumer product”. or if you modify it: responsibilities to respect the freedom of others. but the entire Program remains governed by this License without regard to the additional permissions. If the interface presents a list of user commands or options. but in those that do. and so on) of the specific operating system (if any) on which the executable work runs. This License acknowledges your rights of fair use or other equivalent. through a publicly available network server or other readily accessible means. or. and (b) permanently. or * d) Limiting the use for publicity purposes of names of licensors or authors of the material. or requiring that modified versions of such material be marked in reasonable ways as different from the original version. although the manufacturer can do so. A patent license is “discriminatory” if it does not include within the scope of its coverage. “Licensees” and “recipients” may be individuals or organizations. in one of these ways: * a) Convey the object code in. for a price no more than your reasonable cost of physically performing this conveying of source. To “propagate” a work means to do anything with it that. or * f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient. and you cure the violation prior to 30 days after your receipt of the notice. For example. or that patent license was granted. you may remove that term. A “Major Component”. need not be included in conveying the object code work. and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require. Patents. Moreover. and giving a relevant date. and (2) offer you this License giving you legal permission to copy. You are not responsible for enforcing compliance by third parties with this License. you indicate your acceptance of this License to do so. Acceptance Not Required for Having Copies. To prevent this. contains a notice stating that it is governed by this License along with a term that is a further restriction. royalty-free patent license under the contributor's essential patent claims. For purposes of this definition. 7. or selling its contributor version. section 10 makes it unnecessary. When we speak of free software. valid for at least three years and valid for as long as you offer spare parts or customer support for that product model. 10. in the relevant source files. An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice. which are not by their nature extensions of the covered work. These actions infringe copyright if you do not accept this License. or propagate by procuring conveyance of. such as semiconductor masks. 9. and Installation Information provided. which means any tangible personal property which is normally used for personal. whether gratis or for a fee. modify and propagate that work. You may convey a work based on the Program. If such problems arise substantially in other domains. Each time you convey a covered work. A compilation of a covered work with other separate and independent works. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. If. modify or convey a specific copy of the covered work.13 Licenses 13. authorization keys. if the predecessor has it or can get it with reasonable efforts. Automatic Licensing of Downstream Recipients. prohibits the exercise of. You may convey verbatim copies of the Program's source code as you receive it. or other charge for exercise of rights granted under this License. then you must either (1) cause the Corresponding Source to be so available. or similar laws prohibiting or restricting circumvention of such measures. provided you maintain clear directions next to the object code saying where to find the Corresponding Source. in a manner consistent with the requirements of this License. use. you may not impose a license fee. it does not include the work's System Libraries. provided that the further restriction does not survive such relicensing or conveying. prior to 28 March 2007. for any liability that these contractual assumptions directly impose on those licensors and authors. other than the work as a whole. 11. Inc. one that is widely used among developers working in that language. the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. For the developers' and authors' protection. The Corresponding Source for a work in source code form is that same work. your or third parties' legal rights to forbid circumvention of technological measures. and that you know you can do these things. and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making. in or on a volume of a storage or distribution medium. plus a right to possession of the Corresponding Source of the work from the predecessor in interest. or expects or is expected to use. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish). a User Product. or stated as exceptions. the product. You may make. and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). or updates for a work that has been modified or installed by the recipient. you have certain responsibilities if you distribute copies of the software. for material you add to a covered work. Preamble The GNU General Public License is a free. If you convey a covered work. Additional terms. “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. it applies also to any other work released this way by its authors. as a whole. or * c) Prohibiting misrepresentation of the origin of that material. using. permissive or non-permissive. run and propagate covered works that you do not convey. install. procedures. By contrast. or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. copyleft license for software and other kinds of works. 12. unless you entered into that arrangement. A “covered work” means either the unmodified Program or a work based on the Program. * b) Convey the object code in. constitutes a covered work. and the Corresponding Source of the work is not available for anyone to copy. and under which the third party grants. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software. a statement of the additional terms that apply to those files. making available to the public. For example. Additional Terms. a physical product (including a physical distribution medium). along with any applicable section 7 additional terms. not price. if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program. a prominent item in the list meets this criterion. Therefore. offer for sale. Corresponding Source includes interface definition files associated with source files for the work. the work has been installed in ROM). If the place to copy the object code is a network server. we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. or any part of it. or from any part of it. to the whole of the work. industrial or non-consumer uses. Notwithstanding any other provision of this License. To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. 5. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. that you receive source code or can get it if you want it. provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. we are referring to freedom. or embodied in. Finally. “Object code” means any non-source form of a work. import and otherwise run. or substantially all assets of one. You are not required to accept this License in order to receive or run a copy of the Program. Each contributor grants you a non-exclusive. except executing it on a computer or modifying a private copy. to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License. This License explicitly affirms your unlimited permission to run the unmodified Program. Therefore. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. However. you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work. unless and until the copyright holder explicitly and finally terminates your license. they do not excuse you from the conditions of this License. receive or can get the source code. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996. Those thus making or running the covered works for you must do so exclusively on your behalf. A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body. You may not propagate or modify a covered work except as expressly provided under this License. The output from running a covered work is covered by this License only if the output. sell. However. Regardless of what server hosts the Corresponding Source. means a major essential component (kernel. Conveying Verbatim Copies. For a particular product received by a particular user. too. and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Conveying under any other circumstances is permitted solely under the conditions stated below. we need to prevent others from denying you these rights or asking you to surrender the rights. and how to view a copy of this License. <http://fsf. and only if you received the object code with such an offer. and all its parts. your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means. For example. The “System Libraries” of an executable work include anything. without conditions so long as your license otherwise remains in force. You need not require recipients to copy the Corresponding Source along with the object code. * b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. If your rights have been terminated and not permanently reinstated. 8. to run. and (b) serves only to enable use of the work with that Major Component. then as a consequence you may not convey it at all. too. Each licensee is addressed as “you”. or to implement a Standard Interface for which an implementation is available to the public in source code form. under your direction and control. or (3) arrange. We. this is the first time you have received notice of violation of this License (for any work) from that copyright holder. and in some countries other activities as well. You may convey a covered work in object code form under the terms of sections 4 and 5. such as a menu. * d) Convey the object code by offering access from a designated place (gratis or for a charge). under which you make payment to the third party based on the extent of your activity of conveying the work. the GPL clearly explains that there is no warranty for this free software. 3. if you cease all violation of this License. your conveying the covered work in a country. and give all recipients a copy of this License along with the Program. The “source code” for a work means the preferred form of the work for making modifications to it. or specifically for use in. permitted by this License. reading or copying. you convey. you must pass on to the recipients the same freedoms that you received. is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. the only way you could satisfy . A product is a consumer product regardless of whether the product has substantial commercial. States should not allow patents to restrict development and use of software on general-purpose computers. of making. No Surrender of Others' Freedom. regardless of the status of the particular user or of the way in which the particular user actually uses. An “entity transaction” is a transaction transferring control of an organization. the Free Software Foundation. that (a) is included in the normal form of packaging a Major Component. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. or your recipient's use of the covered work in a country. A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor. in any medium. the Corresponding Source conveyed under this section must be accompanied by the Installation Information. but for the patent license. offering for sale. or a notice indicating where to find the applicable terms. In determining whether a product is a consumer product. on a durable physical medium customarily used for software interchange. 2. whose source code is excluded from the Corresponding Source as a System Library. or (2) access to copy the Corresponding Source from a network server at no charge. If propagation of a covered work results from an entity transaction. * c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. by modifying or propagating a covered work. would make you directly or secondarily liable for infringement under applicable copyright law. your work need not make them do so. 4. (Additional permissions may be written to require their own removal in certain cases when you modify the work. to the extent that they are valid under applicable law. as needed to protect the freedom of users. A separable portion of the object code. pursuant to or in connection with a single transaction or arrangement. The requirement to provide Installation Information does not include a requirement to continue to provide support service. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example. however denominated.) You may place additional permissions on material. in the case of interfaces specified for a particular programming language. free of charge and under the terms of this License. TERMS AND CONDITIONS 0. If additional permissions apply only to part of the Program. * e) Convey the object code using peer-to-peer transmission. or with. and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided). to extend the patent license to downstream recipients. a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies). a “patent license” is any express agreement or commitment. If you convey an object code work under this section in. or provide you with facilities for running those works. When you convey a copy of a covered work. All rights granted under this License are granted for the term of copyright on the Program. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. To protect your rights. or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. or (b) primarily for and in connection with specific products or compilations that contain the covered work. added by you to a covered work. This License gives no permission to license the work in any other way. or merging organizations. or (2) anything designed or sold for incorporation into a dwelling. and are irrevocable provided the stated conditions are met. in accord with subsection 6b. for which you have or can give appropriate copyright permission. with no transfer of a copy. but do not include claims that would be infringed only as a consequence of further modification of the contributor version. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. in the form of source code under the terms of section 4. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. nothing other than this License grants you permission to propagate or modify any covered work. “Knowingly relying” means you have actual knowledge that. if the Program has interactive interfaces that do not display Appropriate Legal Notices. if you distribute copies of such a program. distribution and modification follow. If a license document contains a further restriction but permits relicensing or conveying under this License. This requirement modifies the requirement in section 4 to “keep intact all notices”. use the GNU General Public License for most of our software. such as by intimate data communication or control flow between those subprograms and other parts of the work. You must make sure that they. To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission. you do not qualify to receive new licenses for the same material under section 10. provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice. “normally used” refers to a typical or common use of that class of product. Termination. we have designed this version of the GPL to prohibit the practice for those products. if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. The work thus licensed is called the contributor's “contributor version”. under this License to anyone who comes into possession of a copy. However. that licensees may convey the work under this License. The systematic pattern of such abuse occurs in the area of products for individuals to use. Basic Permissions. the above requirements apply either way. If you add terms to a covered work in accord with this section. If conditions are imposed on you (whether by court order. accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you. provided that you comply with the terms of this License in conveying all material for which you do not control copyright. keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code. knowingly relying on a patent license. but which is not part of that Major Component. that you can change the software or use pieces of it in new free programs. Propagation includes copying. in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form). that would be infringed by some manner. “This License” refers to version 3 of the GNU General Public License.org/> Everyone is permitted to copy and distribute verbatim copies of this license document. every program is threatened constantly by software patents. may be stated in the form of a separately written license. For both users' and authors' sake. All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. which is precisely where it is most unacceptable. you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: * a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License. or * b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it. or a compiler used to produce the work. Definitions. unless such uses represent the only significant mode of use of the product. each must display Appropriate Legal Notices. Source Code. Conveying Modified Source Versions. or household purposes. selling. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software. or an object code interpreter used to run it. and which are not combined with it such as to form a larger program. doubtful cases shall be resolved in favor of coverage. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. window system. however. * d) If the work has interactive user interfaces. “The Program” refers to any copyrightable work licensed under this License. the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities. distribute and/or modify it. You can apply it to your programs. you may at your option remove any additional permissions from that copy. given its content. * c) You must license the entire work. “Installation Information” for a User Product means any methods. the GPL requires that modified versions be marked as changed. keep intact all notices of the absence of any warranty. This License will therefore apply. against the work's users. “Copyright” also means copyright-like laws that apply to other kinds of works. Sublicensing is not allowed. Mere interaction with a user through a computer network. To “convey” a work means any kind of propagation that enables other parties to make or receive copies. the GPL assures that patents cannot be used to render the program non-free. or for the User Product in which it has been modified or installed. modify and propagate the contents of its contributor version. and you disclaim any intention to limit operation or modification of the work as a means of enforcing. 29 June 2007 Copyright © 2007 Free Software Foundation. or service marks. a physical product (including a physical distribution medium). For example. warranty. and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized). but changing it is not allowed. worldwide. then your license from a particular copyright holder is reinstated (a) provisionally. on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. to make. and you may offer support or warranty protection for a fee. a covered work. When you convey a covered work. or * e) Declining to grant rights under trademark law for use of some trade names. whether already acquired or hereafter acquired. without permission. including scripts to control those activities. other than the making of an exact copy. You may charge any price or no price for each copy that you convey. Any attempt otherwise to propagate or modify it is void. And you must show them these terms so they know their rights. agreement or otherwise) that contradict the conditions of this License. but it does not invalidate such permission if you have separately received it. not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. or importing the Program or any portion of it.

in or on a volume of a storage or distribution medium. you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. you would use an “about box”. Delete any section Entitled "Endorsements". Each version of the License is given a distinguishing version number. in the form shown in the Addendum below.3. Permission is granted to copy. 9. Inc. "Endorsements". We have designed this License in order to use it for manuals for free software. Disclaimer of Warranty. or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. If you distribute a large enough number of copies you must also follow the conditions in section 3. or state in or with each Opaque copy a computer-network location from which the general networkusing public has access to download using public-standard network protocols a complete Transparent copy of the Document. PostScript or PDF produced by some word processors for output purposes only. BE LIABLE TO YOU FOR DAMAGES. or distribute the Document except as expressly provided under this License.) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. If the Document does not identify any Invariant Sections then there are none. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. you may accept compensation in exchange for copies. you must enclose the copies in covers that carry. * B.org/> Everyone is permitted to copy and distribute verbatim copies of this license document. commercial. the original version will prevail. The GNU General Public License does not permit incorporating your program into proprietary programs. and the machine-generated HTML. and to convey the resulting work. Preserve the network location. as long as they preserve the title of the Document and satisfy these conditions. the name of the original author or publisher of that section if known. * G. Include an unaltered copy of this License.org/copyleft/. and (b) permanently. If not. * L. but the special requirements of the GNU Affero General Public License.gnu. Secondarily. previously added by you or by arrangement made by the same entity you are acting on behalf of. or if the original publisher of the version it refers to gives permission. ADDENDUM: How to use this License for your documents To use this License in a document you have written. unless they release you from this requirement. or the electronic equivalent of covers if the Document is in electronic form. distribute and/or modify this document under the terms of the GNU Free Documentation License. . You should have received a copy of the GNU General Public License along with this program. 7. make it output a short notice like this when it starts in an interactive mode: If you develop a new program. and any Warranty Disclaimers. 2001. * N. * K. modify. sublicense. all these Cover Texts: Front-Cover Texts on the front cover. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses It is requested. in the notice that says that the Document is released under this License. and from those of previous versions (which should. Such a section may not be included in the Modified Version. The "Document". 5. For more information on this. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used. If you publish printed copies (or copies in media that commonly have printed covers) of the Document. and that you add no other conditions whatsoever to those of this License. and you cure the violation prior to 30 days after your receipt of the notice. in the notice that says that the Document is released under this License. make the title of each such section unique by adding at the end of it. 2009. You may omit a network location for a work that was published at least four years before the Document itself. 3 November 2008 Copyright © 2000. <one line to give the program's name and a brief idea of what it does. unlimited in duration. and follow this License in all other respects regarding verbatim copying of that document. you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. A Front-Cover Text may be at most 5 words. Any member of the public is a licensee. ethical or political position regarding them. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. and publisher of the Modified Version as given on the Title Page. refers to any such manual or work. A "Modified Version" of the Document means any work containing the Document or a portion of it. INCLUDING. but may differ in detail to address new problems or concerns. If you publish or distribute Opaque copies of the Document numbering more than 100. List on the Title Page. * O. Also add information on how to contact you by electronic and paper mail. section 13. State on the Title page the name of the publisher of the Modified Version. TERMINATION If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document. PREAMBLE The purpose of this License is to make a manual. Title (section 1) will typically require changing the actual title. a Secondary Section may not explain any mathematics. your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means. either commercially or noncommercially. and subsequently incorporated in whole or in part into the MMC. Such new versions will be similar in spirit to the present version. If you use the latter option. year. one or more persons or entities responsible for authorship of the modifications in the Modified Version. VERBATIM COPYING You may copy and distribute the Document in any medium.) The relationship could be a matter of historical connection with the subject or with related matters. and if all works that were first published under this License somewhere other than this MMC. 14. TO THE EXTENT PERMITTED BY APPLICABLE LAW. The "Title Page" means." line with this: with the Invariant Sections being LIST THEIR TITLES. You may use the same title as a previous version if the original publisher of that version gives permission. You may extract a single document from such a collection. Examples of transparent image formats include PNG. You should also get your employer (if you work as a programmer) or school. and list them all as Invariant Sections of your combined work in its license notice. Any attempt otherwise to copy. but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. To do so. the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. SGML or XML using a publicly available DTD. "Incorporate" means to publish or republish a Document. the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate. 2. Such new versions will be similar in spirit to the present version. * I. a license notice giving the public permission to use the Modified Version under the terms of this License. this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. clearly and legibly. * F. If there are multiple Invariant Sections with the same name but different contents. but you may replace the old one. but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. and you want it to be of the greatest possible use to the public. and that you preserve all their Warranty Disclaimers. you may not add another. preceding the beginning of the body of the text. unaltered in their text and in their titles. in parentheses.0 license published by Creative Commons Corporation. Version 1. which means that derivative works of the document must themselves be free in the same sense. Preserve its Title. to use that work under the conditions stated herein. under the same conditions stated above. and you may publicly display copies. Notwithstanding any other provision of this License. which is a copyleft license designed for free software. Both covers must also clearly and legibly identify you as the publisher of these copies. provided that you include in the combination all of the Invariant Sections of all of the original documents. 11. A "Transparent" copy of the Document means a machine-readable copy. be listed in the History section of the Document). These titles must be distinct from any other section titles. numbering more than 100. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms. You must delete all sections Entitled "Endorsements". because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. your program's commands might be different. In addition. while not being considered responsible for modifications made by others. if it has fewer than five). APPLICABILITY AND DEFINITIONS following text that translates XYZ in another language. A public wiki that anybody can edit is an example of such a server. or some other combination of the three. and any sections Entitled "Dedications". * C. California. 2008. (Thus. you must take reasonably prudent steps. Moreover. modify. "Dedications". as authors. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works. Use with the GNU Affero General Public License. with or without modifying it. statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. you may consider it more useful to permit linking proprietary applications with the library. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1. * E. You may include a translation of this License. However. with the Modified Version filling the role of the Document.html>. you should put the first ones listed (as many as fit reasonably) on the actual cover. create one stating the title. use the GNU Lesser General Public License instead of this License. and no Back-Cover Texts. If you have Invariant Sections.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. given in the Document for public access to a Transparent copy of the Document. without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Preserve all the copyright notices of the Document. BUT NOT LIMITED TO. that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. concerning interaction through a network will apply to the combination as such. and standardconforming simple HTML. forming one section Entitled "History". if any. to permit their use in free software. and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. and will automatically terminate your rights under this License. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER. 3. If the Document does not specify a version number of this License. if there were any. on explicit permission from the previous publisher that added the old one. You may also lend copies. and a passage of up to 25 words as a Back-Cover Text. "Dedications". no Front-Cover Texts. EITHER EXPRESSED OR IMPLIED. and how to apply and follow the GNU GPL. we recommend releasing these examples in parallel under your choice of free software license. authors. unmodified. include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. However. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above. 17. and multiple identical Invariant Sections may be replaced with a single copy. The Document may contain zero Invariant Sections. but changing it is not allowed. (Here XYZ stands for a specific section name mentioned below. legibly. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. For works in formats which do not have any title page as such. "Title Page" means the text near the most prominent appearance of the work's title. please read <http://www. likewise combine any sections Entitled "Acknowledgements". Replacing Invariant Sections with translations requires special permission from their copyright holders. with no Invariant Sections. and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. The "Invariant Sections" are certain Secondary Sections whose titles are designated. However. EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 6. The "publisher" means any person or entity that distributes copies of the Document to the public. modify or distribute the work in a way requiring permission under copyright law. TRANSLATION Translation is considered a kind of modification. COMBINING DOCUMENTS You may combine the Document with other documents released under this License. Of course. below.org/licenses/>. royalty-free license. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. the copyright notices. Section numbers or the equivalent are not considered part of the section titles. The terms of this License will continue to apply to the part which is the covered work. with the Front-Cover Texts being LIST. These may be placed in the "History" section. and you are welcome to redistribute it under certain conditions. you may choose any version ever published by the Free Software Foundation. the requirement (section 4) to Preserve its You may not copy. 0. and publisher of the Document as given on its Title Page. provided you insert a copy of this License into the extracted document. free of added material. 2007. LaTeX input format. or "History". type `show c' for details. you must combine any sections Entitled "History" in the various original documents. attach the following notices to the program.gnu. if necessary. INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS). revised versions of the GNU Free Documentation License from time to time. SHOULD THE PROGRAM PROVE DEFECTIVE. as Front-Cover Texts or Back-Cover Texts. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND. A copy of the license is included in the section entitled "GNU Free Documentation License". Each version is given a distinguishing version number. to sign a “copyright disclaimer” for the program. Revised Versions of this License. no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. you must do these things in the Modified Version: * A. * D. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License. when you begin distribution of Opaque copies in quantity. but not required. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. under the terms defined in section 4 above for modified versions. and is addressed as "you". 2008 Free Software Foundation. to give them a chance to provide you with an updated version of the Document. see <http://www. and the license notice saying this License applies to the Document are reproduced in all copies. but WITHOUT ANY WARRANTY. then your license from a particular copyright holder is reinstated (a) provisionally. a not-forprofit corporation with a principal place of business in San Francisco. But this License is not limited to software manuals. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3. you may choose any version ever published (not as a draft) by the Free Software Foundation. textbook. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. then if the Document is less than one half of the entire aggregate. that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. and each file should have at least the “copyright” line and a pointer to where the full notice is found. you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. 2002. 4. You may add other material on the covers in addition. that you contact the authors of the Document well before redistributing any large number of copies. to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. if you cease all violation of this License. You may add a section Entitled "Endorsements". and Back-Cover Texts on the back cover. <http://fsf. 13. Preserve all the Invariant Sections of the Document. Texinfo input format. as being those of Invariant Sections. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works.both those terms and this License would be to refrain entirely from conveying the Program. and (2) were thus incorporated prior to November 1. so you may distribute translations of the Document under the terms of section 4. but may differ in detail to address new problems or concerns. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. merge those two alternatives to suit the situation. that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor.org/licenses/>. and likewise the network locations given in the Document for previous versions it was based on. it can be used for any textual work. COPYING IN QUANTITY This License applies to any manual or other work. The front cover must present the full title with all words of the title equally prominent and visible. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program. that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. 15. See http://www. the title page itself. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. sublicense. in any medium. To do this. or "History".2 GNU Free Documentation License Version 1. Preserve any Warranty Disclaimers. An image format is not Transparent if used for any substantial amount of text. 10.org/philosophy/why-not-lgpl. It complements the GNU General Public License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. for a GUI interface. or distribute it is void. Preserve the section Entitled "History". A copy made in an otherwise Transparent file format whose markup. These Warranty Disclaimers are considered to be included by reference in this License. If your document contains nontrivial examples of program code. OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE. 13. Copying with changes limited to the covers. This program is distributed in the hope that it will be useful. For any section Entitled "Acknowledgements" or "Dedications". such as the GNU General Public License. But first. If you have Invariant Sections without Cover Texts.3 or any later version published by the Free Software Foundation. unless and until the copyright holder explicitly and finally terminates your license. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new. An MMC is "eligible for relicensing" if it is licensed under this License. If the Cover Text requirement of section 3 is applicable to these copies of the Document. If there is no section Entitled "History" in the Document.gnu. in whole or in part. You accept the license if you copy. if any) a title distinct from that of the Document. and add to it an item stating at least the title. if the Document is in part a textbook of mathematics. or absence of markup. has been arranged to thwart or discourage subsequent modification by readers is not Transparent. to the end of the list of Cover Texts in the Modified Version. and distribute it individually under this License. and continue the rest onto adjacent pages. you may at your option designate some or all of these sections as invariant. YOU ASSUME THE COST OF ALL NECESSARY SERVICING. SGML or XML for which the DTD and/or processing tools are not generally available. and replace the individual copies of this License in the various documents with a single copy that is included in the collection. Interpretation of Sections 15 and 16. Preserve the Title of the section. Otherwise they must appear on printed covers that bracket the whole aggregate. * M. if any. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors. or else a unique number. either copied verbatim. PostScript or PDF designed for human modification. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. A copy that is not "Transparent" is called "Opaque". for a printed book. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty. INCLUDING ANY GENERAL. If the Document specifies that a particular numbered version of this License "or any later version" applies to it. this License preserves for the author and publisher a way to get credit for their work. plus such following pages as are needed to hold. provided it contains nothing but endorsements of your Modified Version by various parties—for example. receipt of a copy of some or all of the same material does not give you any rights to use it. provided the MMC is eligible for relicensing. provided that you also include the original English version of this License and the original versions of those notices and disclaimers. year. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If the program does terminal interaction. You may add a passage of up to five words as a Front-Cover Text. Limitation of Liability. philosophical. the material this License requires to appear in the title page. Such a notice grants a world-wide. if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer. If this is what you want to do. and all the license notices in the Document. SPECIAL. 16. either version 3 of the License. Use in the Title Page (and on the covers. (1) had no cover texts or invariant sections. replace the "with … Texts. represented in a format whose specification is available to the general public. REPAIR OR CORRECTION. If your program is a subroutine library. In the combination. this is the first time you have received notice of violation of this License (for any work) from that copyright holder. unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. either commercially or noncommercially. or (at your option) any later version. Later license versions may give you additional or different permissions. for details type `show w'. We recommend this License principally for works whose purpose is instruction or reference. The "Cover Texts" are certain short passages of text that are listed. see <http://www. If the Document specifies that a proxy can decide which future versions of this License can be used. If the Program does not specify a version number of the GNU General Public License. can be treated as verbatim copying in other respects. 8. such as "Acknowledgements". If the required texts for either cover are too voluminous to fit legibly. <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY. When the Document is included in an aggregate. and a Back-Cover Text may be at most 25 words. If your rights have been terminated and not permanently reinstated. The combined work need only contain one copy of this License. Front-Cover Texts and Back-Cover Texts. and the Document's license notice requires Cover Texts. Examples of suitable formats for Transparent copies include plain ASCII without markup.gnu. * H. you must either include a machine-readable Transparent copy along with each Opaque copy. provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. then add an item describing the Modified Version as stated in the previous sentence. This is free software. This License is a kind of "copyleft". THERE IS NO WARRANTY FOR THE PROGRAM. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. 1. If the Document already includes a cover text for the same cover. regardless of subject matter or whether it is published as a printed book. together with at least five of the principal authors of the Document (all of its principal authors. XCF and JPG. as part of another Document. or with modifications and/or translated into another language. If a section in the Document is Entitled "Acknowledgements". add their titles to the list of Invariant Sections in the Modified Version's license notice. new authors. Include. and with the Back-Cover Texts being LIST. or of legal. provided that this License. * J. See the GNU General Public License for more details. as the publisher. immediately after the copyright notices. provided that you release the Modified Version under precisely this License. as well as future copyleft versions of that license published by that same organization.

If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply. if the incorporated material is not limited to numerical parameters. and convey such a combined library under terms of your choice. and the Corresponding Application Code in a form suitable for. and performs whatever part of its purpose remains meaningful. you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work.) * a) Accompany the combined library with a copy of the same work based on the Library. 2. data structure layouts and accessors. 4. as well as a reference directing the user to the copies of the GNU GPL and this license document. * a) under this License. Object Code Incorporating Material from Library Header Files. If you modify a copy of the Library. provided that. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system. include the copyright notice for the Library among these notices. . You may convey such object code under terms of your choice. The object code form of an Application may incorporate material from a header file that is part of the Library. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. other than an Application or a Combined Work as defined below. * d) Do one of the following: o 0) Convey the Minimal Corresponding Source under the terms of this License. conveyed under the terms of this License. uncombined with any other library facilities. or small macros. then you may convey a copy of the modified version: As used herein. or * b) under the GNU GPL. but changing it is not allowed. If the Library as you received it does not specify a version number of the GNU Lesser General Public License. * b) Accompany the object code with a copy of the GNU GPL and this license document. that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. If you use option 4d1. * e) Provide Installation Information. and not on the Linked Version. effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications. if you do both of the following: * a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. 6. 0. “this License” refers to version 3 of the GNU Lesser General Public License. * c) For a Combined Work that displays copyright notices during execution. <http://fsf.3 GNU Lesser General Public License GNU LESSER GENERAL PUBLIC LICENSE Version 3. and under terms that permit. Conveying Modified Versions. and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. taken together. you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. you do both of the following: * a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked). If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License “or any later version” applies to it. but may differ in detail to address new problems or concerns. * b) Give prominent notice with the combined library that part of it is a work based on the Library. Inc.13. An “Application” is any work that makes use of an interface provided by the Library. Revised Versions of the GNU Lesser General Public License. in your modifications. * b) Accompany the Combined Work with a copy of the GNU GPL and this license document. You may convey a Combined Work under terms of your choice that. excluding any source code for portions of the Combined Work that. Such new versions will be similar in spirit to the present version. supplemented by the additional permissions listed below. with none of the additional permissions of this License applicable to that copy. and the “GNU GPL” refers to version 3 of the GNU General Public License. Everyone is permitted to copy and distribute verbatim copies of this license document. 29 June 2007 Copyright © 2007 Free Software Foundation. Combined Works. o 1) Use a suitable shared library mechanism for linking with the Library. 1. 5. Additional Definitions. inline functions and templates (ten or fewer lines in length). A “Combined Work” is a work produced by combining or linking an Application with the Library. Combined Libraries. The “Minimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work. Each version is given a distinguishing version number. “The Library” refers to a covered work governed by this License. provided that you make a good faith effort to ensure that. but which is not otherwise based on the Library. and. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. are based on the Application. and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. The particular version of the Library with which the Combined Work was made is also called the “Linked Version”. 3. but only if you would otherwise be required to provide such information under section 6 of the GNU GPL. if you also do each of the following: You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License. considered in isolation. in the event an Application does not supply the function or data. the facility still operates. (If you use option 4d0. and explaining where to find the accompanying uncombined form of the same work.org/> The “Corresponding Application Code” for a Combined Work means the object code and/or source code for the Application. but excluding the System Libraries of the Combined Work. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. including any data and utility programs needed for reproducing the Combined Work from the Application. Exception to Section 3 of the GNU GPL.

","static_promo_banner_cta_url":"https://www.scribd.com/"},"eligible_for_exclusive_trial_roadblock":false,"eligible_for_seo_roadblock":false,"exclusive_free_trial_roadblock_props_path":"/doc-page/exclusive-free-trial-props/332273910","flashes":[],"footer_props":{"urls":{"about":"/about","press":"/press","blog":"http://literally.scribd.com/","careers":"/careers","contact":"/contact","plans_landing":"/subscribe","referrals":"/referrals?source=footer","giftcards":"/giftcards","faq":"/faq","accessibility":"/accessibility-policy","faq_paths":{"accounts":"https://support.scribd.com/hc/sections/202246346","announcements":"https://support.scribd.com/hc/sections/202246066","copyright":"https://support.scribd.com/hc/sections/202246086","downloading":"https://support.scribd.com/hc/articles/210135046","publishing":"https://support.scribd.com/hc/sections/202246366","reading":"https://support.scribd.com/hc/sections/202246406","selling":"https://support.scribd.com/hc/sections/202246326","store":"https://support.scribd.com/hc/sections/202246306","status":"https://support.scribd.com/hc/en-us/articles/360001202872","terms":"https://support.scribd.com/hc/sections/202246126","writing":"https://support.scribd.com/hc/sections/202246366","adchoices":"https://support.scribd.com/hc/articles/210129366","paid_features":"https://support.scribd.com/hc/sections/202246306","failed_uploads":"https://support.scribd.com/hc/en-us/articles/210134586-Troubleshooting-uploads-and-conversions","copyright_infringement":"https://support.scribd.com/hc/en-us/articles/210128946-DMCA-copyright-infringement-takedown-notification-policy","end_user_license":"https://support.scribd.com/hc/en-us/articles/210129486","terms_of_use":"https://support.scribd.com/hc/en-us/articles/210129326-General-Terms-of-Use"},"publishers":"/publishers","static_terms":"/terms","static_privacy":"/privacy","copyright":"/copyright","ios_app":"https://itunes.apple.com/us/app/scribd-worlds-largest-online/id542557212?mt=8&uo=4&at=11lGEE","android_app":"https://play.google.com/store/apps/details?id=com.scribd.app.reader0&hl=en","books":"/books","sitemap":"/directory"}},"global_nav_props":{"header_props":{"logo_src":"/images/landing/home2_landing/scribd_logo_horiz_small.svg","root_url":"https://www.scribd.com/","search_term":"","small_logo_src":"/images/logos/scribd_s_logo.png","uploads_url":"/upload-document","search_props":{"redirect_to_app":true,"search_url":"/search","query":"","search_page":false}},"user_menu_props":null,"sidebar_props":{"urls":{"bestsellers":"https://www.scribd.com/bestsellers","home":"https://www.scribd.com/","saved":"/saved","subscribe":"/archive/pmp_checkout?doc=332273910&metadata=%7B%22context%22%3A%22pmp%22%2C%22action%22%3A%22start_trial%22%2C%22logged_in%22%3Afalse%2C%22platform%22%3A%22web%22%7D","top_charts":"/bestsellers","upload":"https://www.scribd.com/upload-document"},"categories":{"book":{"icon":"icon-ic_book","icon_filled":"icon-ic_book_fill","url":"https://de.scribd.com/books","name":"Books","type":"book"},"news":{"icon":"icon-ic_articles","icon_filled":"icon-ic_articles_fill","url":"https://de.scribd.com/news","name":"News","type":"news"},"audiobook":{"icon":"icon-ic_audiobook","icon_filled":"icon-ic_audiobook_fill","url":"https://de.scribd.com/audiobooks","name":"Audiobooks","type":"audiobook"},"magazine":{"icon":"icon-ic_magazine","icon_filled":"icon-ic_magazine_fill","url":"https://de.scribd.com/magazines","name":"Magazines","type":"magazine"},"document":{"icon":"icon-ic_document","icon_filled":"icon-ic_document_fill","url":"https://de.scribd.com/docs","name":"Documents","type":"document"},"sheet_music":{"icon":"icon-ic_songbook","icon_filled":"icon-ic_songbook_fill","url":"https://de.scribd.com/sheetmusic","name":"Sheet Music","type":"sheet_music"},"summary":{"icon":"icon-ic_globalnav_snapshot","icon_filled":"icon-ic_globalnav_snapshot_fill","url":"https://de.scribd.com/snapshots","name":"Snapshots","type":"summary"}},"nav_categories":["mixed","book","audiobook","magazine","document","sheet_music"],"selected_content_type":"mixed","username":"","search_overlay_props":{"search_input_props":{"focused":false,"keep_suggestions_on_blur":false}}}},"recommenders":{"related_titles_recommender":{"ids":[362792380,253623831,369881117,240425882,95168744,281534509,56369583,387972342,43638497,85494401,173368050,62753139,9137905,250088535,295035958,41213963,38880954,174045067,313142809,87209872,329910287,39274937,205120064,267339905,251124256,305112105,48960664,212834077,85562576,125940922,253264900,212863738,244157917,282766939,263504218,239488191,224419023,163646054,225916486,224355300,238704340,224369806,224258670,224410295,293461549,182553141,239588474,202691564,211302755,224349281,224426877,224326250,234028503,224306619,254039238,182565115,337536061,249309502,273582508,273440534,249308781,182546874,235411767,163580087,224270540,235583696,250006950,224248577,231689346,224252178,224285255,163579056,182560283,246897514,249308236,163564256,224248520,224266633,182522032,216442529,163603389,163647832,263504250],"title_link":null,"title":null,"track_opts":{"compilation_id":"r0SAEkDm0/A53SIww5PV75oNmxw=","module_id":"qO3ikYBNYDYP9hW2FaggcB9mpwY=","widget_name":"right sidebar","track_id":"flattened_recommender"}},"footer_recommenders":{"recommenders":[{"ids":[362792380,253623831,369881117,240425882,95168744,281534509,56369583,387972342,43638497,85494401,173368050,62753139,9137905,250088535,295035958,41213963,38880954,174045067,313142809,87209872,329910287,39274937,205120064,267339905,251124256,305112105,48960664,212834077,85562576,125940922],"title_link":null,"title":"Documents Similar To Learning the Vi Editor","track_opts":{"compilation_id":"r0SAEkDm0/A53SIww5PV75oNmxw=","module_id":"3M7CrHAvE1pwLI/BbQ4zfCUc3Jk=","widget_name":"document_carousel"}}]},"seo_new_docs_recommenders":{"recommenders":[]},"documents":{"9137905":{"type":"document","id":9137905,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/9137905/149x198/7101d1dee0/1297796569?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/9137905/298x396/3007de7a80/1297796569?v=1","title":"Unix Overview","short_title":"Unix Overview","author":"ambisonha9606","tracking":{"object_type":"document","object_id":9137905,"track":"flattened_recommender","doc_uuid":"K7ouQOILXQ1Vr5DMKbjwmBGmdk0="},"url":"https://www.scribd.com/presentation/9137905/Unix-Overview","top_badge":null},"38880954":{"type":"document","id":38880954,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/38880954/149x198/05d5b96971/1416197960?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/38880954/298x396/d505fec302/1416197960?v=1","title":"Tutorial Python 2.7","short_title":"Tutorial Python 2.7","author":"Free_Penguin","tracking":{"object_type":"document","object_id":38880954,"track":"flattened_recommender","doc_uuid":"8Bcs0CX/CmhUFxpCUa7NPjenXQQ="},"url":"https://www.scribd.com/document/38880954/Tutorial-Python-2-7","top_badge":null},"39274937":{"type":"document","id":39274937,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/39274937/149x198/1fa4504a64/1320328326?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/39274937/298x396/a19e3aa2b4/1320328326?v=1","title":"Tutorial","short_title":"Tutorial","author":"jeffreydavidrogers3132","tracking":{"object_type":"document","object_id":39274937,"track":"flattened_recommender","doc_uuid":"oQ6Tx+BxdcfgRC2qKutEZ7EwnXg="},"url":"https://www.scribd.com/document/39274937/Tutorial","top_badge":null},"41213963":{"type":"document","id":41213963,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/41213963/149x198/7072082ed4/1350284028?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/41213963/298x396/f403341f22/1350284028?v=1","title":"Android Emulator","short_title":"Android Emulator","author":"saul_atiles","tracking":{"object_type":"document","object_id":41213963,"track":"flattened_recommender","doc_uuid":"RNPuAkVub3S5F8qyE/Yl9XAzRzg="},"url":"https://www.scribd.com/document/41213963/Android-Emulator","top_badge":null},"43638497":{"type":"document","id":43638497,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/43638497/149x198/0e1e11f9e4/1290443496?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/43638497/298x396/bde7ae9fde/1290443496?v=1","title":"OS/2 Unix Style - Tom Yager - BYTE Magazine - Feb 1990","short_title":"OS/2 Unix Style - Tom Yager - BYTE Magazine - Feb 1990","author":"msnicki","tracking":{"object_type":"document","object_id":43638497,"track":"flattened_recommender","doc_uuid":"yJZGeXxIFEjNGoXCVtWd8DHo7RM="},"url":"https://www.scribd.com/document/43638497/OS-2-Unix-Style-Tom-Yager-BYTE-Magazine-Feb-1990","top_badge":null},"48960664":{"type":"document","id":48960664,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/48960664/149x198/248e3934cb/1309343167?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/48960664/298x396/d1369fc7ff/1309343167?v=1","title":"RRR","short_title":"RRR","author":"RajRajesh2007","tracking":{"object_type":"document","object_id":48960664,"track":"flattened_recommender","doc_uuid":"m/3JOAM0tX/7Uuu2QVFDJfDAfnE="},"url":"https://www.scribd.com/document/48960664/RRR","top_badge":null},"56369583":{"type":"document","id":56369583,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/56369583/149x198/2e2ea4a318/1374093165?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/56369583/298x396/00093b7926/1374093165?v=1","title":"20100816 Announcement Ansa v13.1","short_title":"20100816 Announcement Ansa v13.1","author":"Subhashree Puspak","tracking":{"object_type":"document","object_id":56369583,"track":"flattened_recommender","doc_uuid":"xjN7ARX2kkU3J00GdepCWvyNcxA="},"url":"https://www.scribd.com/document/56369583/20100816-Announcement-Ansa-v13-1","top_badge":null},"62753139":{"type":"document","id":62753139,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/62753139/149x198/ea53d5512d/1402060626?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/62753139/298x396/c1983e15eb/1402060626?v=1","title":"UNIX Bourne Shell Scripting","short_title":"UNIX Bourne Shell Scripting","author":"Amanpreet Singh Sidana","tracking":{"object_type":"document","object_id":62753139,"track":"flattened_recommender","doc_uuid":"rKn9CVPw3gAwuP5bEbeBkLLqm0U="},"url":"https://www.scribd.com/document/62753139/UNIX-Bourne-Shell-Scripting","top_badge":null},"85494401":{"type":"document","id":85494401,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/85494401/149x198/2249d6fc32/1399966671?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/85494401/298x396/8145a4b024/1399966671?v=1","title":"Vi edit","short_title":"Vi edit","author":"Radhika Kalawat","tracking":{"object_type":"document","object_id":85494401,"track":"flattened_recommender","doc_uuid":"OzNZhusnLsns+/DlrN1OBalIEtk="},"url":"https://www.scribd.com/document/85494401/Vi-edit","top_badge":null},"85562576":{"type":"document","id":85562576,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/85562576/149x198/e4901f229f/1331870887?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/85562576/298x396/e94c3c12eb/1331870887?v=1","title":"Knowledge Article","short_title":"Knowledge Article","author":"aneeshashok","tracking":{"object_type":"document","object_id":85562576,"track":"flattened_recommender","doc_uuid":"cQiQegtuYgoVKf9AlD12GG2uhXM="},"url":"https://www.scribd.com/document/85562576/Knowledge-Article","top_badge":null},"87209872":{"type":"document","id":87209872,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/87209872/149x198/89cc9cf326/1333034560?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/87209872/298x396/d59a86f206/1333034560?v=1","title":"Information Technology","short_title":"Information Technology","author":"Anurag Parida","tracking":{"object_type":"document","object_id":87209872,"track":"flattened_recommender","doc_uuid":"205H9wIVS+NHLH2/5zA6PoA8adQ="},"url":"https://www.scribd.com/document/87209872/Information-Technology","top_badge":null},"95168744":{"type":"document","id":95168744,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/95168744/149x198/cc68dc83aa/1338309370?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/95168744/298x396/00bbcd8f6f/1338309370?v=1","title":"DupScout Duplicate Files Finder","short_title":"DupScout Duplicate Files Finder","author":"Flexense","tracking":{"object_type":"document","object_id":95168744,"track":"flattened_recommender","doc_uuid":"39985M6mKTI+n38P6PYzwfW2iss="},"url":"https://www.scribd.com/document/95168744/DupScout-Duplicate-Files-Finder","top_badge":null},"125940922":{"type":"document","id":125940922,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/125940922/149x198/de4b95155a/1361143812?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/125940922/298x396/5681e686b4/1361143812?v=1","title":"Ihook Readme","short_title":"Ihook Readme","author":"joejoejoejoe123","tracking":{"object_type":"document","object_id":125940922,"track":"flattened_recommender","doc_uuid":"XiaVH2rvUG7s1XASJy4luRoCoOE="},"url":"https://www.scribd.com/document/125940922/Ihook-Readme","top_badge":null},"163564256":{"type":"book","id":163564256,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/163564256/149x198/4d140b8606/1540023305?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/163564256/298x396/3f016be665/1540023305?v=1","title":"Beautiful Ruins: A Novel","short_title":"Beautiful Ruins","author":"Jess Walter","tracking":{"object_type":"document","object_id":163564256,"track":"flattened_recommender","doc_uuid":"HfN2f3JOiBfCgm4C42ItD3W6SGw="},"url":"https://www.scribd.com/book/163564256/Beautiful-Ruins-A-Novel","top_badge":null},"163579056":{"type":"book","id":163579056,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/163579056/149x198/e3ae8b9345/1540029072?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/163579056/298x396/c599e1583f/1540029072?v=1","title":"The Art of Racing in the Rain: A Novel","short_title":"The Art of Racing in the Rain","author":"Garth Stein","tracking":{"object_type":"document","object_id":163579056,"track":"flattened_recommender","doc_uuid":"n7QCJeEQI3nAixFP3kV3EqP/ntg="},"url":"https://www.scribd.com/book/163579056/The-Art-of-Racing-in-the-Rain-A-Novel","top_badge":null},"163580087":{"type":"book","id":163580087,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/163580087/149x198/df75726300/1540030082?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/163580087/298x396/012861be61/1540030082?v=1","title":"Bel Canto","short_title":"Bel Canto","author":"Ann Patchett","tracking":{"object_type":"document","object_id":163580087,"track":"flattened_recommender","doc_uuid":"SUfga+lqbXEIy0VSF+cJJ+3gRUs="},"url":"https://www.scribd.com/book/163580087/Bel-Canto","top_badge":null},"163603389":{"type":"book","id":163603389,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/163603389/149x198/7c1ceeb759/1540034790?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/163603389/298x396/2c8c5e4da3/1540034790?v=1","title":"A Prayer for Owen Meany: A Novel","short_title":"A Prayer for Owen Meany","author":"John Irving","tracking":{"object_type":"document","object_id":163603389,"track":"flattened_recommender","doc_uuid":"kQOF6mgq/vkwx/u5MvbmF8Vrpog="},"url":"https://www.scribd.com/book/163603389/A-Prayer-for-Owen-Meany-A-Novel","top_badge":null},"163646054":{"type":"book","id":163646054,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/163646054/149x198/73d89ab0b4/1540022817?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/163646054/298x396/92feb6c9c7/1540022817?v=1","title":"Devil in the Grove: Thurgood Marshall, the Groveland Boys, and the Dawn of a New America","short_title":"Devil in the Grove","author":"Gilbert King","tracking":{"object_type":"document","object_id":163646054,"track":"flattened_recommender","doc_uuid":"KwLd5TmhEc8/Qv4QLzGmw3gsdyk="},"url":"https://www.scribd.com/book/163646054/Devil-in-the-Grove-Thurgood-Marshall-the-Groveland-Boys-and-the-Dawn-of-a-New-America","top_badge":null},"163647832":{"type":"book","id":163647832,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/163647832/149x198/974fcd39b2/1540022140?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/163647832/298x396/58f221bfa6/1540022140?v=1","title":"The Cider House Rules","short_title":"The Cider House Rules","author":"John Irving","tracking":{"object_type":"document","object_id":163647832,"track":"flattened_recommender","doc_uuid":"O4EpMdjOjjZmoYgsopdt8IG/AMw="},"url":"https://www.scribd.com/book/163647832/The-Cider-House-Rules","top_badge":null},"173368050":{"type":"document","id":173368050,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/173368050/149x198/494b0907ba/1429003530?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/173368050/298x396/9dff26e288/1429003530?v=1","title":"Scripts Avenue ArcView","short_title":"Scripts Avenue ArcView","author":"Widianto Eka Pramana","tracking":{"object_type":"document","object_id":173368050,"track":"flattened_recommender","doc_uuid":"YRXbTQaro2+9jEwUePYgB8sOIK4="},"url":"https://www.scribd.com/document/173368050/Scripts-Avenue-ArcView","top_badge":null},"174045067":{"type":"document","id":174045067,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/174045067/149x198/00b17861ec/1381130508?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/174045067/298x396/fb8cdfeb4c/1381130508?v=1","title":"CCNA2-3_lab_7","short_title":"CCNA2-3_lab_7","author":"ipphunk19","tracking":{"object_type":"document","object_id":174045067,"track":"flattened_recommender","doc_uuid":"UiKibQPPgNi9ckt7qYoDgFrWNzo="},"url":"https://www.scribd.com/document/174045067/CCNA2-3-lab-7","top_badge":null},"182522032":{"type":"book","id":182522032,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/182522032/149x198/e1b9e42cb5/1540023014?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/182522032/298x396/ddcc62ae69/1540023014?v=1","title":"The Bonfire of the Vanities: A Novel","short_title":"The Bonfire of the Vanities","author":"Tom Wolfe","tracking":{"object_type":"document","object_id":182522032,"track":"flattened_recommender","doc_uuid":"dmtEQvWZukhLzYSsFy0Agibwr2s="},"url":"https://www.scribd.com/book/182522032/The-Bonfire-of-the-Vanities-A-Novel","top_badge":null},"182546874":{"type":"book","id":182546874,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/182546874/149x198/f82b3526b2/1540029994?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/182546874/298x396/8079e74998/1540029994?v=1","title":"The Love Affairs of Nathaniel P.: A Novel","short_title":"The Love Affairs of Nathaniel P.","author":"Adelle Waldman","tracking":{"object_type":"document","object_id":182546874,"track":"flattened_recommender","doc_uuid":"/E44iFgUr5UEBuOC3Q9exNhDnKA="},"url":"https://www.scribd.com/book/182546874/The-Love-Affairs-of-Nathaniel-P-A-Novel","top_badge":null},"182553141":{"type":"book","id":182553141,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/182553141/149x198/9d8b4953ee/1540029399?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/182553141/298x396/89521cc859/1540029399?v=1","title":"The World Is Flat 3.0: A Brief History of the Twenty-first Century","short_title":"The World Is Flat 3.0","author":"Thomas L. Friedman","tracking":{"object_type":"document","object_id":182553141,"track":"flattened_recommender","doc_uuid":"jOOzgRhxYwJFCSSaj+ptBXO8bk8="},"url":"https://www.scribd.com/book/182553141/The-World-Is-Flat-3-0-A-Brief-History-of-the-Twenty-first-Century","top_badge":null},"182560283":{"type":"book","id":182560283,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/182560283/149x198/0601b1931c/1540026915?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/182560283/298x396/f6a21d4103/1540026915?v=1","title":"Wolf Hall: A Novel","short_title":"Wolf Hall","author":"Hilary Mantel","tracking":{"object_type":"document","object_id":182560283,"track":"flattened_recommender","doc_uuid":"V7dwNpvp5qA31gG9bJCyys5CAOc="},"url":"https://www.scribd.com/book/182560283/Wolf-Hall-A-Novel","top_badge":null},"182565115":{"type":"book","id":182565115,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/182565115/149x198/825ad48fb6/1540028380?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/182565115/298x396/e6af4ca8dd/1540028380?v=1","title":"The Silver Linings Playbook: A Novel","short_title":"The Silver Linings Playbook","author":"Matthew Quick","tracking":{"object_type":"document","object_id":182565115,"track":"flattened_recommender","doc_uuid":"ZEeUnMpWwm/UZP3SnypOWDqL2vQ="},"url":"https://www.scribd.com/book/182565115/The-Silver-Linings-Playbook-A-Novel","top_badge":null},"202691564":{"type":"book","id":202691564,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/202691564/149x198/de3999cc66/1540032330?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/202691564/298x396/0ba4b4666c/1540032330?v=1","title":"Smart People Should Build Things: How to Restore Our Culture of Achievement, Build a Path for Entrepreneurs, and Create New Jobs in America","short_title":"Smart People Should Build Things","author":"Andrew Yang","tracking":{"object_type":"document","object_id":202691564,"track":"flattened_recommender","doc_uuid":"9DKeM3vpF0/GlBGDTckEmSz1Gy0="},"url":"https://www.scribd.com/book/202691564/Smart-People-Should-Build-Things-How-to-Restore-Our-Culture-of-Achievement-Build-a-Path-for-Entrepreneurs-and-Create-New-Jobs-in-America","top_badge":null},"205120064":{"type":"document","id":205120064,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/205120064/149x198/4d1976d371/1391695425?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/205120064/298x396/b9f77802b2/1391695425?v=1","title":"Jboss","short_title":"Jboss","author":"Adnan Alicic","tracking":{"object_type":"document","object_id":205120064,"track":"flattened_recommender","doc_uuid":"wgBRctuag0dQq/8C7WNnA5SjYxU="},"url":"https://www.scribd.com/document/205120064/Jboss","top_badge":null},"211302755":{"type":"book","id":211302755,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/211302755/149x198/e130bab094/1540032834?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/211302755/298x396/19f10ceb3f/1540032834?v=1","title":"The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers","short_title":"The Hard Thing About Hard Things","author":"Ben Horowitz","tracking":{"object_type":"document","object_id":211302755,"track":"flattened_recommender","doc_uuid":"bdq/VOrxIWPrPxXCHA1ET1Iv1Us="},"url":"https://www.scribd.com/book/211302755/The-Hard-Thing-About-Hard-Things-Building-a-Business-When-There-Are-No-Easy-Answers","top_badge":null},"212834077":{"type":"document","id":212834077,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/212834077/149x198/2631b9592d/1410855040?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/212834077/298x396/0850801105/1410855040?v=1","title":"Nastar GSM User Manual","short_title":"Nastar GSM User Manual","author":"Paul Kabeya","tracking":{"object_type":"document","object_id":212834077,"track":"flattened_recommender","doc_uuid":"ux498T7FB9cjWzU9MBHqLyLJuFw="},"url":"https://www.scribd.com/document/212834077/Nastar-GSM-User-Manual","top_badge":null},"212863738":{"type":"book","id":212863738,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/212863738/149x198/486257e90d/1540030711?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/212863738/298x396/40684a0550/1540030711?v=1","title":"The Unwinding: An Inner History of the New America","short_title":"The Unwinding","author":"George Packer","tracking":{"object_type":"document","object_id":212863738,"track":"flattened_recommender","doc_uuid":"Kp8bnAgQAhoaTDgczj9CiEzdhO4="},"url":"https://www.scribd.com/book/212863738/The-Unwinding-An-Inner-History-of-the-New-America","top_badge":null},"216442529":{"type":"book","id":216442529,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/216442529/149x198/e28b506e87/1540023804?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/216442529/298x396/716aaad647/1540023804?v=1","title":"Lovers at the Chameleon Club, Paris 1932: A Novel","short_title":"Lovers at the Chameleon Club, Paris 1932","author":"Francine Prose","tracking":{"object_type":"document","object_id":216442529,"track":"flattened_recommender","doc_uuid":"J+7hjJm4ialdzZi07YKWQZ8l23I="},"url":"https://www.scribd.com/book/216442529/Lovers-at-the-Chameleon-Club-Paris-1932-A-Novel","top_badge":null},"224248520":{"type":"book","id":224248520,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224248520/149x198/0427bca488/1540034025?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224248520/298x396/505053db71/1540034025?v=1","title":"The Kitchen House: A Novel","short_title":"The Kitchen House","author":"Kathleen Grissom","tracking":{"object_type":"document","object_id":224248520,"track":"flattened_recommender","doc_uuid":"BqMgO+PaBtgJI3VdBc8CaBAZ/Zc="},"url":"https://www.scribd.com/book/224248520/The-Kitchen-House-A-Novel","top_badge":null},"224248577":{"type":"book","id":224248577,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224248577/149x198/97fab15653/1540019689?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224248577/298x396/35883a5fcb/1540019689?v=1","title":"The Rosie Project: A Novel","short_title":"The Rosie Project","author":"Graeme Simsion","tracking":{"object_type":"document","object_id":224248577,"track":"flattened_recommender","doc_uuid":"a9yR7QU9B4KPPntEPFGvge64QIw="},"url":"https://www.scribd.com/book/224248577/The-Rosie-Project-A-Novel","top_badge":null},"224252178":{"type":"book","id":224252178,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224252178/149x198/77a859fdd8/1540025854?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224252178/298x396/dfbec9e04b/1540025854?v=1","title":"Brooklyn: A Novel","short_title":"Brooklyn","author":"Colm Tóibín","tracking":{"object_type":"document","object_id":224252178,"track":"flattened_recommender","doc_uuid":"CJdjKlcJorZJSdkhg7W8kX3n6uI="},"url":"https://www.scribd.com/book/224252178/Brooklyn-A-Novel","top_badge":null},"224258670":{"type":"book","id":224258670,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224258670/149x198/b2ee6fe90c/1540036976?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224258670/298x396/eb9e673a3c/1540036976?v=1","title":"The Prize: The Epic Quest for Oil, Money & Power","short_title":"The Prize","author":"Daniel Yergin","tracking":{"object_type":"document","object_id":224258670,"track":"flattened_recommender","doc_uuid":"dUfVMYMyX8hOntO0xpzfSNMNSM8="},"url":"https://www.scribd.com/book/224258670/The-Prize-The-Epic-Quest-for-Oil-Money-Power","top_badge":null},"224266633":{"type":"book","id":224266633,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224266633/149x198/196f9b9902/1540037449?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224266633/298x396/c65dbae83f/1540037449?v=1","title":"The Perks of Being a Wallflower","short_title":"The Perks of Being a Wallflower","author":"Stephen Chbosky","tracking":{"object_type":"document","object_id":224266633,"track":"flattened_recommender","doc_uuid":"9GnC6TOk23Up/EvkjXATnilz+AQ="},"url":"https://www.scribd.com/book/224266633/The-Perks-of-Being-a-Wallflower","top_badge":null},"224270540":{"type":"book","id":224270540,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224270540/149x198/246ef7879c/1540036239?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224270540/298x396/b9d115f691/1540036239?v=1","title":"The Master","short_title":"The Master","author":"Colm Tóibín","tracking":{"object_type":"document","object_id":224270540,"track":"flattened_recommender","doc_uuid":"NiaF8shAGZ/33MoVXJcCZTxXDPI="},"url":"https://www.scribd.com/book/224270540/The-Master","top_badge":null},"224285255":{"type":"book","id":224285255,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224285255/149x198/a61ed79e9b/1540019902?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224285255/298x396/a6488a57c8/1540019902?v=1","title":"The Flamethrowers: A Novel","short_title":"The Flamethrowers","author":"Rachel Kushner","tracking":{"object_type":"document","object_id":224285255,"track":"flattened_recommender","doc_uuid":"PJg9HmQDbz3QCagKkFPQydEsQRw="},"url":"https://www.scribd.com/book/224285255/The-Flamethrowers-A-Novel","top_badge":null},"224306619":{"type":"book","id":224306619,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224306619/149x198/5a300f585d/1540033520?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224306619/298x396/21c3e990fc/1540033520?v=1","title":"The Light Between Oceans: A Novel","short_title":"The Light Between Oceans","author":"M.L. Stedman","tracking":{"object_type":"document","object_id":224306619,"track":"flattened_recommender","doc_uuid":"0esCl1jmA4G9yUDLlDe1DJHf3Ac="},"url":"https://www.scribd.com/book/224306619/The-Light-Between-Oceans-A-Novel","top_badge":null},"224326250":{"type":"book","id":224326250,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224326250/149x198/f1e7bf86b3/1540030275?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224326250/298x396/67d6eee06a/1540030275?v=1","title":"Steve Jobs","short_title":"Steve Jobs","author":"Walter Isaacson","tracking":{"object_type":"document","object_id":224326250,"track":"flattened_recommender","doc_uuid":"kFZZuaHHe5nfhD2nsZUtmHBzBQ8="},"url":"https://www.scribd.com/book/224326250/Steve-Jobs","top_badge":null},"224349281":{"type":"book","id":224349281,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224349281/149x198/c8e6142eca/1540038918?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224349281/298x396/121ea6d44a/1540038918?v=1","title":"How To Win Friends and Influence People","short_title":"How To Win Friends and Influence People","author":"Dale Carnegie","tracking":{"object_type":"document","object_id":224349281,"track":"flattened_recommender","doc_uuid":"RzMCoEQ4B83OeFgQLMhMMom9Yiw="},"url":"https://www.scribd.com/book/224349281/How-To-Win-Friends-and-Influence-People","top_badge":null},"224355300":{"type":"book","id":224355300,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224355300/149x198/e0393734b6/1540026566?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224355300/298x396/fac4cdb725/1540026566?v=1","title":"Grand Pursuit: The Story of Economic Genius","short_title":"Grand Pursuit","author":"Sylvia Nasar","tracking":{"object_type":"document","object_id":224355300,"track":"flattened_recommender","doc_uuid":"BR8nLriOs6Ef/rg5fQqJn2NYFS8="},"url":"https://www.scribd.com/book/224355300/Grand-Pursuit-The-Story-of-Economic-Genius","top_badge":null},"224369806":{"type":"book","id":224369806,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224369806/149x198/d2fc5923b8/1540026821?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224369806/298x396/a026add765/1540026821?v=1","title":"The Emperor of All Maladies: A Biography of Cancer","short_title":"The Emperor of All Maladies","author":"Siddhartha Mukherjee","tracking":{"object_type":"document","object_id":224369806,"track":"flattened_recommender","doc_uuid":"ZlH+wrRsOZ2w5L/H3CXoG7sMlCw="},"url":"https://www.scribd.com/book/224369806/The-Emperor-of-All-Maladies-A-Biography-of-Cancer","top_badge":null},"224410295":{"type":"book","id":224410295,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224410295/149x198/5f74dd59cd/1540026621?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224410295/298x396/58644b8626/1540026621?v=1","title":"Team of Rivals: The Political Genius of Abraham Lincoln","short_title":"Team of Rivals","author":"Doris Kearns Goodwin","tracking":{"object_type":"document","object_id":224410295,"track":"flattened_recommender","doc_uuid":"EbC6XdcJG30gxlV74A3sZt8r0qM="},"url":"https://www.scribd.com/book/224410295/Team-of-Rivals-The-Political-Genius-of-Abraham-Lincoln","top_badge":null},"224419023":{"type":"book","id":224419023,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224419023/149x198/7e946216e0/1540026539?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224419023/298x396/08758c4819/1540026539?v=1","title":"John Adams","short_title":"John Adams","author":"David McCullough","tracking":{"object_type":"document","object_id":224419023,"track":"flattened_recommender","doc_uuid":"fOiDyMAqY8Ts7mSqFaOSU9N5TpQ="},"url":"https://www.scribd.com/book/224419023/John-Adams","top_badge":null},"224426877":{"type":"book","id":224426877,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/224426877/149x198/67b53f7428/1540023833?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/224426877/298x396/61c4862b68/1540023833?v=1","title":"Angela's Ashes: A Memoir","short_title":"Angela's Ashes","author":"Frank McCourt","tracking":{"object_type":"document","object_id":224426877,"track":"flattened_recommender","doc_uuid":"FXoZjMpDicfcgOmjXkBAJALQACc="},"url":"https://www.scribd.com/book/224426877/Angela-s-Ashes-A-Memoir","top_badge":null},"225916486":{"type":"book","id":225916486,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/225916486/149x198/ceefd53ff2/1540029734?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/225916486/298x396/3fda0d41f4/1540029734?v=1","title":"A Heartbreaking Work Of Staggering Genius: A Memoir Based on a True Story","short_title":"A Heartbreaking Work Of Staggering Genius","author":"Dave Eggers","tracking":{"object_type":"document","object_id":225916486,"track":"flattened_recommender","doc_uuid":"A/mhekzyBjdMBAbw3PSM366YIoI="},"url":"https://www.scribd.com/book/225916486/A-Heartbreaking-Work-Of-Staggering-Genius-A-Memoir-Based-on-a-True-Story","top_badge":null},"231689346":{"type":"book","id":231689346,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/231689346/149x198/8820ffce2e/1540019878?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/231689346/298x396/8022aee462/1540019878?v=1","title":"The Blazing World: A Novel","short_title":"The Blazing World","author":"Siri Hustvedt","tracking":{"object_type":"document","object_id":231689346,"track":"flattened_recommender","doc_uuid":"V2NLBCIZNDHzT2ZplIIzxFcY+BI="},"url":"https://www.scribd.com/book/231689346/The-Blazing-World-A-Novel","top_badge":null},"234028503":{"type":"book","id":234028503,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/234028503/149x198/600d1fe3f9/1540032369?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/234028503/298x396/1455400f40/1540032369?v=1","title":"Bad Feminist: Essays","short_title":"Bad Feminist","author":"Roxane Gay","tracking":{"object_type":"document","object_id":234028503,"track":"flattened_recommender","doc_uuid":"6LOJAWx2MrkVLZXd3SZflmV4sNQ="},"url":"https://www.scribd.com/book/234028503/Bad-Feminist-Essays","top_badge":null},"235411767":{"type":"book","id":235411767,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/235411767/149x198/ce356815f8/1540055094?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/235411767/298x396/a289a2fc2a/1540055094?v=1","title":"A Man Called Ove: A Novel","short_title":"A Man Called Ove","author":"Fredrik Backman","tracking":{"object_type":"document","object_id":235411767,"track":"flattened_recommender","doc_uuid":"pTYU0xzJjEeKZlGBVSBX6v9vMJs="},"url":"https://www.scribd.com/book/235411767/A-Man-Called-Ove-A-Novel","top_badge":null},"235583696":{"type":"book","id":235583696,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/235583696/149x198/29700e772d/1540033118?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/235583696/298x396/46800f01c6/1540033118?v=1","title":"We Are Not Ourselves: A Novel","short_title":"We Are Not Ourselves","author":"Matthew Thomas","tracking":{"object_type":"document","object_id":235583696,"track":"flattened_recommender","doc_uuid":"T5dbXJt8+HYMaawLB7G8qEH5Jp8="},"url":"https://www.scribd.com/book/235583696/We-Are-Not-Ourselves-A-Novel","top_badge":null},"238704340":{"type":"book","id":238704340,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/238704340/149x198/58ed32b584/1540029094?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/238704340/298x396/d84f33deab/1540029094?v=1","title":"This Changes Everything: Capitalism vs. The Climate","short_title":"This Changes Everything","author":"Naomi Klein","tracking":{"object_type":"document","object_id":238704340,"track":"flattened_recommender","doc_uuid":"PXVDMekBFnFXcbVTuFvbNop7xKk="},"url":"https://www.scribd.com/book/238704340/This-Changes-Everything-Capitalism-vs-The-Climate","top_badge":null},"239488191":{"type":"book","id":239488191,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/239488191/149x198/7381d3ba45/1540023655?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/239488191/298x396/891d3f4926/1540023655?v=1","title":"The Innovators: How a Group of Hackers, Geniuses, and Geeks Created the Digital Revolution","short_title":"The Innovators","author":"Walter Isaacson","tracking":{"object_type":"document","object_id":239488191,"track":"flattened_recommender","doc_uuid":"46CnKD/HFKyU4Y0spY02C6i50Z8="},"url":"https://www.scribd.com/book/239488191/The-Innovators-How-a-Group-of-Hackers-Geniuses-and-Geeks-Created-the-Digital-Revolution","top_badge":null},"239588474":{"type":"book","id":239588474,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/239588474/149x198/8a4150948e/1540033369?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/239588474/298x396/644cc7285e/1540033369?v=1","title":"Rise of ISIS: A Threat We Can't Ignore","short_title":"Rise of ISIS","author":"Jay Sekulow","tracking":{"object_type":"document","object_id":239588474,"track":"flattened_recommender","doc_uuid":"01J88wf1IhOJb2vXzbDx7Njabd4="},"url":"https://www.scribd.com/book/239588474/Rise-of-ISIS-A-Threat-We-Can-t-Ignore","top_badge":null},"240425882":{"type":"document","id":240425882,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/240425882/149x198/fb65970548/1422514321?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/240425882/298x396/87d7cbaa36/1422514321?v=1","title":"Whats New","short_title":"Whats New","author":"Vicky Gautam","tracking":{"object_type":"document","object_id":240425882,"track":"flattened_recommender","doc_uuid":"p4FqTgV7iOQrXtRQ0sDjkn4hCLs="},"url":"https://www.scribd.com/document/240425882/Whats-New","top_badge":null},"244157917":{"type":"book","id":244157917,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/244157917/149x198/ce51d31665/1540024130?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/244157917/298x396/d0cbd421a3/1540024130?v=1","title":"Yes Please","short_title":"Yes Please","author":"Amy Poehler","tracking":{"object_type":"document","object_id":244157917,"track":"flattened_recommender","doc_uuid":"TegJHa/AZ+dY1410aaN253CiOmU="},"url":"https://www.scribd.com/book/244157917/Yes-Please","top_badge":null},"246897514":{"type":"book","id":246897514,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/246897514/149x198/9d722fcc90/1540034872?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/246897514/298x396/2244bff6fc/1540034872?v=1","title":"The Wallcreeper","short_title":"The Wallcreeper","author":"Nell Zink","tracking":{"object_type":"document","object_id":246897514,"track":"flattened_recommender","doc_uuid":"WbuDiTRnB0gxpo/TdmtqyfVdkfU="},"url":"https://www.scribd.com/book/246897514/The-Wallcreeper","top_badge":null},"249308236":{"type":"book","id":249308236,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/249308236/149x198/345de5ca38/1540055237?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/249308236/298x396/4e9d2e54be/1540055237?v=1","title":"Interpreter of Maladies","short_title":"Interpreter of Maladies","author":"Jhumpa Lahiri","tracking":{"object_type":"document","object_id":249308236,"track":"flattened_recommender","doc_uuid":"ed/WDkgL+welgn+nwIefEa/s6Zw="},"url":"https://www.scribd.com/book/249308236/Interpreter-of-Maladies","top_badge":null},"249308781":{"type":"book","id":249308781,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/249308781/149x198/44cce4d99a/1540055357?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/249308781/298x396/3fb7c9a745/1540055357?v=1","title":"Life of Pi","short_title":"Life of Pi","author":"Yann Martel","tracking":{"object_type":"document","object_id":249308781,"track":"flattened_recommender","doc_uuid":"DGuGgTXD3uAT+az1Sc70ql0oqiE="},"url":"https://www.scribd.com/book/249308781/Life-of-Pi","top_badge":null},"249309502":{"type":"book","id":249309502,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/249309502/149x198/a536db5ae1/1540055368?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/249309502/298x396/aa0185412b/1540055368?v=1","title":"Extremely Loud and Incredibly Close: A Novel","short_title":"Extremely Loud and Incredibly Close","author":"Jonathan Safran Foer","tracking":{"object_type":"document","object_id":249309502,"track":"flattened_recommender","doc_uuid":"VdBGEC0hprDXJtPkmUXsXjjwETI="},"url":"https://www.scribd.com/book/249309502/Extremely-Loud-and-Incredibly-Close-A-Novel","top_badge":null},"250006950":{"type":"book","id":250006950,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/250006950/149x198/dfc24938b6/1540024393?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/250006950/298x396/a7ea4fedc0/1540024393?v=1","title":"The First Bad Man: A Novel","short_title":"The First Bad Man","author":"Miranda July","tracking":{"object_type":"document","object_id":250006950,"track":"flattened_recommender","doc_uuid":"PuSEaGbVww8LYNhMJvbo/yjR+as="},"url":"https://www.scribd.com/book/250006950/The-First-Bad-Man-A-Novel","top_badge":null},"250088535":{"type":"document","id":250088535,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/250088535/149x198/75ab87e3a6/1441088042?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/250088535/298x396/2097fe84e3/1441088042?v=1","title":"Http en Wikipedia Org Wiki History of Unix","short_title":"Http en Wikipedia Org Wiki History of Unix","author":"John Ng","tracking":{"object_type":"document","object_id":250088535,"track":"flattened_recommender","doc_uuid":"wC19e611XFSSd46eLrzRHqGgEXw="},"url":"https://www.scribd.com/document/250088535/Http-en-Wikipedia-Org-Wiki-History-of-Unix","top_badge":null},"251124256":{"type":"document","id":251124256,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/251124256/149x198/2c5813b241/1419705444?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/251124256/298x396/cfa13bab62/1419705444?v=1","title":"Cas Install Guide","short_title":"Cas Install Guide","author":"Harshad Patil","tracking":{"object_type":"document","object_id":251124256,"track":"flattened_recommender","doc_uuid":"8gr8BQwzBKZ0VKrFHu2pzovWdnI="},"url":"https://www.scribd.com/document/251124256/Cas-Install-Guide","top_badge":null},"253264900":{"type":"book","id":253264900,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/253264900/149x198/5948645a35/1540033804?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/253264900/298x396/912824fccd/1540033804?v=1","title":"Sapiens: A Brief History of Humankind","short_title":"Sapiens","author":"Yuval Noah Harari","tracking":{"object_type":"document","object_id":253264900,"track":"flattened_recommender","doc_uuid":"gORwx+oznp6jevgmqtAWZDsguUU="},"url":"https://www.scribd.com/book/253264900/Sapiens-A-Brief-History-of-Humankind","top_badge":null},"253623831":{"type":"document","id":253623831,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/253623831/149x198/8484a8a140/1422134395?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/253623831/298x396/a1acf4a6a9/1422134395?v=1","title":"Topic 3","short_title":"Topic 3","author":"jiml","tracking":{"object_type":"document","object_id":253623831,"track":"flattened_recommender","doc_uuid":"UrNcb4ceBcPlqxQW8xBEvrEldDw="},"url":"https://www.scribd.com/document/253623831/Topic-3","top_badge":null},"254039238":{"type":"book","id":254039238,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/254039238/149x198/278d17c7f4/1540029904?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/254039238/298x396/8e93835fcc/1540029904?v=1","title":"Leaving Berlin: A Novel","short_title":"Leaving Berlin","author":"Joseph Kanon","tracking":{"object_type":"document","object_id":254039238,"track":"flattened_recommender","doc_uuid":"PkUHwyJ096dUrX+AwNOHljqQ/yM="},"url":"https://www.scribd.com/book/254039238/Leaving-Berlin-A-Novel","top_badge":null},"263504218":{"type":"book","id":263504218,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/263504218/149x198/5791495c90/1540031117?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/263504218/298x396/ca05b40921/1540031117?v=1","title":"Elon Musk: Tesla, SpaceX, and the Quest for a Fantastic Future","short_title":"Elon Musk","author":"Ashlee Vance","tracking":{"object_type":"document","object_id":263504218,"track":"flattened_recommender","doc_uuid":"2TOvSnpJvlS6sZXChDwdQYSeQQs="},"url":"https://www.scribd.com/book/263504218/Elon-Musk-Tesla-SpaceX-and-the-Quest-for-a-Fantastic-Future","top_badge":null},"263504250":{"type":"book","id":263504250,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/263504250/149x198/128122e3e4/1540031100?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/263504250/298x396/0bcf68bfa9/1540031100?v=1","title":"Mislaid: A Novel","short_title":"Mislaid","author":"Nell Zink","tracking":{"object_type":"document","object_id":263504250,"track":"flattened_recommender","doc_uuid":"oR5rPsWiAJ0p8Bp31tkmx+jZ3vw="},"url":"https://www.scribd.com/book/263504250/Mislaid-A-Novel","top_badge":null},"267339905":{"type":"document","id":267339905,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/267339905/149x198/04412322a0/1433238668?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/267339905/298x396/b9a5e087be/1433238668?v=1","title":"M-TrangoLINK-GPlus-V1.3","short_title":"M-TrangoLINK-GPlus-V1.3","author":"Emmanuel Arellano","tracking":{"object_type":"document","object_id":267339905,"track":"flattened_recommender","doc_uuid":"LA8A3JA11i/KoBHT6fnRO65Igvo="},"url":"https://www.scribd.com/document/267339905/M-TrangoLINK-GPlus-V1-3","top_badge":null},"273440534":{"type":"book","id":273440534,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/273440534/149x198/d972c41ea4/1540030975?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/273440534/298x396/79bdc35da6/1540030975?v=1","title":"The Incarnations: A Novel","short_title":"The Incarnations","author":"Susan Barker","tracking":{"object_type":"document","object_id":273440534,"track":"flattened_recommender","doc_uuid":"Cu6LN419zRk4kNJsOpumPq9e3C4="},"url":"https://www.scribd.com/book/273440534/The-Incarnations-A-Novel","top_badge":null},"273582508":{"type":"book","id":273582508,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/273582508/149x198/1af6c958cc/1540027889?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/273582508/298x396/6f8ad65faa/1540027889?v=1","title":"You Too Can Have a Body Like Mine: A Novel","short_title":"You Too Can Have a Body Like Mine","author":"Alexandra Kleeman","tracking":{"object_type":"document","object_id":273582508,"track":"flattened_recommender","doc_uuid":"FUGE+DWUCY4P6LpRa0D809+hf6M="},"url":"https://www.scribd.com/book/273582508/You-Too-Can-Have-a-Body-Like-Mine-A-Novel","top_badge":null},"281534509":{"type":"document","id":281534509,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/281534509/149x198/d868275541/1508573448?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/281534509/298x396/e83c588155/1508573448?v=1","title":"Simulation Launcher User Guide","short_title":"Simulation Launcher User Guide","author":"rezagholami87","tracking":{"object_type":"document","object_id":281534509,"track":"flattened_recommender","doc_uuid":"zqvS/BFve2vKSeKWFkXw8/TUfhg="},"url":"https://www.scribd.com/document/281534509/Simulation-Launcher-User-Guide","top_badge":null},"282766939":{"type":"book","id":282766939,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/282766939/149x198/0fd38dc477/1540030952?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/282766939/298x396/ce234488d0/1540030952?v=1","title":"Dispatches from Pluto: Lost and Found in the Mississippi Delta","short_title":"Dispatches from Pluto","author":"Richard Grant","tracking":{"object_type":"document","object_id":282766939,"track":"flattened_recommender","doc_uuid":"z5DuL/tTvKnirOsnO9I/SEpmRGc="},"url":"https://www.scribd.com/book/282766939/Dispatches-from-Pluto-Lost-and-Found-in-the-Mississippi-Delta","top_badge":null},"293461549":{"type":"book","id":293461549,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/293461549/149x198/133f5a7fcd/1540027430?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/293461549/298x396/077cb2a3ef/1540027430?v=1","title":"The New Confessions of an Economic Hit Man","short_title":"The New Confessions of an Economic Hit Man","author":"John Perkins","tracking":{"object_type":"document","object_id":293461549,"track":"flattened_recommender","doc_uuid":"ic7pF8czttKHE0qhylD/AvZPDPQ="},"url":"https://www.scribd.com/book/293461549/The-New-Confessions-of-an-Economic-Hit-Man","top_badge":null},"295035958":{"type":"document","id":295035958,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/295035958/149x198/651c7c6d05/1452438664?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/295035958/298x396/7459f8bc54/1452438664?v=1","title":"Unix Linux Commands","short_title":"Unix Linux Commands","author":"Chandu Rd","tracking":{"object_type":"document","object_id":295035958,"track":"flattened_recommender","doc_uuid":"wWmcL23Ti4Do2elSaBK3UOAYQJg="},"url":"https://www.scribd.com/document/295035958/Unix-Linux-Commands","top_badge":null},"305112105":{"type":"document","id":305112105,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/305112105/149x198/b3f228aa8c/1458231354?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/305112105/298x396/06209b2425/1458231354?v=1","title":"Junos94 Cli User Guide","short_title":"Junos94 Cli User Guide","author":"Lewis Obi","tracking":{"object_type":"document","object_id":305112105,"track":"flattened_recommender","doc_uuid":"QOyU7OQO20an8DyizAD/5nxhaV4="},"url":"https://www.scribd.com/document/305112105/Junos94-Cli-User-Guide","top_badge":null},"313142809":{"type":"document","id":313142809,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/313142809/149x198/9e8f6a22c7/1463655767?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/313142809/298x396/d14b3c8814/1463655767?v=1","title":"Batch_Services_Quick_Start_Guide.pdf","short_title":"Batch_Services_Quick_Start_Guide.pdf","author":"m","tracking":{"object_type":"document","object_id":313142809,"track":"flattened_recommender","doc_uuid":"O1EOWK5JggtgpNm5ceP9CVTueOM="},"url":"https://www.scribd.com/document/313142809/Batch-Services-Quick-Start-Guide-pdf","top_badge":null},"329910287":{"type":"document","id":329910287,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/329910287/149x198/ad9164753f/1478204703?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/329910287/298x396/2b241faac7/1478204703?v=1","title":"Honeywell Vista 20P Installer Worksheet.pdf","short_title":"Honeywell Vista 20P Installer Worksheet.pdf","author":"tbmullins","tracking":{"object_type":"document","object_id":329910287,"track":"flattened_recommender","doc_uuid":"b0rEZqhkm0ohdz/DKxJDd/QiJy8="},"url":"https://www.scribd.com/document/329910287/Honeywell-Vista-20P-Installer-Worksheet-pdf","top_badge":null},"337536061":{"type":"book","id":337536061,"thumb_url":"https://imgv2-1-f.scribdassets.com/img/word_document/337536061/149x198/e0fabe3d5f/1540034676?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/word_document/337536061/298x396/9e5f6dd316/1540034676?v=1","title":"The Sympathizer: A Novel (Pulitzer Prize for Fiction)","short_title":"The Sympathizer","author":"Viet Thanh Nguyen","tracking":{"object_type":"document","object_id":337536061,"track":"flattened_recommender","doc_uuid":"YLb6rkNJPS32e20jm8BA4Oo22m8="},"url":"https://www.scribd.com/book/337536061/The-Sympathizer-A-Novel-Pulitzer-Prize-for-Fiction","top_badge":null},"362792380":{"type":"document","id":362792380,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/362792380/149x198/4ad9f1ff3f/1509128863?v=1","retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/362792380/298x396/674a30e490/1509128863?v=1","title":"._3S Check List-Finishing","short_title":"._3S Check List-Finishing","author":"S M Zillur Rahaman","tracking":{"object_type":"document","object_id":362792380,"track":"flattened_recommender","doc_uuid":"PLMMxanUK5ASOD8cuzzjtm4KKL0="},"url":"https://www.scribd.com/document/362792380/3S-Check-List-Finishing","top_badge":null},"369881117":{"type":"document","id":369881117,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/369881117/149x198/5b05e8415c/1516798304?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/369881117/298x396/1048bcc71d/1516798304?v=1","title":"An Introduction to Linux Systems Administration","short_title":"An Introduction to Linux Systems Administration","author":"vpsampath","tracking":{"object_type":"document","object_id":369881117,"track":"flattened_recommender","doc_uuid":"syd7phbH04YpfbC3eiGoRcoo3W0="},"url":"https://www.scribd.com/document/369881117/An-Introduction-to-Linux-Systems-Administration","top_badge":null},"387972342":{"type":"document","id":387972342,"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/387972342/149x198/857c25afe7/1536230216?v=1","retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/387972342/298x396/571fcfa29e/1536230216?v=1","title":"Slide Susunan Acara","short_title":"Slide Susunan Acara","author":"Ns","tracking":{"object_type":"document","object_id":387972342,"track":"flattened_recommender","doc_uuid":"8A3Vhq5nxcFe9NZol8KqAKpb0Cw="},"url":"https://www.scribd.com/document/387972342/Slide-Susunan-Acara","top_badge":null}}},"seo_roadblock_props_path":"/doc-page/seo-roadblock-props/332273910","signup_context":null,"toolbar":{"search_path":"/search-4gen?allowed_pages=1%2C2%2C3%2C47%2C48%2C49%2C104%2C105%2C106&auth_token=W1q6fKgoPaLTW8KHQKjYq6O2ofY%3D&authenticity_token=o1QhZ5KWlX7LtoVQFLWs3MkA5%2BtXOApoPeMM%2FK5TtWcmDJiJtIW1mauwv%2BAvHRTd023HoAXTjWZGoGmIQrdpuQ%3D%3D&expires=1540665066&wordDocumentId=332273910&wordUploadId=338186187"},"renewal_nag_props":null}-->