A Vi Tutorial
Results 1 to 4 of 4

Thread: A Vi Tutorial

  1. #1
    Senior Member
    Join Date
    Sep 2003
    Posts
    500

    A Vi Tutorial

    Hey guys, I wrote a Vi tutorial for MsMitten's newsletter so I thought I would post it here for everyone to see:


    ~A Vi Tutorial~

    by Lansing_Banda

    Vi (pronounced "vee eye") is a *nix text editor that was originally developed by Bill Joy in 1976. Bill more or less hacked up two very bad editors of his day called "ed" and "em," put them together, and Vi was born. A more detailed history is located here: http://www.cs.pdx.edu/~kirkenda/joy84.html

    Over the years there have been many differant releases of Vi. These include but are not limited to VIM, Elvis, Vile, Lemmy, NVi, Stevie, WinVi, XVi, Pvic, etc... But the basic concepts of Vi have stayed in tact in all of them.

    The difference between Vi and any other text editor is that Vi has two modes. A "command mode", and a "insert mode." The command mode lets you quickly move around the document, delete lines, insert lines, and whatever else you feel like doing. The insert mode is used to insert new text. Now you may be saying to yourself, "Well why don't I just use my mouse and the toolbar commands in my notepad?" Well because in the before time when the terminal was king, mouses were not really used all that often <gasp>! Vi almost simulates free formating in a terminal (I know that doesn't make much sense; let me explain): instead of having to punch the up arrow 100 times and then go to the end of the line and then press ctrl + H 20 times as you would have to do in pico; in Vi you just type 1G, and dd (see?).

    Okay so on to the commands:

    When you first enter a terminal, you are going to be presented with your shell prompt:

    bash$

    To enter into the Vi text editor, simply type Vi or Vim (depending on what version you have). This will present you with a empty page full of '~'. These represent empty lines. Right now there is little that you can do except start entering text, so lets do that. Right now you are in the "command mode." In the command mode you can enter various commands, which you will learn later. With these commands you can specify also how many times to do that activity by putting a number in front of it.
    Example: dd deletes one line, but 4dd deletes four. Get it?

    note: From now on, when I type ^ and then a letter (^P) I mean <Ctrl> letter.

    to enter the insert mode you must type either
    a

    or

    i

    note: 'a' = puts you in insert mode after the character your cursor is on
    'i' = puts you in insert mode before the character your cursor is on

    To exit insert mode simply press:

    <Esc>

    Now you are back in insert mode. To quit Vi, in command mode type:

    :q

    More than likely it is going to say "No write since last change" so you either have to save your document with:

    :w filename

    or use the command:

    :q!

    which exits regardless of the document state.
    note: if you are editing a file that already has a saved filename, you can exit and save at the same time with:

    :wq

    Now go through your files and find a text full file that we can play around with. To open that file type:

    Vi filename

    Okay, now lets learn how to move around in Vi. The most basic movements in command mode are the arrow keys:

    up, down, left, right or h, j, k, and l (which do the same movement)

    If you feel like getting more complicated then use these keys which also do the same thing:

    +, -, <backspace>, <space>

    To Scroll you can use either:

    ^D (scroll down)
    ^U (scroll up)
    ^F (page down)
    ^B (page up)

    There are many more ways to move around (like next word, next white space, etc...), but I will let you look at those later at the end of the file.

    Next we will learn how to search. The two handiest commands are

    /

    for search and

    G

    for goto. To use the first one, simply enter command mode by hitting
    <Esc>
    and type

    /

    then whatever you are trying to find. Say I wanted to find the symbol @ in my file:

    /@

    would take me right to it. Then you can hit

    n

    to go to the next occurrence of that string or

    ?
    to go to a previous. Next, the 'G' command lets you go to any line you want to. Simply type the line number and then

    G

    If I wanted to go to line 128:

    128G

    would take me there.

    note: If you don't specify a number and just hit 'G', you will be taken to the end of the file. To go to the beginning of the file, use

    1G

    A final note on moving. If you move somewhere you didn't want to go or would just like to move back to your original position, just type

    ' ' (that is two apostrophes without spaces)

    Now we are going to learn how to delete text, copy text, and paste text. The easiest way to delete text is with the 'x' command. Just put the cursor over a letter and hit:

    x

    You can also use a number in front to say how many letters to delete:

    4x

    deletes four letters. The next delete command is:

    dw

    which deletes one word forward and:

    db

    which deletes one word backward. Once again these can both be used with the numbers. Finally, there is the:

    dd

    command which will delete a single line unless you add a number before it. If you make a mistake and delete something that you really didn't want to delete, then the:

    u

    command will fix that right up. It will restore the last mistake you made. Try and use it twice; it will restore the mistake you just made.

    Next we have the yank command which is achieved with:

    y

    It will copy text. You can also use the number commands in front of it.
    note: yank starts at position 0 so:

    3y

    will yank 4 lines.

    Possibly one of the greatest thing about Vi is its buffers. It has 26 different buffers that you can store text in (a-z). You can call the buffers with the

    "n

    command where n is the name of the buffer. For example:

    "a4y

    will store 5 lines of text into the buffer named 'a.' You can then print that buffer back out using:

    "aP

    The great thing about buffers is that they can be used to store anything in. Say you were writing some code and wanted to delete something for the time being but you might want to use it later:

    "q5dd

    would delete 5 lines and store it in buffer q so you could use it later.

    That is all for now, go to the link below for more information on Vi and for some more commands.


    All my information came from prior knowledge and:

    http://docs.freebsd.org/44doc/usd/12.vi/paper.html

    which is a document written by Bill Joy.

  2. #2
    Super Moderator
    Know-it-All Master Beaver

    Join Date
    Jan 2003
    Posts
    3,914
    Handy Tutorial.... Vi is the god of editors.

    My Linux course requires students to use Vi, however many students can't grasp it; they are too used to the Windows GUI environment. In an attempt to aid them I created a Vi Quick Reference sheet in PDF format. I've attached the sheet to this post, hopefully people will find some use for it.

    Edit: Apparently I've posted this before, I just looked in my profile and noticed it on the list of attached files. However It probably better suited here. People reading this tutorial are the ones the quick reference will help the most, so I'll leave it here.
    IT Blog: .:Computer Defense:.
    PnCHd (Pronounced Pinched): Acronym - Point 'n Click Hacked. As in: "That website was pinched" or "The skiddie pinched my computer because I forgot to patch".

  3. #3
    Senior Member
    Join Date
    Mar 2003
    Posts
    372
    Great tut Lansing_Banda, thanks for the history of vi which I never knew

    Hey HTRegz, something you might consider adding to your quick reference guide.

    If you deal with reading logs a lot, or if you are going through a large file you might consider using the following command in vi.

    :set number

    then you can jump to the line you want by typing the number followed by a 'G' to go directly to that line or a 'g' to go to the line after the line number you put in, i.e. 8226G would take you to the front of the line 8226 whereas 8226g would take you to the line directly after 8226. I can't tell you how much time that command has saved me while going through 25,000 line log files

    Give a man a match and he will be warm for a while, light him on fire and he will be warm for the rest of his life.

  4. #4
    Senior Member
    Join Date
    Sep 2003
    Posts
    500
    Great cheat sheet HTregz. I agree, I use Vi whenever I am using a terminal. It really is just damn powerful.
    You shall no longer take things at second or third hand,
    nor look through the eyes of the dead...You shall listen to all
    sides and filter them for your self.
    -Walt Whitman-

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

 Security News

     Patches

       Security Trends

         How-To

           Buying Guides