DOKK Library

A Byte of Vim v0.51

Authors Swaroop

License CC-BY-SA-3.0

Plaintext
A Byte of Vim
v0.51 (for Vim version 7)




           PDF generated using the open source mwlib toolkit
          see http://code.pediapress.com/ for more information
Vim                                                                                                    2


      Vim
      Introduction
      "A Byte of Vim" is a book which aims to help you to learn how to use the Vim editor (version
      7), even if all you know is how to use the computer keyboard.




      The first part of this book is meant for new users who want to understand what Vim is and
      learn how to use it.
      The second part of this book is for people who already know how to use Vim and want to
      learn about features that make Vim so powerful, such as windows and tabs, personal
      information management, making it a programmer's editor, how to extend Vim with your
      own plugins, and more.


      Read Now
      Read the whole book online now.
      If you find any typos/spelling mistakes, you are encouraged to click on the 'Edit' link in the
      left sidebar and fix it!


      Buy the Book
      A printed hardcopy of the book can be purchased [1] for your offline reading pleasure, and
      to support the continued development and improvement of this book.
                                                           [2]
      Alternatively, please consider making a donation           .


      Download
                      [3]
      • PDF (1.5MB)
                                       [4]
      • Mediawiki XML dump (197K)            (for advanced users only)


      What Readers Say
           "Well done!!! I've been only using vim for like 2/3 weeks now, and thus I can say
           that it's just perfect for beginners like me!!!"
           -- Jay [5]
           "The book is very good and fun to read too. Thank you for sharing it."
           -- Yosi Izaq [6]
           "Your books should sell like hot cakes for their way of presentation."
           -- Deepak [7]
           "Awesome! Thank you for all of your hard work. It is especially nice that the
           beginning starts the reader off gradually. After using vim for a couple of years
           I've forgotten how weird it seems at first, so I probably wouldn't explain it that
           good to someone. I will be sure to share your book to spread the vim propaganda.
           ;-)"
           -- Joseph Sullivan [8]
Vim                                                                                                    3


              What I am trying to say is if you have basic computer competency you should
              immediately get Vim on your machine and improve your life. The best place to
              learn about is to read Swaroop C H's awesome eBook A Byte of Vim, it will
              revolutionize how you think about text editors in the future.
              -- "wooden nickels" [9]
              "Have been thumbing through 'byte of vim'. learning a ton even having used vim
              for years."
              -- Josh Nichols [10]
              Great Book !! Although I use vim everyday as an editor as well as an ide, the book
              makes u realise how much more it can do.
              -- Raseel Bhagat [11]
              Wonderful! This was one most-required-book. I was a vim user for the past years,
              but never have seen these much of facilities inside that! Thanks for the Book,
              Swaroop!
              -- Hiran Venugopalan [12]
              What a nice book. I'm a long-time vim user, but never managed to get my head
              around vim scripting (apart from fixing some bugs in others' scripts). This is the
              best introduction to Vim scripting (writing plugins, syntax files, ...) I have seen so
              far. Thanks for putting it online!
              -- Anonymous (132.230.122.35) [13]
              "Thank you Swaroop! I've begun reading it and must say it's very well written.
              And I have no doubts this great community of us vim users here will improve it
              through fixes, additions or small corrections -- the wiki format is a great idea."
              -- Eduard Fabra [14]
      Also:
                                                                                            [15]
      • The book was listed as the top tip for Dec 2008 on the Official Vim Tips wiki              .


      License and Terms
      1. This book is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported
        [16]
             license.
        • This means:
          • You are free to Share i.e. to copy, distribute and transmit this book
          • You are free to Remix i.e. to adapt this book
        • Under the following conditions:
          • Attribution. You must attribute the work in the manner specified by the author or
            licensor (but not in any way that suggests that they endorse you or your use of this
            book).
          • Share Alike. If you alter, transform, or build upon this work, you may distribute the
            resulting work only under the same or similar license to this one.
        • For any reuse or distribution, you must make clear to others the license terms of this
          book.
        • Any of the above conditions can be waived if you get permission from the copyright
          holder.
        • Nothing in this license impairs or restricts the author's moral rights.
Vim                                                                                                   4


      2. Attribution must be shown by linking back to http:/ / www. swaroopch. com/ notes/ Vim
        and clearly indicating that the original text can be fetched from this location.
      3. All the code/scripts provided in this book is licensed under the 3-clause BSD License [17]
        unless otherwise noted.
      4. Some sample text used in this book has been retrieved from http:/ / en. wikipedia. org
        and http:/ / en. wikiquote. org under the GNU Free Documentation License [18].
      5. Volunteer contributions to this original book must be under this same license and the
        copyright must be assigned to the main author of this book.


      Translations
      If you are interested in reading or contributing translations of this book to other human
      languages, please see Translations.
      Next


      External links
      [1]   http:/ / www. swaroopch. com/ buybook
      [2]   http:/ / www. swaroopch. com/ byteofdonate
      [3]   http:/ / www. swaroopch. com/ files/ byteofvim/ byte_of_vim_v050. pdf
      [4]   http:/ / www. swaroopch. com/ files/ byteofvim/ byte_of_vim_v050. xml
      [5]   http:/ / groups. google. com/ group/ vim_use/ msg/ e1625069d4ea0ef9
      [6]   http:/ / groups. google. com/ group/ vim_use/ msg/ 09ca306a67b9d2cd
      [7] http:/ / twitter. com/ peerlessdeepak/ status/ 1024279089
      [8] http:/ / groups. google. com/ group/ vim_use/ msg/ 362a82a4af132317
      [9] http:/ / woodennickels. posterous. com/ text-editing-your-way-to-heave
      [10] http:/ / twitter. com/ techpickles/ status/ 1025775542
      [11] http:/ / twitter. com/ raseel/ status/ 1024291090
      [12] http:/ / www. swaroopch. com/ blog/ a-free-book-on-vim/ #comment-116472
      [13] http:/ / www. swaroopch. com/ notes/ Talk:Vim
      [14] http:/ / groups. google. com/ group/ vim_use/ msg/ dac94f3332f733e4
      [15] http:/ / vim. wikia. com/ wiki/ Main_Page#Did_you_know. 3F_view_archive
      [16] http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/
      [17] http:/ / www. opensource. org/ licenses/ bsd-license. php
      [18] http:/ / en. wikipedia. org/ wiki/
        Wikipedia:Text_of_the_GNU_Free_Documentation_License


      Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim&oldid=1225
      Principal Authors: Swaroop
Vim en:Table of Contents                                                                            5


   Vim en:Table of Contents
   • → Front Page
   • Translations
   1.   Preface
   2.   Introduction
   3.   Installation
   4.   First Steps
   5.   Modes
   6. Typing Skills
   7. Moving Around
   8. Help
   9. Editing Basics
   10. More Editing
   11. Multiplicity
   12. Personal Information Management
   13. Scripting
   14. Plugins
   15.   Programmers Editor
   16.   More
   17.   What Next
   18.   Feedback
   19.   Charityware
   20.   Colophon
   21.   Versions

   → Previous Next


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_ en:Table_ of_
   Contents&oldid=1193
   Principal Authors: Swaroop



   Vim en:Preface
   About Vim
   Vim [1] is a computer program used for writing, and it provides a range of features that help
   you write better.


   Why Vim?
   Let's face it, it's very rare to produce your best work on the first attempt. Most likely, you
   will keep editing it frequently until it becomes 'good'.
   As Louis Brandeis once said:
         "There is no great writing, only great rewriting."
Vim en:Preface                                                                                       6


   Making these numerous rapid changes would be a lot easier if we had a capable editor to
   help us, and that is exactly where Vim shines, and is far better compared to most plain text
   editors and rich document editors.


   Why Write This Book?
   I have been using the Vim editor ever since I learned to use the old vi editor during Unix
   classes in college. Vim is one of the few pieces of software that I use for nearly 10 hours a
   day. I knew there were just so many features that I didn't know about but could potentially
   be useful to me, so I started exploring Vim little by little.
   To crystallize my understanding and to help others also explore Vim, I started writing this
   collection of notes, and called it a book.
   Some of the principles I have tried to keep in mind while writing these notes are:
   1. Simple literature. The importance of this should be reinforced again and again.
   2. Emphasis on examples and how-to.
   3. The one-stop shop for readers to learn Vim - from getting started to learning advanced
     stuff.
   4. Get the user to understand how to do things the Vim way - from modes to buffers to
     customization. Most people learn only the basic vi commands and do not attempt to learn
     anything beyond that. Learning such concepts is the tipping point, they become hardcore
     Vim users i.e. Vimmers, which means they extract the most out of Vim, which is the
     intent of this book.
   5. A lot of things are documented and stored here as a reference for people such as how to
     use Vim as an IDE, etc. There are various ways of doing it and instead of the user
     struggling to figure out which plugins to try out, the book already has the basic
     background work already for the reader.
   6. Just enough info to get you to understand and use, not everything required (Pareto
     principle)
   7. Relatedly, the book shouldn't attempt to rewrite the reference manual. Where
     appropriate, it should simply point out the relevant parts. This way, there is no
     redundancy, the user learns to use the awesome built-in reference manual which is
     important, and the book can stand on its own strengths as well.
   To summarize, the mantra is Concepts. Examples. Pithy.


   Status of the Book
   This book is a work-in-progress and is not yet ready to be called a "1.0" version.
   Constructive suggestions are most welcome. Please add your thoughts and suggestions via
   the 'Discussion' link in the left sidebar on any page at the official website, or alternatively
   email me [2].


   Official Website
   The official website of the book is http:/ / www. swaroopch. com/ notes/ Vim . From the
   website, you can read the whole book online or download the latest versions of the book,
   and also send me feedback.
Vim en:Preface                                                                                     7


   License and Terms
   1. This book is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported
     [3]
         license.
     • This means:
         • You are free to Share i.e. to copy, distribute and transmit this book
       • You are free to Remix i.e. to adapt this book
     • Under the following conditions:
         • Attribution. You must attribute the work in the manner specified by the author or
           licensor (but not in any way that suggests that they endorse you or your use of this
           book).
         • Share Alike. If you alter, transform, or build upon this work, you may distribute the
           resulting work only under the same or similar license to this one.
     • For any reuse or distribution, you must make clear to others the license terms of this
       book.
     • Any of the above conditions can be waived if you get permission from the copyright
       holder.
     • Nothing in this license impairs or restricts the author's moral rights.
   2. Attribution must be shown by linking back to http:/ / www. swaroopch. com/ notes/ Vim
     and clearly indicating that the original text can be fetched from this location.
   3. All the code/scripts provided in this book is licensed under the 3-clause BSD License [4]
     unless otherwise noted.
   4. Sample text used in this book has been retrieved from http:/ / en. wikipedia. org and
     http:/ / en. wikiquote. org under the GNU Free Documentation License [5].
   5. Volunteer contributions to this original book must be under this same license and the
     copyright must be assigned to the main author of this book.


   Something To Think About
   Books aren't written - they're rewritten. Including your own. It is one of the hardest things
   to accept, especially after the seventh rewrite hasn't quite done it.
   -- Michael Crichton
   Perfection is achieved, not when there is nothing more to add, but when there is nothing
   left to take away.
   -- Antoine de Saint-Exupery

   Previous Next


   External links
   [1]   http:/ / www. vim. org
   [2]   http:/ / www. swaroopch. com/ contact/
   [3]   http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/
   [4]   http:/ / www. opensource. org/ licenses/ bsd-license. php
   [5] http:/ / en. wikipedia. org/ wiki/
     Wikipedia:Text_of_the_GNU_Free_Documentation_License
Vim en:Preface                                                                                         8


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:Preface&oldid=1138
   Principal Authors: Swaroop, Nofrak



   Vim en:Introduction
   What is Vim?
   Vim is a computer program used for writing any kind of text, whether it is your shopping
   list, a book, or software code.
   What makes Vim special is that it is one of those few software which is both simple and
   powerful.
   Simple means it is easy to get started with. Simple means that it has a minimalistic
   interface that helps you to concentrate on your main task - writing. Simple means it is built
   around few core concepts that helps you learn deeper functionality easily.
   Powerful means getting things done faster, better and easier. Powerful means making
   not-so-simple things possible. Powerful does not mean it has to be complicated. Powerful
   means following the paradigm of "Minimal effort. Maximal effect."


   What can Vim do?
   I can hear you say, "So it's a text editor. What's the big deal anyway?"
   Well, a lot.
   Let's see some random examples to compare Vim with your current choice of editor. The
   point of this exercise is for you to answer the question "How would I do this in the editor I
   currently use?" for each example.
    Note
           Don't worry too much about the details of the Vim commands here, the point here is to
           enlighten you with the possibilities, not to start explaining how these things work. That
           is what the rest of the book is for.

    Edit                           In Vim

    How do you move the cursor     Press 7 j
    down by 7 lines?

    How do you delete a word?      Press d w
    Yes, a "word".

    How do you search the file     Press *
    for the current word that the
    cursor is currently placed on?

    How to do a find and replace   Run : 5 0 , 1 0 0 s / o l d / n e w / g
    only in lines 50-100?

    What if you wanted to view     Run : s p to 'split' the view
    two different parts of the
    same file simultaneously?
Vim en:Introduction                                                                                                                           9


    What if you wanted to open a      Press g f (which means 'g'o to this 'f'ile)
    file whose name is in the
    current document and the
    cursor is placed on that
    name?

    What if you wanted to choose      Run : c o l o r s c h e m e d e s e r t to choose the 'desert' color scheme (my favorite)
    a better color scheme of the
    display?

    What if you wanted to map         Run : n m a p < c - s > : w < C R > . Note that < C R > means a 'c'arriage 'r'eturn i.e. the
    the keyboard shortcut             enter key.
    c t r l - s to save the file?

    What if you wanted to save        Run : m k s e s s i o n ~ / l a t e s t _ s e s s i o n . v i m , and open Vim next time as v i m - S
    the current set of open files     ~/latest_session.vim.
    as well as any settings you
    have changed, so that you
    can continue editing later?

    What if you wanted to see         Run : s y n t a x o n . If it doesn't recognize the language properly, use : s e t
    colors for different parts of     f i l e t y p e = W i k i p e d i a , for example.
    your code?

    What if you wanted different      Run : s e t f o l d m e t h o d = i n d e n t assuming your file is properly indented. There are
    parts of your file to be folded   other methods of folding as well.
    so that you can concentrate
    on only one part at a time?

    What if you wanted to open        Use : t a b e d i t < f i l e > to open multiple files in "tabs" (just like browser tabs), and
    multiple files in tabs?           use c t r l - p g u p /c t r l - p g d n to switch between the tabs.

    You use some words                Press c t r l - n and see the list of "completions" for the current word, based on all
    frequently in your document       the words that you have used in the current document. Alternatively, use : a b
    and wish there was a way          m a s M a s l o w ' s h i e r a r c h y o f n e e d s to expand the abbreviation automatically
    that it could be quickly filled   when you type m a s < s p a c e > .
    in the next time you use the
    same word?

    You have some data where        Press c t r l - v , select the text and press y to copy the selected rows and columns
    only the first 10 characters in of text.
    each line are useful and the
    rest is no longer useful for
    you. How do you get only that
    data?

    What if you received a         In Vim, run the following:
    document from someone
    which is in all caps, find it        :for i in range(0, line('$'))
    irritating and want to convert       : call setline(i,
    it to lower case?                    tolower(getline(i)))
                                         :endfor


                                      Don't worry, other details will be explored in later chapters. A more succinct way
                                      of doing this would be to run : % s # \ \ ( . \ \ ) # \ \ l \ \ 1 # g but then again, it's easier to
                                      think of the above way of doing it.
                                      There is an even simpler method of selecting all the text (1 G V G ) and using the u
                                      operator to convert to lowercase, but then again that's too easy, and isn't as cool
                                      as showing off the above way of making Vim do steps of actions.


   Phew. Are you convinced yet?
Vim en:Introduction                                                                                                 10


   In these examples, you can see the power of Vim in action. Any other editor would make it
   insanely hard to achieve the same level of functionality. And yet, amazingly, all this power
   is made as understandable as possible.
   Notice that we didn't use the mouse even once during these examples! This is a good thing.
   Count how many times you shift your hand between the keyboard and the mouse in a single
   day, and you'll realize why it is good to avoid it when possible.
   Don't be overwhelmed by the features here. The best part of Vim is that you don't need to
   know all of these features to be productive with it, you just need to know a few basic
   concepts. After learning those basic concepts, all the other features can be easily learned
   when you need them.

   Previous Next


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:Introduction&oldid=1205
   Principal Authors: Swaroop, Nofrak



   Vim en:Installation
   Let's see how to get Vim installed on your computer.


   Windows
   If you use Microsoft Windows, then the following steps will help you get the latest version
   of Vim 7 installed on your computer:
   1. Visit http:/ / www. vim. org/ download. php#pc
   2. Download the "Self-installing executable" (g v i m 7 2 . e x e [ 1 ] as of this writing)
   3. Double-click the file and install Vim like any other Windows-based software.


   Mac OS X
   If you use Mac OS X, then you already have the terminal version of Vim installed. Run the
   menu command Finder → Applications → Utilities → Terminal. In the terminal, run the
   command v i m and press enter, you should now see the Vim welcome screen.
   If you want to use a graphical version of Vim, download the latest version of the
   Cocoa-based MacVim project [2]. Double-click the file (such as
   M a c V i m - 7 _ 2 - s t a b l e - 1 _ 2 . t b z ), it will be unarchived and a directory called
   M a c V i m - 7 _ 2 - s t a b l e - 1 _ 2 will be created. Open the directory, and copy the M a c V i m app to
   your A p p l i c a t i o n s directory.
   For more details MacVim diffrences, including how to run MacVim from the terminal see
   the macvim refrence:
   1. Click on Finder → Applications → MacVim.
   2. Type : h e l p m a c v i m and press the Enter key.
Vim en:Installation                                                                                             11


   Linux/BSD
   If you are using a Linux or *BSD system, then you will have at least a minimal console
   version of Vim already installed. Open a terminal program such as k o n s o l e or
   g n o m e - t e r m i n a l , run v i m and you should see the Vim welcome screen.
   If you get a message like v i m : c o m m a n d n o t f o u n d , then Vim is not installed. You will have
   to use your system-specific tools to install Vim, such as a p t i t u d e in Ubuntu/Debian Linux,
   y u m in Fedora Linux, p k g _ a d d or p o r t in FreeBSD, etc. Please consult your specific
   system's documentation and forums on how to install new packages.
   If you want the graphical version, install the v i m - g n o m e package or alternatively, the g v i m
   package.


   Summary
   Depending on how it is installed, you can run the v i m command in the shell or use your
   operating system's menus to open a graphical version of the V i m application.
   Now that we have Vim installed on your computer, let us proceed to use it in the next
   chapter.

   Previous Next


   External links
   [1] ftp:/ / ftp. vim. org/ pub/ vim/ pc/ gvim72. exe
   [2] http:/ / code. google. com/ p/ macvim/


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:Installation&oldid=1139
   Principal Authors: Swaroop, Nofrak, Fuzzymonk
Vim en:First Steps                                                                             12


   Vim en:First Steps
   Starting Vim
   First step is, of course, to learn how to start Vim.


   Graphical version
    Windows
        Click on Start → Programs →
        Vim 7 → gVim.
    Mac OS X
        Click on Finder → Applications
        → MacVim.
    Linux/BSD
        Click on Applications →
        Accessories → GVim Text Editor,
        or press Alt+F2, type g v i m and
        press the enter key.




   Terminal version
    Windows
        Click on Start → Run, type v i m
        and press the enter key.
    Mac OS X
        Click on Finder → Applications
        → Utilities → Terminal, type v i m
        and press the enter key.
    Linux/BSD
        Click on Applications →
        Accessories → Terminal, or
        press Alt+F2, type
        k o n s o l e /g n o m e - t e r m i n a l and
        press the enter key. Then, type v i m and press the enter key.
   From now onwards when we say 'open Vim', use either of the two methods mentioned
   above.
    Note
        When you started Vim, you might have noticed that you can't immediately start typing
        text. Don't panic, all will be explained in a little while.
Vim en:First Steps                                                                                13


   Graphical or Terminal?
   The graphical version of Vim has menus at the top of the application as well as various
   options accessible via the mouse, but note that this is completely optional. You can still
   access all the features of Vim using only the keyboard.
   Why is this important? Because once a person becomes efficient at typing, using only the
   keyboard makes the person much faster and less error-prone, as opposed to using the
   mouse. This is because the hand movement required to switch between the keyboard and
   the mouse is slow and there is a context switch required in the mind of the person when
   shifting the hand between the keyboard and the mouse. If we make it a habit to use the
   keyboard as much as possible, you're saving valuable hand movement.
   Of course, this is subjective. Some people prefer the mouse and some prefer the keyboard. I
   encourage you to use the keyboard as much as possible to experience the real power of
   Vim.


   Introduction to Modes
   Imagine it's a Saturday evening and you're bored of the shows on television. You want to
   watch an old favorite movie instead. So, you switch the TV to video mode so that it shows
   what the DVD player is displaying instead of the cable channels. Note that the television is
   still displaying video, but you switch the context on whether you want to watch a DVD or a
   live television channel.
   Similarly, Vim has modes. For example, Vim has a mode for writing text, a mode for
   running commands, etc. They are all related to the main purpose of editing text, but you
   switch context on whether you want to simply type stuff or you want to run some commands
   on the text.
   Isn't that simple?
   Traditionally, the concept of modes is the most oft-cited reason by beginners on why they
   find Vim "confusing". I compare it to riding a bicycle - you'll trip a few times, but once
   you've got the hang of it, you'll wonder what the fuss was all about.
   So why does Vim have modes? To make things as simple as possible, even though it's usage
   may seem "strange" at first.
   What do I mean by that? Let's take an example - one of the key goals in Vim is to make it
   fully accessible from the keyboard without ever having to need to use a mouse (you can still
   use the mouse if you want to but it is strictly optional). In such a scenario, how would you
   distinguish between the text you want to write, and the commands that you want to run?
   Vim's solution is to have a "normal" mode where you can execute commands and an "insert"
   mode where you are simply writing text. You can switch between the two modes any time.
   For example, pressing i switches Vim to insert mode, and pressing < E s c > switches Vim
   back to normal mode.
   How do traditional editors achieve this distinction between commands and writing text? By
   using graphical menus and keyboard shortcuts. The problem is that this does not scale.
   First of all, if you have hundreds of commands, creating menus for each of these commands
   would be insane and confusing. Secondly, customizing how to use each of these commands
   would be even more difficult.
Vim en:First Steps                                                                                              14


   Let's take a specific example. Suppose you want to change all occurrences of the word
   "from" to the word "to" in a document. In a traditional editor, you can run a menu command
   like Edit -> Replace (or use a keyboard shortcut like Ctrl-R) and then enter the 'from' word
   and the 'to' word and then click on 'Replace'. Then, check the 'Replace All' option. In Vim,
   you simply run : % s / f r o m / t o / g in the normal mode. The : s is the "substitute" command.
   See how simpler this is?
   What if you want to now run this substitution only in the first 10 lines of the text and you
   want to have a yes/no confirmation for each replacement? In traditional text editors,
   achieving the yes/no confirmation is easy by unchecking the 'Replace All' option, but notice
   that you have to first search for this option and then use the mouse to click on the option
   (or use a long series of keys using the keyboard). But how will you run the Replace for only
   the first 10 lines? In Vim, you can simply run : 0 , 1 0 s / f r o m / t o / g c . The new c option we are
   using means we want a 'c'onfirmation message for every replace.
   By separating the writing (insert) and command (normal) modes, Vim makes it easy for us
   to switch the two contexts easily.
   Notice how the first steps to using Vim seem a little "weird", a little "strange", but once you
   have seen it in action, it starts to make sense. The best part is that these core concepts will
   help you to understand all you need to know on how to use Vim.
   Since you now understand the difference between normal mode and insert mode, you can
   look up the various commands you can run in the normal mode, and you can immediately
   start using them. Compare that to learning new commands in traditional editors which
   generally means having to read a lot of documentation, searching a lot of menus, a lot of
   trial and error or plain asking someone for help.
   Personally, I find the names of the modes not intuitive to beginners. I prefer calling the
   insert mode as "writing" mode and the normal mode as "rewriting" mode, but we will stick
   to the standard Vim terminology to avoid confusion.
    Note
        All commands in the normal mode should end with the enter key to signal Vim that we
        have written the full command. So, when we say run : h e l p v i m - m o d e s - i n t r o , it
        means you should type : h e l p v i m - m o d e s - i n t r o and then press the enter key at the
        end of the command.
Vim en:First Steps                                                                             15


   Writing a file
   We have seen how to open and close files in Vim, now let's do something in between, which
   is, write.
   1. Open Vim.
   2. Type : e d i t h e l l o . t x t and press
      the enter key.




   3. Press i .




   4. Type the text H e l l o W o r l d .
Vim en:First Steps                                                 16


   5. Press the < E s c > key.




   6. Type : w r i t e and press the enter
      key.




   7. Close Vim by running : q .




   Congratulations! You just wrote your
   first file using Vim :-).
   Does this seem like a lot of steps?
   Yes, it does, at first. That is because
   this is the first time we are getting
   used to opening Vim, writing a file
   and closing Vim. You have to keep in
   mind that this will only be a minor
   part of your time compared to the
   actual time that goes into in editing
   the content of the document.

   Let us see what the above commands do.
   • : e d i t h e l l o . t x t or simply : e h e l l o . t x t
Vim en:First Steps                                                                                     17


     • This opens a file for editing. If the file with the specified name does not exist, it will be
       created the first time we "save" the file.
   • Press i
     • This switches Vim to the insert mode
   • Type the text H e l l o W o r l d
     • This is where you type the actual text that you want to write.
   • Press < E s c >
     • This escapes Vim back to normal mode
   • : w r i t e or simply : w
     • This tells Vim to write the text (which is currently stored in the computer's memory) to
         the file on the hard disk. This means that whatever we wrote so far is now permanently
         stored.
   • : q u i t or simply : q to quit the file in the "window" that we are editing. If there was only
     one "window" open, this will also close Vim (Concept of windows will be discussed in a
     later chapter).
   Try to repeat this process a few times with different file names, different text, etc. so that
   you get used to the basic set of steps in using Vim.
   Notice that when you are in insert mode, Vim displays - - I N S E R T - - at the bottom left
   corner. When you switch to normal mode, it will not display anything. This is because
   normal mode is the default mode in which Vim runs.
   Take some time to soak in this information, this is probably the hardest lesson there is to
   learn about Vim, the rest is easy :)
   And don't worry, help is not too far away. Actually, it's just a : h e l p command away. For
   example, run : h e l p : e d i t and you'll see the documentation open up. Go ahead, try it.


   Summary
   We have now discussed the basic concepts and usage of Vim. See : h e l p n o t a t i o n and
   : h e l p k e y c o d e s also.
   Be sure to understand these concepts well. Once you start "thinking in Vim", understanding
   the rest of Vim's features is easy.

   Previous Next


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_ en:First_
   Steps&oldid=1140
   Principal Authors: Swaroop, Fuzzymonk
Vim en:Modes                                                                                              18


   Vim en:Modes
   Introduction
   We had our first encounter with modes in the previous chapter. Now, let us explore this
   concept further regarding types of modes available and what we can do in each mode.


   Types of modes
   There are three basic modes in Vim - normal, insert and visual.
   • Normal mode is where you can run commands. This is the default mode in which Vim
     starts up.
   • Insert mode is where you insert i.e. write the text.
   • Visual mode is where you visually select a bunch of text so that you can run a
     command/operation only on that part of the text.


   Normal mode
   By default, you're in normal mode. Let's see what we can do in this mode.
   Type : e c h o " h e l l o w o r l d " and press enter. You should see the famous words h e l l o
   w o r l d echoed back to you. What you just did was run a Vim command called : e c h o and you
   supplied some text to it which was promptly printed back.
   Type / h e l l o and press the enter key. Vim will search for that phrase and will jump to the
   first occurrence.
   This was just two simple examples of the kind of commands available in the normal mode.
   We will see many more such commands in later chapters.


   How to use the help
   Almost as important as knowing the normal mode, is knowing how to use the : h e l p
   command. This is where you learn more about the commands available in Vim.
   Remember that you do not need to know every command available in Vim, it's better to
   simply know where to find them when you need them. For example, see : h e l p u s r _ t o c
   takes us to the table of contents of the reference manual. You can see : h e l p i n d e x to
   search for the particular topic you are interested in, for example, run / i n s e r t m o d e to see
   the relevant information regarding insert mode.
   If you can't remember these two help topics at first, just press F 1 or simply run : h e l p .


   Insert mode
   When Vim starts up in normal mode, we have seen how to use i to get into insert mode.
   There are other ways of switching from normal mode to insert mode as well:
   • Run : e d a p p i n g . t x t
   • Press i
   • Type the following paragraph (including all the typos and mistakes, we'll correct them
     later):
Vim en:Modes                                                                                       19


         means being determined about being determined and being passionate about
         being passionate
   • Press < E s c > key to switch back to normal mode.
   • Run : w
   Oops, we seem to have missed a word at the beginning of the line, and our cursor is at the
   end of the line, what do we do now?
   What would be the most efficient way of going to the start of the line and insert the missing
   word? Should we use the mouse to move the cursor to the start of the line? Should we use
   arrow keys to travel all the way to the start of the line. Should we press home key and then
   press i to switch back to insert mode again?
   It turns out that the most efficient way to be press I (upper case I):
   • Press I
   • Type D a p p i n
   • Press < E s c > key to switch back to the normal mode.
   Notice that we used a different key to switch to insert mode, its specialty is that it moves
   the cursor to the start of the line and then switches to the insert mode.
   Also notice how important it is to switch back to the normal mode as soon as you're done
   typing the text. Making this a habit will be beneficial because most of your work (after the
   initial writing phase) will be in the normal mode - that's where the all-important
   rewriting/editing/polishing happens.
   Now, let's take a different variation of the i command. Notice that pressing i will place
   your cursor before the current position and then switch to insert mode. To place the cursor
   'a'fter the current position, press a .
   • Press a
   • Type g (to complete the word as "Dapping")
   • Press < E s c > to switch back to normal mode
   Similar to the relationship between i and I keys, there is a relationship between the a and
   A keys - if you want to append text at the end of the line, press the A key.
   • Press A
   • Type . (put a dot to complete the sentence properly)
   • Press < E s c > to switch back to the normal mode
   To summarize the four keys we have learnt so far:

   Command           Action

   i                 insert text just before the cursor

   I                 insert text at the start of the line

   a                 append text just after the cursor

   A                 append text at the end of the line


   Notice how the upper case commands are 'bigger' versions of the lower case commands.
   Now that we are proficient in quickly moving in the current line, let's see how to move to
   new lines. If you want to 'o'pen a new line to start writing, press the o key.
   • Press o
   • Type I ' m a r a p p e r .
Vim en:Modes                                                                                          20


   • Press < E s c > to switch back to the normal mode.
   Hmmm, it would be more appealing if that new sentence we wrote was in a paragraph by
   itself.
   • Press O (upper case 'O')
   • Press < E s c > to switch back to the normal mode.
   To summarize the two new keys we just learnt:

   Command            Action

   o                  open a new line below

   O                  open a new line above


   Notice how the upper and lower case 'o' commands are opposite in the direction in which
   they open the line.
   Was there something wrong in the text that we just wrote? Aah, it should be 'dapper', not
   'rapper'! It's a single character that we have to change, what's the most efficient way to
   make this change?
   We could press i to switch to insert mode, press < D e l > key to delete the r , type d and
   then press < E s c > to switch back to the insert mode. But that is four steps for such a simple
   change! Is there something better? You can use the s key - s for 's'ubstitute.
   • Move the cursor to the character r (or simply press b to move 'b'ack to the start of the
     word)
   • Press s
   • Type d
   • Press < E s c > to switch back to the normal mode
   Well, okay, it may not have saved us much right now, but imagine repeating such a process
   over and over again throughout the day! Making such a mundane operation as fast as
   possible is beneficial because it helps us focus our energies to more creative and
   interesting aspects. As Linus Torvalds says, "it's not just doing things faster, but because it
   is so fast, the way you work dramatically changes."
   Again, there is a bigger version of the s key, S which substitutes the whole line instead of
   the current character.
   • Press S
   • Type B e a s i n n e r .
   • Press < E s c > to switch back to normal mode.

   Command             Action

   s                   substitute the current character

   S                   substitute the current line


   Let's go back our last action... Can't we make it more efficient since we want to 'r'eplace
   just a single character? Yes, we can use the r key.
   • Move the cursor to the first character of the word s i n n e r .
   • Press r
   • Type d
   Notice we're already back in the normal mode and didn't need to press < E s c > .
Vim en:Modes                                                                                               21


   There's a bigger version of r called R which will replace continuous characters.
   •   Move the cursor to the 'i' in s i n n e r .
   •   Press R
   •   Type a p p (the word now becomes 'dapper')
   •   Press < E s c > to switch back to normal mode.

   Command              Action

   r                    replace the current character

   R                    replace continuous characters


   The text should now look like this:
   Dapping means being determined about being determined and being passionate about
   being passionate.
   Be a dapper.
   Phew. We have covered a lot in this chapter, but I guarantee that this is the only step that is
   the hardest. Once you understand this, you've pretty much understood the heart and soul of
   how Vim works, and all other functionality in Vim, is just icing on the cake.
   To repeat, understanding how modes work and how switching between modes work is the
   key to becoming a Vimmer, so if you haven't digested the above examples yet, please feel
   free to read them again. Take all the time you need.
   If you want to read more specific details about these commands, see : h e l p i n s e r t i n g and
   :help replacing.


   Visual mode
   Suppose that you want to select a bunch of words and replace them completely with some
   new text that you want to write. What do you do?
   One way would be to use the mouse to click at the start of the text that you are interested
   in, hold down the left mouse button, drag the mouse till the end of the relevant text and
   then release the left mouse button. This seems like an awful lot of distraction.
   We could use the < D e l > or < B a c k s p a c e > keys to delete all the characters, but this seems
   even worse in efficiency.
   The most efficient way would be to position the cursor at the start of the text, press v to
   start the visual mode, use arrow keys or any text movement commands to the move to the
   end of the relevant text (for example, press 5 e to move to the end of the 5th word counted
   from the current cursor position) and then press c to 'c'hange the text. Notice the
   improvement in efficiency.
   In this particular operation (the c command), you'll be put into insert mode after it is over,
   so press < E s c > to return to normal mode.
   The v command works on a character basis. If you want to operate in terms of lines, use
   the upper case V .
Vim en:Modes                                                                                                                22


   Summary
   Here is a drawing of the relationship between the different modes:

                                  +---------+  i,I,a,A,o,O,r,R,s,S  +----------+
                                  | Normal  +---------->------------+ Insert   |
                                  | mode    |                       | mode     |
                                  |         +----------<------------+          |
                                  +-+---+---+                <Esc>                  +----------+
                                    |   |
                                    |   |
                                    |   |
                                       |   |
                                       |   |
                          v,V          V    ^ <Esc>
                                       |    |
                                       |    |
                                       |    |
                                       |    |
                             +   --   - ---+----+
                                       +
                             |    V   i ual
                                       s        |
                             |    m   o e
                                       d        |
                             +   --   - --------+
                                       -

                                                                                        [1]
   (This drawing was created using Vim and Dr.Chip's DrawIt plugin                            )
   See : h e l p v i m - m o d e s - i n t r o and : h e l p m o d e - s w i t c h i n g for details on the various modes
   and how to switch between them respectively.
   If you remain unconvinced about why the concept of modes is central to Vim's power and
   simplicity, do read the articles on "Why Vi" [2] and about the vi input model [3] on why it is a
   better way of editing.

   Previous Next


   External links
   [1] http:/ / vim. sourceforge. net/ scripts/ script. php?script_id=40
   [2] http:/ / www. viemu. com/ a-why-vi-vim. html
   [3] http:/ / blog. ngedit. com/ 2005/ 06/ 03/ the-vi-input-model/


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:Modes&oldid=1182
   Principal Authors: Swaroop, Karmadude
Vim en:Typing Skills                                                                                  23


   Vim en:Typing Skills
   Introduction
   We just learned about how to switch between the three basic modes in Vim. Isn't it hard to
   remember all those keys? How do you remember which key is for which operation? Well,
   that's the "key" question. The answer is that you shouldn't "remember", your fingers should
   automatically know what to do!. It must (literally) be on your finger tips.
   So how do we do that? By making it a habit. Walking is not a nature that humans have at
   birth, but after trying a bit and by habit, we learn to walk. Same with Vim, although it
   requires less effort.
   Vim was designed for people who are familiar with the keyboard. Why? Because we spend
   most of our time in editing tasks, which implicitly make extensive use of the keyboard, and
   the faster we are able to type, the faster we get the work done.
   Let's start with a basic technique to get you comfortable with the keyboard.


   Home Row Technique
   Place your fingers on the home row [1] of the keyboard by positioning your hands such that
   the fingers of your left hand are on the A S D F keys and the fingers of your right hand are on
   the J K L ; keys as shown in the drawing (artist unknown) [2].
   Getting your hands to be comfortable
   in this position is one of the most
   important steps in learning how to
   use the keyboard effectively. The
   idea is that you should be able to
   type any key using the finger that is
   closest to that key and then your
   finger should automatically come
   back to its original position. It might                    Hands on keyboard
   seem difficult at first but try it a
   couple of times and you will see that you will type much faster this way.
   Note that most keyboards have some home row markers on the F and J keys which serves
   as a reminder for you on where your fingers should be placed.
   Now, try typing the alphabets A-Z using the home row technique.
   Relatedly, there is also a free online typing tutorial [3] available that explains the basics of
   typing skills. I would encourage you to try it for just ten minutes and explore.
Vim en:Typing Skills                                                                               24


   Vim graphical keyboard cheat sheet
   If you want to know how each key
   can map to something useful in Vim,
   see this Vim graphical cheat sheet by
   'jng' [4].
   Although a lot of commands are
   listed, for now you only need to learn
   the basic 'hjkl' keys which translates
   to left, down, up, right keys
   respectively. You'll learn more about
   this in the next chapter.


   Summary
                                                                 vi/vim cheat sheet by viemu.com
   Notice that our efficiency in using
   Vim is directly proportional to the
   efficiency of using the keyboard.

   Previous Next


   External links
   [1]   http:/ / en. wikipedia. org/ wiki/ Home_row
   [2]   http:/ / www. bigpants. ca/ juggling/ images/ Controls_Keyboard_HomeRow. gif
   [3]   http:/ / www. typeonline. co. uk/ lesson1. html
   [4]   http:/ / www. viemu. com/ a_vi_vim_graphical_cheat_sheet_tutorial. html


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_ en:Typing_
   Skills&oldid=1237
   Principal Authors: Swaroop



   Vim en:Moving Around
   Introduction
   Once you've written the initial text, editing and rewriting requires a lot of movement
   between the various parts of the document. For example, you're writing a story and you
   suddenly get an idea for a new plot, but to develop this plot you need to go back to the part
   where the protagonist enters the new city (or something like that)... how do you quickly
   move around the text so that you don't lose your train of thought?
   Let's see a few examples of how Vim makes this fast.
   •   Want   to   move   the cursor to the next word? Press w .
   •   Want   to   move   to to the next paragraph? Press } .
   •   Want   to   move   to the 3rd occurrence of the letter 'h'? Press 3 f h .
   •   Want   to   move   35 lines downwards? Press 3 5 j .
Vim en:Moving Around                                                                                           25


   • After one of the above movements, want to jump back to the previous location? Press
     ctrl-o.
   • Want to learn how all these work? Let's dive in.
   First, open a file called c h a n d r a y a a n . t x t and type the following text (taken from Wikipedia
   [1]
       ):
        Chandrayaan-1 is India's first mission to the moon. Launched by India's national
        space agency the Indian Space Research Organisation (ISRO). The unmanned
        lunar exploration mission includes a lunar orbiter and an impactor. The
        spacecraft was launched by a modified version of the PSLV XL on 22 October
        2008 from Satish Dhawan Space Centre, Sriharikota, Andhra Pradesh at 06:23
        IST (00:52 UTC). The vehicle was successfully inserted into lunar orbit on 8
        November 2008. The Moon Impact Probe was successfully impacted at the lunar
        south pole at 20:31 hours on 14 November 2008.
        The remote sensing satellite had a mass of 1,380 kilograms (3,042 lb) at launch
        and 675 kilograms (1,488 lb) at lunar orbit and carries high resolution remote
        sensing equipment for visible, near infrared, and soft and hard X-ray frequencies.
        Over a two-year period, it is intended to survey the lunar surface to produce a
        complete map of its chemical characteristics and 3-dimensional topography. The
        polar regions are of special interest, as they might contain ice. The lunar mission
        carries five ISRO payloads and six payloads from other international space
        agencies including NASA, ESA, and the Bulgarian Aerospace Agency, which were
        carried free of cost.


   Move your cursor, the Vim way
   The most basic keys that you should use are the 'hjkl' keys. These 4 keys correspond to the
   left, down, up and right arrow keys respectively. Notice these keys are situated directly
   under your right hand when they are placed on the home row.
   But why not use the arrow keys themselves? The problem is that they are located in a
   separate location in the keyboard and it requires as much hand movement as it requires to
   use a mouse.
   Remember, that the right hand fingers should always be placed on j k l ; keys (and the
   thumb on the space bar). Now, let's see how to use these 4 keys:
Vim en:Moving Around                                                                                                       26




                   Using h,j,k,l instead of arrow keys


   h     You have to stretch your index finger (which is on 'j') to the left to press the 'h'. This is the left-most key
         and signifies going left.

   j     The drooping 'j' key signifies going down.

   k     The upward pointing 'k' key signifies going up.

   l     The right-most 'l' key signifies going right.


   Note that we can repeat the operation by prefixing a count. For example, 2 j will repeat the
   j operation 2 times.
   Open up the c h a n d r a y a a n . t x t text document and start practicing these keys:
   • Position your cursor at the first letter 'C' of the document.
   • Press 2 j and it should skip the current long line, the blank line and go to the second line
     i.e. second paragraph.
   • Press 2 k to get back to where we were. Or alternatively, press c t r l - o to jump back.
   • Press 5 l to move 5 characters to the right.
   • Press 5 h to move left by 5 characters. Or alternatively, press c t r l - o to jump back.
   Make it a habit to use the ' h j k l ' keys instead of the arrow keys. Within a few tries, you'll
   notice how much faster you can be using these keys.
   Similarly, there are more simple keys that replace the following special movements. Notice
   that this again is intended to reduce hand movement. In this particular case, people are
   prone to searching and hunting for these special keys, so we can avoid that altogether.

   Traditional                                                        Vim

   'home' key moves to the start of the line                          ^ key (think 'anchored to the start')

   'end' key moves to the end of the line                             $ key (think 'the buck stops here')

   'pgup' key moves one screen up                                     c t r l - b which means move one screen 'b'ackward

   'pgdn' key moves one screen down                                   c t r l - f which means move one screen 'f'orward


   If you know the absolute line number that you want to jump to, say line 50, press 5 0 G and
   Vim will jump to the 50th line. If no number is specified, G will take you to the last line of
   the file. How do you get to the top of the file? Simple, press 1 G . Notice how a single key can
   do so much.
Vim en:Moving Around                                                                            27


   •   Move the cursor to the first line by pressing 1 G .
   •   Move 20 characters to the right by pressing 2 0 l .
   •   Move back to the first character by pressing ^ .
   •   Jump to the last character by pressing $ .
   •   Press G to jump to the last line.
   What if you wanted to the middle of the text that is currently being shown in the window?
   • Press H to jump as 'h'igh as possible (first line of the window)
   • Press M to jump to the 'm'iddle of the window
   • Press L to jump as 'l'ow as possible (last line being displayed)
   You must have started to notice the emphasis on touch-typing and never having to move
   your hands off the main area. That's a good thing.


   Words, sentences, paragraphs
   We have seen how to move by characters and lines. But we tend to think of our text as
   words and how we put them together - sentences, paragraphs, sections, and so on. So, why
   not move across such text parts i.e. "text objects"?
   Let's take the first few words from our sample text:
         The polar regions are of special interest, as they might contain ice.
   First, let's position the cursor on the first character by pressing ^ .
         [T]he polar regions are of special interest, as they might contain ice.
   Note that we are using the square brackets to mark the cursor position.
   Want to move to the next 'w'ord? Press w . The cursor should now be at the 'p' in 'polar'.
         The [p]olar regions are of special interest, as they might contain ice.
   How about moving 2 words forward? Just add the prefix count to 'w': 2 w .
         The polar regions [a]re of special interest, as they might contain ice.
   Similarly, to move to the 'e'nd of the next word, press e .
         The polar regions ar[e] of special interest, as they might contain ice.
   To move one word 'b'ackward, press b . By prefixing a count, 2 b will go back by 2 words.
         The polar [r]egions are of special interest, as they might contain ice.
   See : h e l p w o r d - m o t i o n s for details.
   We have seen character motions and word motions, let's move on to sentences.
         [C]handrayaan-1 is India's first mission to the moon. Launched by India's national
         space agency the Indian Space Research Organisation (ISRO). The unmanned
         lunar exploration mission includes a lunar orbiter and an impactor. The
         spacecraft was launched by a modified version of the PSLV XL on 22 October
         2008 from Satish Dhawan Space Centre, Sriharikota, Andhra Pradesh at 06:23
         IST (00:52 UTC). The vehicle was successfully inserted into lunar orbit on 8
         November 2008. The Moon Impact Probe was successfully impacted at the lunar
         south pole at 20:31 hours on 14 November 2008.
   Position the cursor at the first character (^ ).
   To move to the next sentence, press ) .
Vim en:Moving Around                                                                                 28


         Chandrayaan-1 is India's first mission to the moon. [L]aunched by India's national
         space agency the Indian Space Research Organisation (ISRO). The unmanned
         lunar exploration mission includes a lunar orbiter and an impactor. The
         spacecraft was launched by a modified version of the PSLV XL on 22 October
         2008 from Satish Dhawan Space Centre, Sriharikota, Andhra Pradesh at 06:23
         IST (00:52 UTC). The vehicle was successfully inserted into lunar orbit on 8
         November 2008. The Moon Impact Probe was successfully impacted at the lunar
         south pole at 20:31 hours on 14 November 2008.
   Isn't that cool?
   To move to the previous sentence, press ( .
   Go ahead, try it out and see how fast you can move. Again, you can prefix a count such as
   3 ) to move forward by 3 sentences.
   Now, use the whole text and try out moving by paragraphs. Press } to move to the next
   paragraph and { to move to the previous paragraph.
   Notice that the 'bigger' brackets is for the bigger text object. If you had already noticed
   this, then congratulations, you have already started to think like a winner, err, "think like a
   Vimmer".
   Again, don't try to remember these keys, try to make it a habit such that your fingers
   naturally use these keys.
   See : h e l p c u r s o r - m o t i o n s for more details.


   Make your mark
   You are writing some text but you suddenly remember that you have to update a related
   section in the same document, but you do not want to forget where you are currently so
   that you can come back to this later. What do you do?
   Normally, this would mean scrolling to that section, update it, and then scroll back to where
   you were. This is a lot of overhead and we may tend to forget where we were last at.
   We can do things a bit smarter in Vim. Move the cursor to the 5th line in the following text
   (the words by John Lennon). Use m a to create a mark named 'a'. Move the cursor to
   wherever you want, for example 4 j .
         I am eagerly awaiting my next disappointment. —Ashleigh Brilliant
         Every man’s memory is his private literature. —Aldous Huxley
         Life is what happens to you while you’re busy making other plans. —John Lennon
         Life is really simple, but we insist on making it complicated. —Confucius
         Do not dwell in the past, do not dream of the future, concentrate the mind on the
         present moment. —Buddha
         The more decisions that you are forced to make alone, the more you are aware of
         your freedom to choose. —Thornton Wilder
   Press ' a (i.e. single quote followed by the name of the mark) and voila, Vim jumps (back) to
   the line where that mark was located.
   You can use any alphabet (a-zA-Z) to name a mark which means you can have up to 52
   named marks for each file.
Vim en:Moving Around                                                                                           29


   Jump around
   In the various movements that we have learned, we might often want to jump back to the
   previous location or to the next location after a movement. To do this, simply press c t r l - o
   to jump to the previous location and c t r l - i to jump forward to the next location again.


   Parts of the text
   There are various ways you can specify text objects in Vim so that you can pass them to a
   command. For example, you want to visually select a part of the text and then convert the
   case (from upper to lower or from lower to upper case) of the text using the ~ key.
   Open the d a p p i n g . t x t file that we created in previous chapters. Use the various keys to
   move to the first letter of the word 'dapper' in the second paragraph. Hint: Use } , j , w .
         Dapping means being determined about being determined and being passionate
         about being passionate.
         Be a dapper.
   Press v to start the visual mode, and press a p to select 'a' 'p'aragraph. Press ~ to flip the
   case of the text. If you want to cancel the selection, simply press < E s c > .
         Dapping means being determined about being determined and being passionate
         about being passionate.
         bE A DAPPER.
   Other text object mnemonics are a w which means 'a' 'w'ord, a " means a quoted string (like
   "this is a quoted string"), a b means 'a' 'b'lock which means anything within a pair of
   parentheses, and so on.
   See : h e l p o b j e c t - m o t i o n s and : h e l p t e x t - o b j e c t s for more details.


   Summary
   We have seen the rich number of methods that Vim gives us to move around the text. It is
   not important to remember each of these movements, it is more important to make them a
   habit whenever you can, especially the ones that are most relevant to you, and when they
   become a habit they reduce the movement of your hands, you become faster, and ultimately
   spend more time on thinking about your writing rather than on the software you use to
   write.
   See : h e l p v a r i o u s - m o t i o n s as well as : h e l p m o t i o n for more interesting ways of
   movement.

   Previous Next


   External links
   [1] http:/ / en. wikipedia. org/ wiki/ Chandrayaan-1


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_ en:Moving_
   Around&oldid=1027
   Principal Authors: Swaroop
Vim en:Help                                                                                                     30


   Vim en:Help
   Introduction
   Vim has such a diverse list of commands, keyboard shortcuts, buffers, and so on. It's
   impossible to remember how all of them work. In fact, it is not even useful to know all of
   them. The best situation is that you know how to look for certain functionality in Vim
   whenever you need it.
   For example, you want to avoid having to type a long name every time, you suddenly
   remember there is an abbreviations feature in Vim that'll help you do just that, but don't
   remember how to use it. What do you do?
   Let's look at the various ways of finding help about how to use Vim.


   The :help command
   The first and most important place to try to look for help is the built-in documentation and
   Vim has one of the most comprehensive user manuals that I've ever seen.
   In our case, just run : h e l p a b b r e v i a t i o n and you'll be taken to the help for
   a b b r e v i a t i o n s and you can read about how to use the : a b and : i a b commands.
   Sometimes, it can be as simple as that. If you don't know what you're looking for, then you
   can run : h e l p u s e r - m a n u a l and browse through the list of contents of the entire user
   manual and read the chapter that you feel is relevant to what you're trying to do.


   How to read the :help topic
   Let us take some sample text from : h e l p a b b r e v i a t e :

              :ab[breviate] [<expr>] {lhs} {rhs}
                          add abbreviation for {lhs} to {rhs}.                      If {lhs} already
                        existed it is replaced with the new {rhs}.                          {rhs} may
                        contain spaces.
        See |:map-<expr>| for the optional <expr> argument.

   Notice that there is a standard way of writing help in Vim to make it easy for us to figure
   out the parts that are needed for us instead of trying to understand the whole command.
   The first line explains the syntax i.e. how to use this command.
   The square brackets in : a b [ b r e v i a t e ] indicate that the latter part of the full name is
   optional. The minimum you have to type is : a b so that Vim recognizes the command. You
   can also use : a b b or : a b b r or : a b b r e and so on till the full name : a b b r e v i a t e . Most
   people tend to use the shortest form possible.
   The square brackets in [ < e x p r > ] again indicate that the 'expression' is optional.
   The curly brackets in { l h s } { r h s } indicate that these are placeholders for actual
   arguments to be supplied. The names are short for 'left hand side' and 'right hand side'
   respectively.
   Following the first line is an indented paragraph that briefly explains what this command
   does.
Vim en:Help                                                                                           31


   Notice the second paragraph which points you to further information. You can position the
   cursor on the text between the two pipe symbols and press c t r l - ] to follow the "link" to
   the corresponding : h e l p topic. To jump back, press c t r l - o .


   The :helpgrep command
   If you do not know what the name of the topic is, then you can search the entire
   documentation for a phrase by using : h e l p g r e p . Suppose you want to know how to look for
   the beginning of a word, then just run : h e l p g r e p b e g i n n i n g o f a w o r d .
   You can use : c n e x t and : c p r e v to move to the next and previous part of the
   documentation where that phrase occurs. Use : c l i s t to see the whole list of all the
   occurrences of the phrase.


   Quick help
   Copy the following text into a file in Vim and then also run it:

   :let &keywordprg=':help'

   Now, position your cursor anywhere on the word k e y w o r d p r g and just press K . You'll be
   taken to the help immediately for that word. This shortcut avoids having to type : h e l p
   keywordprg.


   Online forum and IRC
   If you are still not able to figure out what you want to do, then the next best thing is to
   approach other Vim users to help you out. Don't worry, this is actually very easy and it is
   amazing how other Vimmers who are willing to help you out.
   First step is to search the Vim mailing list to see if someone has already answered your
   question. Just go to the Vim Group search page [1] and then enter the keywords of your
   question. Most of the times, many common questions will be already answered since this is
   such a high-traffic mailing list i.e. lots and lots of people ask questions and give answers in
   this group.
   If you cannot find any relevant answer, then you can visit the Vim IRC forum. Open an IRC
   application such as XChat [2] (available for Windows, Linux, BSD) or Colloquy [3] (for Mac
   OS X), connect to the "FreeNode" network, join the #vim channel and politely ask your
   question and wait for a response. Most of the times, someone will reply in a few minutes.
   If nobody answers your question, probably they're all busy, so try again later or try to
   rephrase your question such that it makes it easy for someone to help you out. Otherwise,
   post a message in the mailing list mentioned above.


   Summary
   There is a wealth of information on how to do things using Vim, and many Vimmers would
   gladly help you out as well. The Vim community is one of the greatest strengths of the Vim
   editor, so make sure to use the resources and do join the growing community as well.
   The true delight is in the finding out rather than in the knowing.
   -- Isaac Asimov
Vim en:Help                                                                                                  32


   Previous Next


   External links
   [1] http:/ / tech. groups. yahoo. com/ group/ vim/ msearch_adv
   [2] http:/ / www. silverex. org/ download/
   [3] http:/ / colloquy. info/


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:Help&oldid=1229
   Principal Authors: Swaroop



   Vim en:Editing Basics
   Introduction
   Let's learn the basic editing commands in Vim for reading/writing files, cut/copy/paste,
   undo/redo and searching.


   Reading and writing files

   Buffers
   When you edit a file, Vim brings the text in the file on the hard disk to the computer's RAM.
   This means that a copy of the file is stored in the computer's memory and any changes you
   make is changed in the computer's memory and immediately displayed. Once you have
   finished editing the file, you can save the file which means that Vim writes back the text in
   the computer's memory to the file on the hard disk. The computer memory used here to
   store the text temporarily is referred to as a "buffer". Note that this same concept is the
   reason why we have to "save" files in all editors or word processors that we use.
   Now open up Vim, write the words H e l l o W o r l d and save it as the file h e l l o . t x t . If you
   need to remember how to do this, please refer to the First Steps chapter.


   Swap
   Now you will notice that another file has been created in the same directory as this file, the
   file would be named something like . h e l l o . t x t . s w p . Run the following command to find
   out the exact name of the file:

   :swapname



   What is this file? Vim maintains a backup of the buffer in a file which it saves regularly to
   the hard disk so that in case something goes wrong (like a computer crash or even Vim
   crashes), you have a backup of the changes you have made since you last saved the original
   file. This file is called a "swap file" because Vim keeps swapping the contents of the buffer
   in the computer memory with the contents of this file on the hard disk. See : h e l p
   s w a p - f i l e to know more details.
Vim en:Editing Basics                                                                             33


   Save my file
   Now that the file has been loaded, let's do a minor editing. Press the ~ key to change the
   case of the character on which the cursor is positioned. You will notice that Vim now marks
   the file having been changed (for example a + sign shows up in the title bar of the GUI
   version of Vim). You can open up the actual file in another editor and check that it has not
   changed yet i.e. Vim has only changed the buffer and not yet saved it to the hard disk.
   We can write back the buffer to the original file in the hard disk by running:

   :write

    Note
           To make saving easier, add the following line to your vimrc file:

   " To save, ctrl-s.
   nmap <c-s> :w<CR>
   imap <c-s> <Esc>:w<CR>a

   Now you can simply press c t r l - s to save the file.


   Working in my directory
   Vim starts up with your home directory as the default directory and all operations will be
   done within that directory.
   To open files located in other directories, you can use the full or relative paths such as:

   :e ../tmp/test.txt
   :e C:\\shopping\\monday.txt

   Or you can switch Vim to that directory:

   :cd ../tmp

   : c d is short for 'c'hange 'd'irectory.
   To find out the current directory where Vim is looking for files:

   :pwd

   : p w d is short for 'p'rint 'w'orking 'd'irectory.


   Cut, Copy and Paste
                                                                [1]
   As Sean Connery says, in the movie 'Finding Forrester'             :
           No thinking - that comes later. You must write your first draft with your heart.
           You rewrite with your head. The first key to writing is... to write, not to think!
   When we rewrite, we frequently rearrange the order of the paragraphs or sentences i.e. we
   need to be able to cut/copy/paste the text. In Vim, we use a slightly different terminology:

    desktop world                             vim world                            operation

    cut                                       delete                               d

    copy                                      yank                                 y
Vim en:Editing Basics                                                                              34


    paste                                       paste                          p


   In normal desktop terminology, 'cut'ting text means removing the text and putting it into
   the clipboard. The same operation in Vim means it deletes the text from the file buffer and
   stores it in a 'register' (a part of the computer's memory). Since we can choose the register
   where we can store the text, it is referred to as the "delete" operation.
   Similarly, in normal desktop terminology, 'copy' text means that a copy of the text is placed
   on the clipboard. Vim does the same, it "yanks" the text and places it in a register.
   "Paste" means the same in both terminologies.
   We have seen how you can do cut/copy/paste operations in Vim. But how do you specify
   which text that these operations should work on? Well, we have already explored that in the
   previous Text Objects section.
   Combining the operation notation and the text object notation means we have innumerable
   ways of manipulating the text. Let's see a few examples.
   Write this text in Vim (exactly as shown):

            This is the rthe first paragraph.
            This is the second line.


            This is the second paragraph.

   Place the cursor at the topmost leftmost position, by pressing 1 G and | that moves to the
   first line and the first column respectively.
   Let's see the first case: We have typed an extra 'r' which we have to remove. Press 3 w to
   move forward by 3 words.
   Now, we need to delete one character at the current cursor position.
   Note that there are two parts to this:

    Operation        Text Object/Motion

    Delete           One character at current cursor position

    d                l


   So, we have to just press d l and we delete one character! Notice that we can use l even
   though it is a motion.
   Now we notice that the whole word is redundant because we have "the" twice. Now think
   carefully on what should be fastest key combination to fix this?
   Take some time to think and figure this out for yourself. If not, please read on.

    Operation                      Text Object/Motion

    Delete                         Word

    d                              w


   So, press d w and you delete a word. Voila! So simple and so beautiful. The beauty is that
   such simple concepts can be combined to provide such a rich range of possibilities.
   How do we achieve the same operation for lines? Well, lines are considered special in Vim
   because lines are usually how we think about our text. As a shortcut, if you repeat the
Vim en:Editing Basics                                                                                35


   operation name twice, it will operate on the line. So, d d will delete the current line and y y
   will yank the current line.
   Our example text in Vim should now look like this:

           This is the first paragraph.
           This is the second line.

           This is the second paragraph.

   Go to the second line by pressing j . Now press d d and the line should be deleted. You
   should now see:

           This is the first paragraph.

           This is the second paragraph.

   Let's see a bigger case: How do we yank the current paragraph?

    Operation                  Text Object/Motion

    Yank                       Current paragraph

    y                          ap


   So, y a p will copy the current paragraph.
   Now that we have done copying the text, how do we paste it? Just 'p' it.
   You should now see:

           This is the first paragraph.
           This is the first paragraph.



           This is the second paragraph.

   Notice that the blank line is also copied when we do y a p , so p adds that extra blank line as
   well.
   There are two types of paste that can be done exactly like the two types of inserts we have
   seen before:

    p (lower case)                      paste after current cursor position

    P (upper case)                      paste before current cursor position


   Taking the idea further, we can combine these into more powerful ways.
   How to swap two characters? Press x p .
   • x → delete one character at current cursor position
   • p → paste after current cursor position
   How to swap two words? Press d w w P .
   • d → delete
   • w → one word
   • w → move to the next word
Vim en:Editing Basics                                                                                             36


   • P → paste before the current cursor position
   The important thing is not to learn these operations by rote. These combinations of
   operations and text objects/motions should be automatic for your fingers, without you
   needing to put in mental effort. This happens when you make using these a habit.


   Marking your territory
   You are writing, and you suddenly realize you have to change sentences in a previous
   section to support what you are writing in this section. The problem is that you have to
   remember where you are right now so that you can come back to it later. Can't Vim
   remember it for me? This can be achieved using marks.
   You can create a mark by pressing m followed by the name of the mark which is a single
   character from a - z A - Z . For example, pressing m a creates the mark called 'a'.
   Pressing ' a returns the cursor to line of the mark. Pressing ` a will take you to the exact
   line and column of the mark.
   The best part is that you can jump to this position using these marks any time thereafter.
   See : h e l p m a r k - m o t i o n s for more details.


   Time machine using undo/redo
   Suppose you are rewriting a paragraph but you end up muddling up what you were trying
   to rewrite and you want to go back what you had written earlier. This is where we can
   "undo" what we just did. If we want to change back again to what we have now, we can
   "redo" the changes that we have made. Note that a change means some change to the text,
   it does not take into account cursor movements and other things not directly related to the
   text.
   Suppose you have the text:
         I have coined a phrase for myself - 'CUT to the G':
         1. Concentrate
         2. Understand
         3. Think
         4. Get Things Done
         Step 4 is eventually what gets you moving, but Steps 2 and 3 are equally
         important. As Abraham Lincoln once said "If I had eight hours to chop down a
         tree, I'd spend six hours sharpening my axe." And to get to this stage, you need to
         do Step 1 which boils down to one thing - It's all in the mind. That's why it's so
         hard.
   Now, start editing the first line:
   1. Press S to 's'ubstitute the whole line.
   2. Type the text A f t e r m u c h t h o u g h t , I h a v e c o i n e d a n e w p h r a s e t o h e l p m e
     solidify my approach:.
   3. Press < e s c > .
   Now think about the change that we just did. Is the sentence better? Hmm, was the text
   better before? How do we switch back and forth?
   Press u to undo the last change and see what we had before. You will now see the text I
   h a v e c o i n e d a p h r a s e f o r m y s e l f - ' C U T t o t h e G ' : . To come back to the latest
Vim en:Editing Basics                                                                                              37


   change, press c t r l - r to now see the line A f t e r m u c h t h o u g h t , I h a v e c o i n e d a n e w
   phrase to help me solidify my approach:.
   It is important to note that Vim gives unlimited history of undo/redo changes, but it is
   usually limited by the u n d o l e v e l s setting in Vim and the amount of memory in your
   computer.
   Now, let's see some stuff that really shows off Vim's advanced undo/redo functionality,
   some thing that other editors will be jealous of: Vim is not only your editor, it also acts as a
   time machine.
   For example,

   :earlier 4m

   will take you back by 4 minutes i.e. the state of the text 4 minutes "earlier".
   The power here is that it is superior to all undoes and redoes. For example, if you make a
   change, then you undo it, and then continue editing, that change is actually never
   retrievable using simple u again. But it is possible in Vim using the : e a r l i e r command.
   You can also go forward in time:

   :later 45s

   which will take you later by 45 seconds.
   Or if you want the simpler approach of going back by 5 changes:

   :undo 5

   You can view the undo tree using:

   :undolist

   See : h e l p : u n d o l i s t for the explanation of the output from this command.
   See : h e l p u n d o - r e d o and : h e l p u s r _ 3 2 . t x t for more details.


   A powerful search engine but not a dotcom
   Vim has a powerful built-in search engine that you can use to find exactly what you are
   looking for. It takes a little getting used to the power it exposes, so let's get started.
   Let's come back to our familiar example:
         I have coined a phrase for myself - 'CUT to the G':
         1. Concentrate
         2. Understand
         3. Think
         4. Get Things Done
         Step 4 is eventually what gets you moving, but Steps 2 and 3 are equally
         important. As Abraham Lincoln once said "If I had eight hours to chop down a
         tree, I'd spend six hours sharpening my axe." And to get to this stage, you need to
         do Step 1 which boils down to one thing - It's all in the mind. That's why it's so
         hard.
Vim en:Editing Basics                                                                                     38


   Suppose we want to search for the word "Step". In normal mode, type / S t e p < c r > (i.e.
   / S t e p followed by enter key). This will take you to the first occurrence of those set of
   characters. Press n to take you to the 'n'ext occurrence and N to go in the opposite
   direction i.e. the previous occurrence.
   What if you knew only a part of the phrase or don't know the exact spelling? Wouldn't it be
   helpful if Vim could start searching as and when you type the search phrase? You can
   enable this by running:

   set incsearch

   You can also tell Vim to ignore the case (whether lower or upper case) of the text that you
   are searching for:

   set ignorecase

   Or you can use:

   set smartcase

   When you have s m a r t c a s e on:
   • If you are searching for / s t e p i.e. the text you enter is in lower case, then it will search
     for any combination of upper and lower case text. For example, this will match all the
     following four - "Step", "Stephen", "stepbrother", "misstep."
   • If you are searching for / S t e p i.e. the text you enter has an upper case, then it will
     search for ONLY text that matches the exact case. For example, it will match "Step" and
     "Stephen", but not "stepbrother" or "misstep."
    Note
        I recommend that you put these two lines in your vimrc file (explained later, but see
        : h e l p v i m r c - i n t r o for a quick introduction) so that this is enabled by default.
   Now that we have understood the basics of searching, let's explore the real power of
   searching. The first thing to note that what you provide Vim can not only be a simple
   phrase, it can be a "expression". An expression allows you to specify the 'kinds' of text to
   search for, not just the exact text to look.
   For example, you will notice that / s t e p will take you to s t e p s as well as s t e p and even
   f o o t s t e p if such a word is present. What if you wanted to look for the exact word s t e p and
   not when it is part of any other word? Then you can search using / \ < s t e p \ > . The \ < and
   \ > indicate the start and end positions of a "word" respectively.
   Similarly, what if you wanted to search for any number? Searching for / \ d will look for a
   'digit'. But a number is just a group of digits together. So we specify "one or more" digits
   together as / \ d \ + . If we were looking for zero or more characters, we can use the * instead
   of the + .
   There are a variety of such magic stuff we can use in our search patterns. See : h e l p
   p a t t e r n for details.
Vim en:Editing Basics                                                                                                         39


   Summary
   We have explored some of the basic editing commands that we will use in our everyday
   usage of Vim. It is very important that you go through these concepts again and make them
   a habit. It is not important to learn each and every option or nuances of these commands. If
   you know how to use the command and know how to find out more on it based on what you
   need, then you're a true Vimmer.
   Now, go ahead and start editing!

   Previous Next


   External links
   [1] http:/ / www. imdb. com/ title/ tt0181536/


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_ en:Editing_
   Basics&oldid=1236
   Principal Authors: Swaroop



   Vim en:Multiplicity
   Introduction
   In this chapter, let's explore how Vim helps us work between different parts of the file,
   different files, different 'windows' and different tabs to help us to handle more
   simultaneously. After all, an important part about good editing is managing files.


   Multiple Sections using Folds
   If you're editing a long document, wouldn't it be easier if you can "close" all sections of the
   document and focus on only one at a time?
   This is what we call "folding" in Vim.
   Let us take the example where your document is structured such that each level of the text
   is indented one level higher such as the following piece of text:

             Book I

                   The Shadow of the Past

                        T   h   ree Ri   ngs    f   or     the E   lven   -k    ing    s    unde    r the sky,
                        S   e   ven fo   r t   he     D   warf-l   ords     i   n  t   h   e r h
                                                                                            i       alls of stone,
                        N   i   ne for    Mo   rt   al     Men d   oome   d     to     d   i ,
                                                                                            e
                        O   n   e for    the    D   ar    k Lord    on    hi    s  d   a   rk  th   r   one
                        I   n    the L   and    o   f     Mordor    whe   re     th    e    Shad    o   ws lie.
                        O   n   e Ring    to    r   ul    e them    all   ,     One        R ng
                                                                                            i       t   o find them,
                        O   n   e Ring    to    b   ri    ng the   m al   l     and        in  th   e    darkness bind them
                        In the Land of Mordor where the Shadows lie.
Vim en:Multiplicity                                                                                                         40


                           Three is Company


                                     The Road goes ever on and on
                                     D   o   w   n f   r   om        the     d   o   or w   h   ere       i   t b   egan.
                                     N   o   w    fa   r     a   h   ead     t   h   e Ro   a   d h   a   s    go   ne,
                                     A   n   d    I    m   us    t    fo   ll    o   w, i   f    I    c   a   n,
                                     P   u   r   sui   n   g     i   t w   it    h    wea   r   y f   e   e   t,
                                     U   n   t   il    i   t     j   oin   s     s   ome    l   arg   e   r    wa   y,
                                     W   h   e   re    m   an    y    pa   th    s    and       err   a   n   ds    meet.
                                     And whither then? I cannot say.

    Note
                                                                                                [1]
         This text was retrieved from WikiQuote
   After writing this text, run : s e t f o l d m e t h o d = i n d e n t , position your cursor on the text you
   want to indent, press z c and see how the text folds up. Press z o to open the fold.
   Personally, I prefer a keyboard shortcut of using the spacebar for both opening and closing
   folds. To do that, add this to your vimrc file:
   Basic commands are z o and z c where we can open and close the fold respectively. You can
   use z a to 'a'lternate between opening and closing a fold respectively. You can make it even
   easier by using the space bar in normal mode to open and close a fold:

   :nnoremap <space> za

   Folding is a huge topic on its own with more ways of folding (manual, marker, expression)
   and various ways of opening and closing hierarchies of folds, and so on. See : h e l p
   f o l d i n g for details.


   Multiple Buffers
   Suppose you wanted to edit more than one file at a time using the same Vim, what do you
   do?
   Remember that files are loaded into buffers in Vim. Vim can also load multiple buffers at
   the same time. So, you can have multiple files open at the same time and you can keep
   switching between them.
   Let's say you have two files, p a r t 1 . t x t and p a r t 2 . t x t :
    part1.txt

               I have coined a phrase for myself - 'CUT to the G':

               1   .   C   o   n   centrate
               2   .   U   n   d   erstand
               3   .   T   h   i   nk
               4   .   G   e   t    Things Done

    part2.txt

         Step 4 is eventually what gets you moving, but Steps 2 and 3 are
         equally
Vim en:Multiplicity                                                                                            41


        i   m   porta   nt. As Abraham Lincoln once said "If I had eight hours to chop
        d   o   wn a
        t   r   ee, I   '   d spend six hours sharpening my axe." And to get to this stage,
        y   o   u nee   d
        t   o    do S   t   ep 1 which boils down to one thing - It's all in the mind.
        T   h   at's    w   hy
                  it'   s    so hard.

   Now, run : e p a r t 1 . t x t and then run : e p a r t 2 . t x t . Observe that you have the second file
   now open for editing. How do you switch back to the first file? In this particular case, you
   can just run : b 1 to switch to 'b'uffer number '1'. You can also run : e p a r t 1 . t x t to open
   the existing buffer into view.
   You can see what buffers has been loaded and correspondingly, which files are being edited
   by running : b u f f e r s or a shorter form, : l s which stands for 'l'i's't buffers.
   Buffers will be automatically removed when you close Vim, so you don't have to do anything
   special other than making sure you save your files. However, if you really want to remove a
   buffer, for example in order to use less memory, then you can use : b d 1 to 'd'elete the
   'b'uffer numbered '1', etc.
   See : h e l p b u f f e r - l i s t on the numerous things you can do with buffers.


   Multiple Windows
   We have seen how to edit multiple files at the same time, but what if we wanted to view two
   different files simultaneously. For example, you want to have two different chapters of your
   book open so that you can write the second chapter consistent with the
   wordings/description given in the first chapter. Or you want to copy/paste some stuff from
   the first file to the second file.
   In the last section, we used the same "view" to edit multiple buffers. Vim calls these "views"
   as windows. This term "window" should *not* be confused with your desktop application
   window which usually means the entire application itself. Just think of 'windows' as 'views'
   on different files.
   Let's take the same p a r t 1 . t x t and p a r t 2 . t x t sample files used in the previous section.
   First, load the part1.txt using : e p a r t 1 . t x t . Now, let's open a new buffer by splitting the
   window to create a new window - run : n e w . You should now be able to do any normal
   editing in the new buffer in the new window, except that you can't save the text because
   you haven't associated a file name with the buffer. For that, you can use : w t e s t . t x t to
   save the buffer.
Vim en:Multiplicity                                                                                       42


   How do you switch between these
   two windows? Just use c t r l - w
   < m o t i o n k e y > to switch between the
   windows. Motion keys can be one of
   h, j, k, l or even any of the arrow keys
   (in this example, only up and down
   keys make sense). Remember that
   c t r l - w operations work on
   'w'indows.

   As a quick shortcut, you can press
   ctrl-w twice i.e. c t r l - w c t r l - w to
   cycle between all the open windows.
   A particular situation where multiple
   windows are useful is when you want
   to view two different parts of the
   same file simultaneously. Just run
   : s p to create a 'sp'lit window and then you can scroll each window to a different position
   and continue your editing. Since they both are "windows" to the same buffer, changes in
   one window will be immediately reflected in the other window. You can also use c t r l - w s
   instead of : s p .

   To create a vertical split, use : v s p or c t r l - w v . To close a window, just run : q as usual.
   Now that we have seen how to open and use multiple windows, let's see how to further play
   around with the display.
   • Suppose you have two split windows but want to reverse the windows, so that you can
     focus your eyes on the bottom part or top part of your computer screen, as per your
     preference? Press c t r l - w r to 'r'otate the windows.
   • Want to move the current window to the topmost position? Press c t r l - w K .
   • Want to resize a window to make it smaller or larger? Run : r e s i z e 1 0 to make it 10
     lines long display, etc.
   • Want to make the current window as big as possible so that you can concentrate on it?
     Press c t r l - w _ . Think of the underscore as an indication that the other windows should
     be as small as possible.
   • Want to make the windows 'equal' in height again? Press c t r l - w = .
   See : h e l p w i n d o w s on more details on what you can do with windows.
Vim en:Multiplicity                                                                                      43


   Multiple Tabs
   If you use Firefox, you might have used the tabs feature which allows you to open multiple
   websites in a single Firefox window so that you can switch between them without having
   the headache of switching between multiple windows. Well, tabs work exactly the same way
   in Vim also. Except that they are called "tab pages."
   Run : t a b n e w to open a new tab with
   a new buffer (analogous to : n e w ).
   How do you switch between the
   tabs? By pressing g t to 'g'o to the
   next 't'ab and g T to 'g'o in the
   opposite direction i.e. the previous
   't'ab.

   I personally prefer to use the keys
   a l t - j and a l t - k for the same
   operations analogous to how the j
   and k keys work for characters and
   also c t r l - w j and c t r l - w k work
   for (horizontally split) windows. To
   enable this, add the following lines to
   your v i m r c file:

   " Shortcuts for moving between tabs.
   " Alt-j to move to the tab to the left
   noremap <A-j> gT
   " Alt-k to move to the tab to the right
   noremap <A-k> gt


   To 'c'lose a 'tab', run : t a b c or : q .
   You can even open text that opens in a new window to open in a new tab instead. For
   example, : h e l p t a b p a g e opens the help in a horizontally split window. To view it in a new
   tab instead, use : t a b h e l p t a b p a g e .
   If you want to reorder the tabs, use : t a b m o v e . For example, to move the current tab to the
   first position, use : t a b m o v e 0 and so on.
   See : h e l p t a b p a g e for more details on tab pages and the other operations that you can
   run, such as : t a b d o to operate on each of the tab pages which are open, and customizing
   the title of the tab pages (: h e l p s e t t i n g - g u i t a b l a b e l ), etc.


   Summary
   Vim provides a number of ways to edit multiple files at the same time - buffers, windows
   and tabs. Using these features depends on your personal habit. For example, using multiple
   tabs may obviate the usage of multiple windows. It's important to use the one which is most
   convenient and comfortable.

   Previous Next
Vim en:Multiplicity                                                                                                             44


   External links
   [1] http:/ / en. wikiquote. org/ wiki/ The_Fellowship_of_the_Ring


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:Multiplicity&oldid=1074
   Principal Authors: Swaroop



   Vim en:Personal Information
   Management
   Introduction
   A chapter on 'personal information management' (PIM) in a book on an editor software
   seems strange, doesn't it? Well, there are lots of "professional software" that claim to do
   personal information management, so let us explore why can't we use a plain text editor
   like Vim for this purpose?
   Personal information management is about organizing all your "information" - such as your
   todo lists, diary entries, your reference material (such as important phone numbers),
   scratchpad and so on. Putting all of this in one convenient location can be extremely handy,
   and we will explore this using Vim and a few plugins.
   I tend to think of a PIM system is best organized as a wiki. A wiki is a quick way to link
   together various documents which are inter-related but are independent in their own right.
   Unsurprisingly, the word 'wiki' means 'quick' in the Hawaiian language. Think of a website -
   there is a home page, and there are related pages to which you see links, and each page
   will have its own content but can also inter-link to other pages. Isn't this an easy way of
   organizing websites? What if you could do the same for your own personal information? See
   this LifeHack article titled 'Wikify Your Life: How to Organize Everything' [1] on some great
   examples on what you can do.
   But does this really require a specialized Wiki software? What if you could do the same in
   just plain text files using Vim? Let's dive in.


   Installing Viki
    Note
        The $vimfiles directory corresponds to ~ / . v i m on Linux/Mac, C : / D o c u m e n t s a n d
        S e t t i n g s / < y o u r - u s e r - n a m e > / v i m f i l e s on Windows and
        C : U s e r s / < y o u r - u s e r - n a m e > / v i m f i l e s on Windows Vista. See : h e l p v i m f i l e s for
        specific details.
   We're going to install Viki and its related plugins:
   1. Download multvals.vim [2] and store as $ v i m f i l e s / p l u g i n / m u l t v a l s . v i m
   2. Download genutils.zip [3] and unzip this file to $ v i m f i l e s
   3. Download Viki.zip [4] and unzip this file to $ v i m f i l e s (make sure all the folders and files
     under the 'Viki' folder name are stored directly in the $ v i m f i l e s folder)
Vim en:Personal Information Management                                                                                               45


   Get Started
   1. Open the GUI version of Vim
   2. :e test.txt
   3. :set filetype=viki
   4. Type the following text: [ [ h t t p : / / d e p l a t e . s o u r c e f o r g e . n e t / M a r k u p . h t m l ] [ V i k i
     syntax]]
   5. : w
   6. Position your cursor on the above text and press ctrl+enter, or alternatively press \ v f
   7. You should see a web browser open up with the above website page open
   Similarly, you can write down any file name (with a valid path) - whether it is a . d o c file or
   a . p d f file and then you can ctrl+enter to open the file in the corresponding Word or
   Acrobat Reader programs!
   The idea is that you can use plain text files to hold all your thinking together and you can
   ctrl+enter your way into everything else.
   Now, notice that we had to type the square brackets in pairs above to identify the target of
   the link and the words that describe the link. This is basically the syntax of the markup
   language which we will explore next.


   Markup language
                         [5]
   The Viki syntax             page (that you just opened in your web browser) explains how to write
   the text to allow Viki to syntax highlight portions of your text as well as how to do the
   linking between 'wiki pages' and even write Viki-specific comments.
   Learning the basics of the syntax highlighting is useful because you can visually see the
   parts of your text file. For example, use '* List of things to do' to make it a header, and then
   use dashes to create a list:

          * List of things to do

           - Finish the blog post on Brahmagiri trek
           - Fix footer bug on IONLAB website
           - Buy some blank CDs
           - Get motorbike serviced


   Disabling CamelCase
   Writing CamelCase can create a wiki link in Viki, but I personally dislike this. I prefer that
   only explicit links like [ [ C a m e l C a s e ] ] be allowed to avoid situations where I have
   genuinely used a name which uses camel case but I don't want it to be a link (for example,
   the word "JavaScript"). To disable camel-case syntax, : e d i t $ v i m f i l e s / p l u g i n / v i k i . v i m
   and change the following line (line number 120 as of this writing):

   if !exists("g:vikiNameTypes") | let g:vikiNameTypes = "csSeuix"
           | endif "{{{2

   to

         if !exists("g:vikiNameTypes")                                | let g:vikiNameTypes = "sSeuix"
             | endif "{{{2
Vim en:Personal Information Management                                                                                       46


   Notice that the 'c' is removed.


   Getting Things Done
   One of the major reasons for creating this 'viki' for myself is to maintain a 'Getting Things
   Done' system.
   Getting Things Done ("GTD") is a system devised by David Allen to help manage your 'stuff'
   - which could mean anything from your career plans to the list of chores you have to do
   today. A good introduction to GTD can be found on bnet.com [6].
   From David Allen's book:
         "Get everything out of your head. Make decisions about actions required on stuff
         when it shows up - not when it blows up. Organize reminders of your projects and
         the next actions on them in appropriate categories. Keep your system current,
         complete, and reviewed sufficiently to trust your intuitive choices about what
         you're doing (and not doing) at any time."
   The GTD system basically consists of organizing your information into certain
   pages/folders:
   1.   Collection Basket
   2.   Projects List
   3.   Next Actions
   4.   Calendar
   5.   Someday/Maybe
   6.   Reference Material
   7.   Waiting For
   I created a viki to match this system by using the following method:
   1. First, create a S t a r t P a g e which is literally the start page to your personal organization
   system (hereby referred to as simply "your viki").
   2. Then, create a list of main sections of your viki:

         * Getting Things Done

           1   .   [   [   C   o   l   l   e   c   t   ]   [   In Basket]]
           2   .   [   [   P   r   o   j   e   c   t   ]   [   Projects List]]
           3   .   [   [   N   e   x   t   A   c   t   i   o   ns][Next Actions]]
           4   .   [   [   C   a   l   e   n   d   a   r   ]   ]
           5. [[SomedayMaybe][Someday/Maybe]]
           6. [[Reference][Reference Material]]
           7. [[Waiting][Waiting For]]

   4. Similarly, go to as much depth as you want, for example creating a
   [ [ R e f e r e n c e . C a r e e r ] ] to jot down your career plans, and [ [ P r o j e c t . T o p S e c r e t ] ] to
   gather thoughts on your next project, and so on.
   5. Every time you want to jot down something, use the [ [ C o l l e c t ] ] page and then
   process, organize, review and finally actually d o your next-physical-actions.
   6. It takes a while to get accustomed to using this system, but once you are comfortable,
   you can achieve clarity of mind, confidence that you're taking care of all the factors in your
Vim en:Personal Information Management                                                                              47


   life, and most importantly, a sense of direction in knowing what are the important things in
   your life.
   Notice how we are managing an entire system using just plain text!


   Summary
   We have just explored how Vim can help you in creating a personal information
   management system for yourself. It's fascinating how we don't need a complicated software
   for such a system, just plain text files and Vim will do.
                                                                              [7]
   See Abhijit Nadgouda's article on using Vim as a personal wiki                   for an alternative way of
   achieving the same using built-in Vim functionality.

   Previous Next


   External links
   [1] http:/ / www. lifehack. org/ articles/ lifehack/
     wikify-your-life-how-to-organize-everything. html
   [2] http:/ / www. vim. org/ scripts/ script. php?script_id=171
   [3] http:/ / www. vim. org/ scripts/ script. php?script_id=197
   [4] http:/ / www. vim. org/ scripts/ script. php?script_id=861
   [5] http:/ / deplate. sourceforge. net/ Markup. html
   [6] http:/ / www. bnet. com/ 2403-13074_23-52958. html
   [7] http:/ / ifacethoughts. net/ 2008/ 05/ 02/ vim-as-a-personal-wiki/


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_ en:Personal_
   Information_ Management&oldid=1142
   Principal Authors: Swaroop, Fuzzymonk



   Vim en:Scripting
   Introduction
   If you want to customize any software, most likely you will change the various settings in
   the software to suit your taste and needs. What if you wanted to do more than that? For
   example, to check for conditions such as i f G U I v e r s i o n , t h e n u s e t h i s c o l o r s c h e m e
   e l s e u s e t h i s c o l o r s c h e m e ? This is where "scripting" comes in. Scripting basically means
   using a language where you can specify conditions and actions put together into 'scripts'.
   There are two approaches to scripting in Vim - using the built-in Vim scripting language, or
   using a full-fledged programming language such as Python or Perl which have access to the
   Vim internals via modules (provided that Vim has been compiled with these options
   enabled).
   This chapter requires some knowledge of programming. If you have no prior programming
   experience, you will still be able to understand although it might seem terse. If you wish to
   learn programming, please refer my other free book A Byte of Python.
Vim en:Scripting                                                                                        48


   There are two ways of creating reusable functionality in Vim - using macros and writing
   scripts.


   Macros
   Using macros, we can record sequences of commands and then replay it in different
   contexts.
   For example, suppose you had some text like this:

               t   a   n   s   en i   s th   e sin   g   e   r
               d   a   s   w   ant    is t   he pa   i   n   ter
               t   o   d   a   rmal    is    the f   i   n   ancial wizard
               a   b   u   l    faz   l is    the    h   i   storian
               b   i   r   b   al i   s th   e waz   i   r

   There are many things to correct here.
   1. Change the first letter of the sentence to upper case.
   2. Change 'is' to 'was'.
   3. Change 'the' to 'a'.
   4. End the sentence with "in Akbar's court."
   One way would be to use a series of substitute commands, such as : s / ^ \ \ w / \ \ u \ \ 0 / but
   this would require 4 substitution commands and it might not be simple if the substitute
   command changes parts of the text which we do not want to be changed.
   A better way would be to use macros.
   1.   Position your cursor on the first letter of the first line: t a n s e n i s t h e s i n g e r
   2.   Type q a in normal mode to start recording the macro named as a .
   3.   Type g U l to switch the first letter to upper case.
   4.   Type w to move to the next word.
   5.   Type c w to change the word.
   6.   Type w a s .
   7.   Press < E s c > .
   8. Type w to move to the next word.
   9. Type c w to change the word.
   10. Type a .
   11. Press < E s c > .
   12. Type A to insert text at the end of the line.
   13. Type i n A k b a r ' s c o u r t .
   14. Press < E s c > .
   15. Type q to stop recording the macro.
   That looks like a long procedure, but sometimes, this is much easier to do than cook up
   some complicated substitute commands!
   At the end of the procedure, the line should look like this:

               Tansen was a singer in Akbar's court.

   Great. Now, let's move on to apply this to the other lines. Just move to the first character of
   the second line and press @ a . Voila, the line should change to:
Vim en:Scripting                                                                                            49


             Daswant was a painter in Akbar's court.

   This demonstrates that macros can record complicated operations and can be easily
   replayed. This helps the user to replay complicated editing in multiple places. This is one
   type of reusing the manipulations you can do to the text. Next, we will see more formal
   ways of manipulating the text.
    Note
        If you want to simply repeat the last action and not a sequence of actions, you do not
        have to use macros, just press . (dot).


   Basics of Scripting
   Vim has a built-in scripting language using which you can write your own scripts to take
   decisions, "do" stuff, and manipulate the text.


   Actions
   How do you change the theme i.e. colors used by Vim? Just run:

   :colorscheme desert

   Here, I am using the 'desert' color scheme, which happens to be my favorite. You can view
   the other schemes available by typing : c o l o r s c h e m e and then pressing < t a b > key to cycle
   through the available schemes.
   What if you wanted to know how many characters are in the current line?

   :echo strlen(getline("."))

   Notice the names 'strlen' and 'getline'. These are "functions". Functions are pieces of
   scripts already written and have been given a name so that we can use them again and
   again. For example, the g e t l i n e function fetches a line and we are indicating which line by
   the . (dot) which means the current line. We are passing the result returned by the getline
   function to the s t r l e n function which counts the number of characters in the text and then
   we are passing the result returned by the strlen function to the : e c h o command which
   simply displays the result. Notice how the information flows in this command.
   The s t r l e n ( g e t l i n e ( " . " ) ) is called an expression. We can store the results of such
   expressions by using variables. Variables do what the name suggests - they are names
   pointing to values and the value can be anything i.e. it can vary. For example, we can store
   the length as:

   :let len = strlen(getline("."))
   :echo "We have" len "characters in this line."

   When you run this line on the second line above in this text, you will get the following
   output:

             We have 46 characters in this line.

   Notice how we can use variables in other 'expressions'. The possibilities of you can achieve
   with the help of these variables, expressions and commands are endless.
Vim en:Scripting                                                                                             50


   Vim has many types of variables available via prefixes such as $ for environment variables,
   & for options, and @ for registers:

   :echo $HOME
   :echo &filetype
   :echo @a

   See : h e l p f u n c t i o n - l i s t for a huge list of functions available.
   You can create your own functions as well:

   :functio   n C   urrentLineLength()
   :    let    le   n = strlen(getline("."))
   :    ret   urn     len
   :endfunc   tio   n

   Now position your cursor on any line and run the following command:

   :echo CurrentLineLength()



   You should see a number printed.
   Function names have to start with an upper case. This is to differentiate that built-in
   functions start with a lower case and user-defined functions start with an upper case.
   If you want to simply "call" a function to run but not display the contents, you can use
   :call CurrentLineLength()


   Decisions
   Suppose you want to display a different color schemes based on whether Vim is running in
   the terminal or is running as a GUI i.e. you need the script to take decisions. Then, you can
   use:

   :if    has("gui_running")
   :        colorscheme desert
   :els   e
   :        colorscheme darkblue
   :end   if

   How It Works:
   • h a s ( ) is a function which is used to determine if a specified feature is supported in Vim
     installed on the current computer. See : h e l p f e a t u r e - l i s t to see what kind of features
     are available in Vim.
   • The i f statement checks the given condition. If the condition is satisfied, we take certain
     actions. "Else", we take the alternative action.
   • Note that an i f statement should have a matching e n d i f .
   • There is e l s e i f also available, if you want to chain together multiple conditions and
     actions.
   The looping statements 'for' and 'while' are also available in Vim:
Vim en:Scripting                                                                                             51


   :let i = 0
   :while i < 5
   :    echo i
   :    let i += 1
   :endwhile

   Output:

              0
              1
              2
              3
              4

   Using Vim's built-in functions, the same can also be written as:

   :for i in range(5)
   :    echo i
   :endfor

   • r a n g e ( ) is a built-in function used to generate a range of numbers. See : h e l p r a n g e ( )
     for details.
   • The c o n t i n u e and b r e a k statements are also available.


   Data Structures
   Vim scripting also has support for lists and dictionaries. Using these, you can build up
   complicated data structures and programs.

   :let fruits = ['apple', 'mango', 'coconut']

   :echo fruits[0]
   " apple

   :echo len(fruits)
   " 3

   :call remove(fruits, 0)
   :echo fruits
   " ['mango', 'coconut']

   :call sort(fruits)
   :echo fruits
   " ['coconut', 'mango']

   :for fruit in fruits
   :   echo "I like" fruit
   :endfor
   " I like coconut
   " I like mango
Vim en:Scripting                                                                                             52


   There are many functions available - see 'List manipulation' and 'Dictionary manipulation'
   sections in : h e l p f u n c t i o n - l i s t .


   Writing a Vim script
   We will now write a Vim script that can be loaded into Vim and then we can call its
   functionality whenever required. This is different from writing the script inline and running
   immediately as we have done all along.
   Let us tackle a simple problem - how about capitalizing the first letter of each word in a
   selected range of lines? The use case is simple - When I write headings in a text document,
   they look better if they are capitalized, but I'm too lazy to do it myself. So, I can write the
   text in lower case, and then simply call the function to capitalize.
   We will start with the basic template script. Save the following script as the file
   capitalize.vim:

   " Vim global plugin for capitalizing first letter of each word
   "       in the current line.
   " Last Change: 2008-11-21 Fri 08:23 AM IST
   " Maintainer: www.swaroopch.com/contact/
   " License: www.opensource.org/licenses/bsd-license.php

   if exists("loaded_capitalize")
       finish
   endif
   let loaded_capitalize = 1

   " TODO : The real functionality goes in here.

   How It Works:
   • The first line of the file should be a comment explaining what the file is about.
   • There are 2-3 standard headers mentioned regarding the file such as 'Last Changed:'
     which explains how old the script is, the 'Maintainer:' info so that users of the script can
      contact the maintainer of the script regarding any problems or maybe even a note of
      thanks.
   • The 'License:' header is optional, but highly recommended. A Vim script or plugin that
     you write may be useful for many other people as well, so you can specify a license for
     the script. Consequently, other people can improve your work and that it will in turn
     benefit you as well.
   • A script may be loaded multiple times. For example, if you open two different files in the
     same Vim instance and both of them are . h t m l files, then Vim opens the HTML syntax
     highlighting script for both of the files. To avoid running the same script twice and
     redefining things twice, we use a safeguard by checking for existence of the name
     'loaded_capitalize' and closing if the script has been already loaded.
   Now, let us proceed to write the actual functionality.
   We can define a function to perform the transformation - capitalize the first letter of each
   word, so we can call the function as C a p i t a l i z e ( ) . Since the function is going to work on a
   range, we can specify that the function works on a range of lines.
Vim en:Scripting                                                                                                                                          53


   " Vim global plugin for capitalizing first letter of each word
   "          i   n    th       e cu      r   r   e   n   t    lin         e
   " Last C   h   a   nge       : 20      0   8   -   1   1   -21          Fri 08:23 AM IST
   " Mainta   i   n   er:        www      .   s   w   a   r   oopc         h.com/contact/
   " Licens   e   :    ww       w.op      e   n   s   o   u   rce.         org/licenses/bsd-license.php

   " Make sure we run only once
   if exists("loaded_capitalize")
       finish
   endif
   let loaded_capitalize = 1


   " Capitalize the first letter of each word
   function Capitalize() range
       for line_number in range(a:firstline, a:lastline)
           l      et        l   i   n   e_c   on      t   e   nt       =    g   e   t   lin   e(    l   i   ne   _   n   um   ber)
           "        L   u   c   k   i   ly,    t      h   e    V   i   m    m   a   n   ual     h   a   d    t   h   e    s   olution already!
           "        R   e   f   e   r    ":   he      l   p    s   %   "    a   n   d    se   e     '   E   xa   m   p   le   s' section
   let line_      co    n   t   e   n   t =    s      u   b   st   i   t   ut   e   (   lin   e_    c   o   nt   e   n   t,    "\\w\\+", "\\u\\0", "g")
           c      al    l       s   e   tli   ne      (   l   in   e   _   nu   m   b   er,     l   i   n   e_   c   o   nt   ent)
       endfo      r
   endfuncti      on

   How It Works:
   • The a : f i r s t l i n e and a : l a s t l i n e represent the arguments to the function with
     correspond to the start and end of the range of lines respectively.
   • We use a 'for' loop to process each line (fetched using g e t l i n e ( ) ) in the range.
   • We use the s u b s t i t u t e ( ) function to perform a regular expression search-and-replace
     on the string. Here we are specifying the function to look for words which is indicated by
     '\\w\\+' which means a word (i.e. a continuous set of characters that are part of words).
     Once such words are found, they are to be converted using \ \ u \ \ 0 - the \ \ u indicates
     that the first character following this sequence should be converted to upper case. The
     \ \ 0 indicates the match found by the substitute() function which corresponds to the
     words. In effect, we are converting the first letter of each word to upper case.
   • We call the s e t l i n e ( ) function to replace the line in Vim with the modified string.
   To run this command:
   1. Open Vim and enter some random text such as 'this is a test'.
   2. Run : s o u r c e c a p i t a l i z e . v i m - this 'sources' the file as if the commands were run in
     Vim inline as we have done before.
   3. Run : c a l l C a p i t a l i z e ( ) .
   4. The line should now read 'This Is A Test'.
   Running : c a l l C a p i t a l i z e ( ) every time appears to be tedious, so we can assign a
   keyboard shortcut using leaders:

   " Vim global plugin for capitalizing first letter of each word
   " in the current line
   " Last Change: 2008-11-21 Fri 08:23 AM IST
Vim en:Scripting                                                                                                                     54


   " Maintainer: www.swaroopch.com/contact/
   " License: www.opensource.org/licenses/bsd-license.php

   " Make sure we run only once
   if exists("loaded_capitalize")
       finish
   endif
   let loaded_capitalize = 1

   " Refer ':help using-<Plug>'
   if !hasmapto('<Plug>Capitalize')
       map <unique> <Leader>c <Plug>Capitalize
   endif
   noremap <unique> <script> <Plug>Capitalize <SID>Capitalize
   noremap <SID>Capitalize :call <SID>Capitalize()<CR>


   " Capitalize the first letter of each word
   function      s:Ca    p   i   t l a   ize(   ) r   a   nge
       for l     ine_    n   u   m e b   r in    ra   n   ge(   a   :firs   t   l   ine   ,    a   :l   ast   line)
            l    et l    i   n   e c _   onte   nt    =    ge   t   line(   l   i   ne_   n   um   be   r)
            "      Luc   k   i   l , y    the    Vi   m    ma   n   ual h   a   d    th   e    s   ol   uti   on already!
            "      Ref   e   r     : "   help    s%   "    an   d    see    '   E   xam   p   le   s'    se   ction
   let line_     cont    e   n   t =      sub   sti   t   ute   (   line_   c   o   nte   n   t,    "   \\w   \\+", "\\u\\0", "g")
            c    all     s   e   tli     ne(l   ine   _   num   b   er, l   i   n   e_c   o   nt   en   t)
       endfo     r
   endfuncti     on

   • We have changed the name of the function from simply 'Capitalize' to 's:Capitalize' - this
       is to indicate that the function is local to the script that it is defined in, and it shouldn't
       be available globally because we want to avoid interfering with other scripts.
   •   We use the m a p command to define a shortcut.
   •   The < L e a d e r > key is usually backslash.
   •   We are now mapping < L e a d e r > c (i.e. the leader key followed by the 'c' key) to some
       functionality.
   •   We are using < P l u g > C a p i t a l i z e to indicate the C a p i t a l i z e ( ) function described within
       a plugin i.e. our own script.
   •   Every script has an ID, which is indicated by < S I D > . So, we can map the command
       < S I D > C a p i t a l i z e to a call of the local function C a p i t a l i z e ( ) .
   So, now repeat the same steps mentioned previously to test this script, but you can now run
   \ \ c to capitalize the line(s) instead of running : c a l l C a p i t a l i z e ( ) .
   This last set of steps may seem complicated, but it just goes to show that there's a wealth of
   possibilities in creating Vim scripts and they can do complex stuff.
   If something does go wrong in your scripting, you can use v : e r r m s g to see the last error
   message which may give you clues to figure out what went wrong.
   Note that you can use : h e l p to find help on everything we have discussed above, from
   : h e l p \ \ w to : h e l p s e t l i n e ( ) .
Vim en:Scripting                                                                                             55


   Using external programming languages
   Many people would not like to spend the time in learning Vim's scripting language and may
   prefer to use a programming language they already know and write plugins for Vim in that
   language. This is possible because Vim supports writing plugins in Python, Perl, Ruby and
   many other languages.
   In this chapter, we will look at a simple plugin using the Python programming language, but
   we can easily use any other supported language as well.
   As mentioned earlier, if you are interested in learning the Python language, you might be
   interested in my other free book A Byte of Python
   First, we have to test if the support for the Python programming language is present.

   :echo has("python")

   If this returns 1, then we are good to go, otherwise you might want to install Python on your
   machine and try again.
   Suppose you are writing a blog post. A blogger usually wants to get as many people to read
   his/her blog as possible. One of the ways people find such blog posts is by querying a
   search engine. So, if you're going to write on a topic (say 'C V Raman', the famous Indian
   physicist who has won a Nobel Prize for his work on the scattering of light), you might want
   to use important phrases that helps more people find your blog when they search for this
   topic. For example, if people are searching for 'c v raman', they might also search for the
   'raman effect', so you may want to mention that in your blog post or article.
   How do we find such related phrases? It turns out that the solution is quite simple, thanks
   to Yahoo! Search.
   First, let us figure out how to use Python to access the current text, which we will use to
   generate the related phrases.

   "   Vim plu   g   in       for    l   o   o   k   i   ng       u   p p    opular search queries related
   "         t   o    t   h   e cu   r   r   e   n   t    l   i   n   e
   "   Last Up   d   at   e   d: 2   0   0   8   -   1   1-   2   1     Fr   i 08:36 AM IST
   "   Maintai   n   er   :    www   .   s   w   a   r   oo   p   c   h.c    om/contact/
   "   License   :    w   w   w.op   e   n   s   o   u   rc   e   .   org    /licenses/bsd-license.php

   " Make    sure we run only once
   if exi   sts("loaded_related")
       fi   nish
   endif
   let lo   aded_related = 1

   " Look up Yahoo Search and show results to the user
   function Related()
   python <<EOF

   import vim


   print 'Length of the current line is', len(vim.current.line)
Vim en:Scripting                                                                                                       56


   EOF
   endfunction

   The main approach to writing plugins in interfaced languages is same as that for the
   built-in scripting language.
   The key difference is that we have to pass on the code that we have written in the Python
   language to the Python interpreter. This is achieved by using the EOF as shown above - all
   the text from the p y t h o n < < E O F command to the subsequent E O F is passed to the Python
   interpreter.
   You can test this program, by opening Vim again separately and running : s o u r c e
   r e l a t e d . v i m , and then run : c a l l R e l a t e d ( ) . This should display something like L e n g t h
   of the current line is 54.
   Now, let us get down the actual functionality of the program. Yahoo! Search has something
   called a RelatedSuggestion query [1] which we can access using a web service. This web
   service can be accessed by using a Python API provided by Yahoo! Search pYsearch [2]:

   "   V   i   m p   l   ug   i   n    for    l   o   o   k   ing up popular search queries related
   "   t   o    th   e    c   u   r   rent    l   i   n   e
   "   L   a   st    U   pd   a   t   ed: 2   0   0   8   -   11-21 Fri 08:36 AM IST
   "   M   a   int   a   in   e   r   : www   .   s   w   a   roopch.com/contact/
   "   L   i   cen   s   e:       w   ww.op   e   n   s   o   urce.org/licenses/bsd-license.php

   " Make sure we run only once
   if exists("loaded_related")
       finish
   endif
   let loaded_related = 1

   " Look up Yahoo Search and show results to the user
   function Related()
   python <<EOF


   import vim
   from yahoo.search.web import RelatedSuggestion

   search = RelatedSuggestion(app_id='vimsearch', query=vim.current.line)
   results = search.parse_results()

   msg =         'Related popular searches are:\n'
   i = 1
   for r        esult in results:
       m        sg += '%d. %s\n' % (i, result)
       i         += 1
   print         msg


   EOF
   endfunction
Vim en:Scripting                                                                                                                             57


   Notice that we use the current line in Vim as the current text we are interested in, you can
   change this to any text that you want, such as the current word, etc.
   We use the y a h o o . s e a r c h . w e b . R e l a t e d S u g g e s t i o n class to query Yahoo! Search for
   phrases related to the query that we specify. We get back the results by calling
   p a r s e _ r e s u l t s ( ) on the result object. We then loop over the results and display it to the
   user.
   1.   Run : s o u r c e r e l a t e d . v i m
   2.   Type the text c v r a m a n .
   3.   Run : c a l l R e l a t e d ( )
   4.   The output should look something like this:

                 R   e   la   ted       po   p   u   lar    searches are:
                 1   .    r   ama   n    e   f   f   ect
                 2   .    c    v    r   am   a   n    in   dia
                 3   .    r   ama   n    r   e   s   ear   ch institute
                 4   .    c   han   d   ra   s   e   kha   ra venkata raman


   Summary
   We have explored scripting using the Vim's own scripting language as well as using
   external scripting/programming languages. This is important because the functionality of
   Vim can be extended in infinite ways.
   See : h e l p e v a l , : h e l p p y t h o n - c o m m a n d s , : h e l p p e r l - u s i n g and : h e l p r u b y - c o m m a n d s
   for details.

   Previous Next


   External links
   [1] http:/ / developer. yahoo. com/ search/ web/ V1/ relatedSuggestion. html
   [2] http:/ / pysearch. sourceforge. net


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:Scripting&oldid=1208
   Principal Authors: Swaroop



   Vim en:Plugins
   Introduction
   As we have seen in the previous chapter, we can write scripts to extend the existing
   functionality of Vim to do more stuff. We call these scripts which extend or add
   functionality as "plugins."
   There are various kinds of plugins that can be written:
   • vimrc
   • global plugin
   • filetype plugin
Vim en:Plugins                                                                                                                58


   • syntax highlighting plugin
   • compiler plugin
   Not only can you write your own plugins but also download and use plugins written by
   others [1].


   Customization using vimrc
   When I install a new Linux distribution or reinstall Windows, the first thing I do after
   installing Vim is fetch my latest v i m r c file from my backups, and then start using Vim. Why
   is this important? Because the v i m r c file contains various customizations/settings I like
   which makes Vim more useful and comfortable for me.
   There are two files you can create to customize Vim to your taste:
   1. vimrc - for general customizations
   2. gvimrc - for GUI specific customizations
   These are stored as:
   • % H O M E % / _ v i m r c and % H O M E % / _ g v i m r c on Windows
   • $ H O M E / . v i m r c and $ H O M E / . g v i m r c on Linux/BSD/Mac OS X
   See : h e l p v i m r c on the exact location on your system.
   These vimrc and gvimrc files can contain any Vim commands. The convention followed is to
   use only simple settings in the vimrc files, and advanced stuff are sourced from plugins.
   For example, here's a portion of my vimrc file:

   "    M   y    V   i   m   r   c    f    ile
   "    M   a   in   t   a   i   n   er    : www.swaroopch.com/contact/
   "    R   e   fe   r   e   n   c   e:     Initially based on
   h   tt   p   :/   /   d   e   v   .g    entoo.org/~ciaranm/docs/vim-guide/
   " License: www.opensource.org/licenses/bsd-license.php

   "    U   se Vim settings, rather then Vi settings (much better!).
   "    T   his must be first, because it changes other options as a side
   e   ff   ect.
   s   et    nocompatible

   " Enable syntax highlighting.
   syntax on

   " Automatically indent when adding a curly bracket, etc.
   set smartindent

   "    T   abs          s   h   ou    l   d    b   e con    v   e   rt   e   d    t   o    a    grou   p of 4 spaces.
   "    T   his          i   s     t   h   e    o   ffici    a   l    P   y   t   ho   n    c   onven   tion
   "    (   http         :   /   /w    w   w   .p   ython    .   o   rg   /   d   ev   /   pe   ps/pe   p-0008/)
   "    I    did         n   '   t     f   i   nd     a go   o   d    r   e   a   so   n    t   o not    use it everywhere.
   s   et    shi         f   t   wi    d   t   h=   4
   s   et    tab         s   t   op    =   4
   set expandtab
   set smarttab
Vim en:Plugins                                                                                                                                       59



   " Minimal number of screen lines to keep above and below the cursor.
   set scrolloff=999


   " Use UTF-8.
   set encoding=utf-8

   " Set               color scheme that I like.
   if has              ("gui_running")
        co             lorscheme desert
   else
        co             lorscheme darkblue
   endif

   " Status line
   set laststatus=2
   s   e   t   s   t   a   t   u   s   l   i   n   e   =
   s   e   t   s   t   a   t   u   s   l   i   n   e   +   =   %   -   3.3n\                        "   b   u   f   f   er n   umber
   s   e   t   s   t   a   t   u   s   l   i   n   e   +   =   %   f   \                            "   f   i   l   e   name
   s   e   t   s   t   a   t   u   s   l   i   n   e   +   =   %   h   %m%r%w                       "   s   t   a   t   us f   l   ags
   s   e   t   s   t   a   t   u   s   l   i   n   e   +   =   \   [   %{strlen(&ft)?&ft:'none'}]   "   f   i   l   e    typ   e
   s   e   t   s   t   a   t   u   s   l   i   n   e   +   =   %   =                                "   r   i   g   h   t al   i   gn    remainder
   s   e   t   s   t   a   t   u   s   l   i   n   e   +   =   0   x   %-8B                         "   c   h   a   r   acte   r    v   alue
   s   e   t   s   t   a   t   u   s   l   i   n   e   +   =   %   -   14(%l,%c%V%)                 "   l   i   n   e   , ch   a   ra   cter
   s   e   t   s   t   a   t   u   s   l   i   n   e   +   =   %   <   %P                           "   f   i   l   e    pos   i   ti   on


   " Show line number, cursor position.
   set ruler

   " Display incomplete commands.
   set showcmd


   " To insert timestamp, press F3.
   nmap <F3> a<C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR><Esc>
   imap <F3> <C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR>

   " To save, press ctrl-s.
   nmap <c-s> :w<CR>
   imap <c-s> <Esc>:w<CR>a

   " Search as you type.
   set incsearch

   " Ignore case when searching.
   set ignorecase

   " Show autocomplete menus.
Vim en:Plugins                                                                                                                 60


   set wildmenu


   " Show editing mode
   set showmode

   " Error bells are displayed visually.
   set visualbell

   Notice that these commands are not prefixed by colon. The colon is optional when writing
   scripts in files because it assumes they are normal mode commands.
   If you want to learn detailed usage of each setting mentioned above, refer : h e l p .
   A portion of my gvimrc file is:

   " Size of GVim window
   set lines=35 columns=99

   " Don't display the menu or toolbar. Just the screen.
   set guioptions-=m
   set guioptions-=T

   " Font. Very important.
   if has('win32') || has('win64')
       "       set guifont=Monaco:h16
   "
   http:   /   /je   f   f   m   i   l   n   e   r   .com/index.php/2005/07/30/windows-vista-fonts-now-available/
       s   e   t g   u   i   f   o   n   t   =   C   onsolas:h12:cANSI
   elsei   f    ha   s   (   '   u   n   i   x   '   )
       l   e   t &   g   u   i   f   o   n   t   =   "Monospace 10"
   endif

                                                                             [2]
   There are various examples vimrc files out there                                that you should definitely take a look at
   and learn the various kinds of customizations that can be done, then pick the ones you like
   and put it in your own vimrc.
   A few good ones that I have found in the past are:
   • vi-improved.org's vimrc [3]
   • Amir Salihefendic's vimrc [4]
   It is a known fact that a person's vimrc usually reflects how long that person has been using
   Vim.


   Global plugin
   Global plugins can be used to provide global/generic functionality.
   Global plugins can be stored in two places:
   1. $ V I M R U N T I M E / p l u g i n / for standard plugins supplied by Vim during its installation
   2. To install your own plugins or plugins that you have download from somewhere, you can
     use your own plugin directory:
     • $ H O M E / . v i m / p l u g i n / on Linux/BSD/Mac OS X
Vim en:Plugins                                                                                                                                                                                                   61


     • % H O M E % / v i m f i l e s / p l u g i n / on Windows
     • See : h e l p r u n t i m e p a t h for details on your plugin directories.
   Let's see how to use a plugin.
   A useful plugin to have is highlight_current_line.vim [5] by Ansuman Mohanty which does
   exactly as the name suggests. Download the latest version of the file
   h i g h l i g h t _ c u r r e n t _ l i n e . v i m and put it in your plugin directory (as mentioned above).
   Now, restart Vim and open any file. Notice how the current line is highlighted compared to
   the other lines in the file.
   But what if you don't like it? Just delete the h i g h l i g h t _ c u r r e n t _ l i n e . v i m file and restart
   Vim.
   Similarly, we can install our own r e l a t e d . v i m or c a p i t a l i z e . v i m from the Scripting
   chapter into our plugin directory, and this avoids us the trouble of having to use : s o u r c e
   every time. Ultimately, any kind of Vim plugin that you write should end up somewhere in
   your . v i m /v i m f i l e s plugin directory.


   Filetype plugin
   Filetype plugins are written to work on certain kinds of files. For example, programs
   written in the C programming language can have their own style of indentation, folding,
   syntax highlighting and even error display. These plugins are not general purpose, they
   work for these specific filetypes.


   Using a filetype plugin
   Let's try a filetype plugin for XML. XML is a declarative language that uses tags to describe
   the structure of the document itself. For example, if you have a text like this:

                Iron Gods
                ---------

         Ashok       Bank   er    's    next             book              i   m   medi          ately          f   o   l   l   ow   i   ng the                 Ra   maya      na    i   s    s   a   i   d to
         be a       n vel
                     o        t   en   tativ            ely t          i   t   l   ed "          Iron       G   o   d   s   "    s   c   hedule             d    t   o be       p   ub   l   is   h   e   d in
         2007.       A co   nt    em   porar            y nov          e   l   ,    it           is an          e   p   i   c    h   a   rd sci             e   nc   e fi      ct   io   n    s   t   o   ry
              a     b ut
                     o      a     wa   r bet            ween           t   h   e    god          s of       d   i   f   f   e   re   n   t fait             h   s.    Wea      ry    o   f    t   h   e
              c     o sta
                     n      nt     i   nfigh            ting           b   e   t   ween           reli      g   i   o   u   s    s   e   cts an             d    t   heir       d   ei   t   ie   s   ,    God
              (     a a A
                     k      ll    ah   , Yah            weh,           b   r   a   hman          , or       w   h   a   t   e   ve   r    one c             h   oo   ses       to    c   a   ll       t   he
              S     u rem
                     p      e     De   ity)             wishe          s       t   o de          stroy          c   r   e   a   ti   o   n alto             g   et   her.

                A repr      e   sen    t   at   i   o   n       of     pr      o   p   he    t   s    and    ho         l   y war            ri    o   r   s led          by    Gan      esa,           het
         ele   p ant-h
                h           e   ade    d    H   i   n   d   u     d   e t
                                                                       i       y   ,     r   a   n   doml   y p         i   cks a              s   a   m   ple o      f    m   orta      ls,          f vei
         of    w om ar
                h           e    th    e    m   a   i   n       pr    o a
                                                                       t       g   o   ni    s   t   s of    th         e    book            --    a   n    Amer      i   ca   n Ca      thol         i , c
                an Ind      i   an     H   in   d   u   ,       a     P k
                                                                       a       i   s   ta    n   i    Mus   lim         ,    a Ja            pa    n   e   se Bu      d   dh   ist,       and             a
         Jap   a ese S
                n           h   int    o    f   o   l   l   o   we    r.       T   h   e     m   o   rtal    sa         m   pling            ,     c   a   lled       a    '   Pali      mpse         s ' t
                is fer      r   ied        ab   o   a   r   d     a    va      s   t     D   y   s   on's    Sp         h   ere a            rt    i   f   act t      e   rm   ed T      he J         e el,
                                                                                                                                                                                                          w
         whi   ch is b      u   ilt        ar   o   u   n   d     t   he       s   u   n     i   t   self   , c         o   ntain            s     r   e   trans      p   la   nted       cit         i s e
         and landscapes brought from multiple parallel Earths and is the size
             of 12,000 Earths. It is also a spaceship travelling to the end of
             creation, where the Palimpsest is to present itself before God to
Vim en:Plugins                                                                                                                                                           62


            plead clemency for all creation.


        Meanwhile, it is upto the five protagonists, aided by Ganesa and a few
        concerned individuals, including Lucifer Morningstar, Ali Abu Tarab,
        King David and his son Solomon, and others, to bring about peace among
        the myriad warring faiths. The question is whether or not they can do
        so before the audience with God, and if they can do so peacefully--for
            pressure is mounting to wage one final War of Wars to end all war
            itself.

            (Excerpt taken from
        http://en.wikipedia.org/w/index.php?title=Ashok_Banker&oldid=86219280
            under the GNU Free Documentation License)

   It can be written in XML form (specifically, in 'DocBook XML' format) as:

   <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
           "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
   <article>

        <arti   c   l   e   i   n   f   o   >
            <   a   u   t   h   o   r   >   <firstname>Wikipedia Contributors</firstname></author>
            <   t   i   t   l   e   >   I   ron Gods</title>
        </art   i   c   l   e   i   n   f   o>

        <para>


            A   s   hok             B   an    ker     's    nex   t b   ook     i   m   medi   a t   ely f     ol      lowing             t   h   e R   ama    yana is
            s   a   id t            o     b   e  a     n   ovel    te   nta   ti    v   ely    t i   tled      "I      ron Go         d   s   "    sc   hed    uled to
            b   e    pub            l   is    hed      i   n 20   07.    A    co    n   temp   o r   ary n     ov      el, it             i   s    an     ep   ic hard
            s   c   ienc            e     f   ict     io   n st   ory    ab   ou    t    a w   a r    betw     ee      n the          g   o   d   s o   f
            d   i   ffer            e   nt     fa     it   hs.     We   ary     o   f    the     c   onsta     nt       infig         h   t   i   ng    bet    ween
            r   e   ligi            o   us     se     ct   s an   d t   hei   r     d   eiti   es    , God      (      aka Al         l   a   h   , Y   ahw    eh,
            b   r   ahma            n   ,     or      wh   atev   er    one     c   h   oose   s     to ca     ll       the S         u   p   r   eme     De   ity)
            w   i   shes                to     de     st   roy    cre   ati   on        alto   ge    ther.

        </para>

        <para>

            A       r   ep      r   e   s   ent   a   t   ion    of pro   p   h   et    s and       h   oly    w   a   r   ri   o   rs le         d b   y     Ganesa,
            t   h   e    e      l   e   p   han   t   -   hea   ded Hin   d   u    d    eity,       r   and   om   l   y    p   i   cks a          sa   m   ple of
            m   o   r   ta      l   s   ,    fi   v   e    of    whom a   r   e    t    he ma      in    pr   ot   a   g   on   i   sts o         f t   h   e
            b   o   o   k-      -   a   n    Am   e   r   ica   n Catho   l   i   c,     an I      nd   ian    H   i   n   du   ,    a Pa         kis   t   ani
            M   u   s   li      m   ,       a J   a   p   ane   se Budd   h   i   st    , and       a    Ja   pa   n   e   se       Shint         o f   o   llower.
            The mortal sampling, called a 'Palimpsest' is ferried aboard a
            vast Dyson's Sphere artifact termed The Jewel, which is built
            around the sun itself, contains retransplanted cities and
Vim en:Plugins                                                                                                                                                                  63


                l   a   n   dsc   apes    b   r   ough   t    from             m   u   lt   iple       p   ar   al      l   e   l    E   a   rths and is the
                s   i   z   e o   f 12   ,0   0   0 Ea   r   ths.              I   t    i   s al      so    a    s      p   a   c   es   h   ip travelling to
                t   h   e    en   d of    c   r   eati   o   n, wh            er   e    t   he P      al   im   ps      e   s   t    i   s    to present itself
                b   e   f   ore    God    t   o    ple   a   d cle            me   n   cy    for       a   ll    c      r   e   a   ti   o   n.

         </para>

         <para>

                Meanwhile, it is upto the five protagonists, aided by Ganesa
                a   n   d    a    few c   onc      erne      d       in   dividu            a   ls   , inc      l   u   di      n   g Luci      fer
                M   o   r   ni   n star
                                  g       , A      li A      b   u    T   arab,             K   in   g Dav      i   d    a      n   d his       son    S   o   lom   o   n,
                a   n   d    o   t ers,
                                  h        to       bri      n   g    a   bout p            e   ac   e amo      n   g    t      h   e myri      ad w   a   r   rin   g
                f   a   i   th   s. The    qu      esti      o   n    i   s whet            h   er    or n      o   t    t      h   ey can       do    s   o    be   f   ore
                t   h   e    a   u ienc
                                  d       e w      ith       G   o   d,    and i            f    t   hey c      a   n    d      o    so pe      acef   u   l   ly-   -   for
                p   r   e   ss   u e is
                                  r        mo      unti      n   g    t   o wage                on   e fin      a   l    W      a   r of W      ars    t   o    en   d    all
                war itself.

         </para>

         <sidebar>
             <para>

                             (Excerpt taken from
   http://en.wikipedia.org/w/index.php?title=Ashok_Banker&amp;oldid=86219280
               under the GNU Free Documentation License)

             </para>
         </sidebar>

   </article>

   Notice how the structure of the document is more explicit in the XML version. This makes it
   easier for the tools to convert the XML into other kinds of formats including PDF and print
   versions. The downside is that writing in XML is more difficult for the human who writes it.
   So let's see how ftplugins can help a Vim user who writes XML.
                                                                                   [6]
   1. First, download the xmledit ftplugin                                               and put it in your ~ / . v i m / f t p l u g i n / directory.
   2. Add the following line to your ~ / . v i m r c :

   autocmd BufNewFile,BufRead *.xml source ~/.vim/ftplugin/xml.vim

   (Make sure to specify the correct directory as per your operating system)
   This enables the xmledit ftplugin everytime you open a file with extension . x m l .
   3. Open Vim and edit a file called t e s t . x m l .
   4. Type < a r t i c l e .
   5. Now, type the ending > , and see how the xmledit ftplugin adds the closing tag
   automatically for you. So, your document should now look like:
Vim en:Plugins                                                                                                                   64


   <article></article>

   6. Now, type another > and see how the tag expands so that you can enter more tags. The
   document should now look like this:

          <article>

          </article>

   7. You'll notice the cursor is also indented, so that you can write the document in a neatly
   structured way to reflect the structure of the document.
   8. Repeat the process until you have written the full document.
   Notice how a special ftplugin for XML makes it much easier for you to write XML
   documents. This is what ftplugins are usually designed for.


   Writing a filetype plugin
   Let us try to write our own ftplugin.
   In our previous example of using the xmledit.vim ftplugin and writing in the XML format,
   we saw that we had to write some standard header information at the top for every
   DocBook XML file (which is the specific format we used). Why not make this automatic in
   Vim via the use of a ftplugin?
   Our xml ftplugin basically needs to add the following information at the top of a 'new' XML
   file:

   <?xml version="1.0"?>
   <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
             "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">

   So, let's put our new ftplugin, say called 'xmlheader.vim' to work only on 'BufNewFile'
   event. So, add the following to your ~ / . v i m r c :

   autocmd BufNewFile *.xml source ~/.vim/ftplugin/xmlheader.vim

   Now, all we need to do in the xmlheader.vim is to set the first and second lines of the file:

   "    Vim    plu   gin    t   o    a   d   d    XML    hea   d   e   r    inf   orm   a   t   ion to a new XML file
   c   all    setl   ine(   1   ,    '   <   ?   xml    vers   i   o   n   ="1.   0"?   >   '   )
   c   all    setl   ine(   2   ,    '   <   !   DOCT   YPE    a   r   t   icle    PU   B   L   IC "-//OASIS//DTD DocBook XML
   V   4.5/   /EN"    "ht   t   p   :/   /   w   ww.o   asis   -   o   p   en.o   rg/   d   o   cbook/xml/4.5/docbookx.dtd">')

   So, now restart Vim, ensure that 'test.xml' file doesn't already exist, and run : e t e s t . x m l .
   You will see that the header is already filled in!
Vim en:Plugins                                                                                                                          65


   Syntax scheme
   We just wrote a DocBook XML file in the previous section. It would have been helpful if
   there was some color-coding for the XML file for valid DocBook tags to make sure we're
   writing it correctly. It turns out that this is possible if we just run : s e t
   f i l e t y p e = d o c b k x m l . What happens is that Vim uses the syntax file located in
   $VIMRUNTIME/syntax/docbkxml.vim.
   The syntax file defines how the parts of the file relate to each other. For example, the
   syntax file for XML defines what tags are and what colors should be given to tag names,
   etc.


   Using a syntax scheme
   Let us see a syntax file in action. Download the mkd.vim [7] script which is a syntax file for
   the Markdown syntax [8]. Markdown is basically a format in which plain text can be written
   so that the format can be converted to HTML later.
   1. Open a new file in Vim called 'test_markdown.txt'.
   2. Run : s e t s y n t a x = m k d
   3. Type the following text in the file:

                     # Bengaluru

        The name **Bangalore** is an anglicised version of the city's name in
            the Kannada language, Bengaluru.


                     >    A popular anecdote (although one contradicted by historical
        >    e   v   i   dence) recounts that the 11th-century Hoysala king Veera
        B   al   l   a   la
        >    I   I   ,    while on a hunting expedition, lost his way in the forest.
        T   ir   e   d
        >    a   n   d    h   u   n   g   r   y   , h   e    cam   e acr   os    s    a    p   o   or old woman who served him boiled
                     >    b   e   a   n   s   .    Th   e    gra   teful     k   i   ng    n   a   med the place _"benda kaal-ooru"_
                     >    (   l   i   t   e   r   all   y   , "t   own o   f     b   oi   le   d    beans"), which was eventually
                     >    c   o   l   l   o   q   uia   l   ised    to "   Be    n   ga   lu   r   u".

                     ***


            (This information has been retrieved from
        [Wikipedia](http://en.wikipedia.org/wiki/Bangalore) under the GNU Free
            Documentation License.)

   4. Notice how different parts of the file such as the heading and emphasized words are
   automatically highlighted. This should hopefully make writing in Markdown syntax easier.
Vim en:Plugins                                                                                                                 66


   Writing a syntax scheme
                                                                                                          [9]
   Let us now try to write a syntax file of our own for the AmiFormat                                           text format.
   Syntax highlighting basically revolves around two steps - first is to define the kind of text
   format we are looking for and the second is to describe how it is to be displayed.
   For example, suppose we want to find all instances of < b > a n y w o r d < / b > to be displayed in
   bold. First, we need to match such a pattern in our text and then link the name of this
   pattern to the kind of display needed:

   :syntax match ourBold /<b>.*<\/b>/
   :highlight default ourBold term=bold cterm=bold gui=bold

   The first line says that we are creating a new type of syntax based on matching a pattern,
   with name 'ourBold' and the regex pattern as specified above.
   The second line says that we want to highlight the 'ourBold' syntax. The scheme we are
   specifying is the default scheme which means it can be overridden by the user or by other
   color schemes. We can specify three different ways of representing 'ourBold' for the three
   different kinds of displays that Vim can run in - black and white terminals, color terminals
   and the GUI (graphical version).
   Sometimes we want to specify some task in our text as a todo item and we usually write it
   in caps 'TODO', but if we want to make it stand out further?

   :syntax keyword ourTodo TODO FIXME XXX
   :hi def link ourTodo Todo

   First, we define that 'ourTodo' consists of keywords - these are plain simple words that
   need to be highlighted, and we link this pattern group 'ourTodo' to a pre-existing group
   called 'Todo' in Vim. There are many such pre-existing groups in Vim which have
   predefined color schemes. It is best to link our syntax styles to the existing groups. See
   : h e l p g r o u p - n a m e for a list of the groups available.
   Next, we can have specific blocks of code in the group enclosed in [ c o d e ] . . [ / c o d e ] , so
   how do we highlight this?

   :syn region amiCode excludenl start=/\[code\]/ end=/\[\/code\]/
   :hi def link amiCode Identifier

   First, we specify that we are defining a region of text that has a start pattern and end
   pattern (which is very simple in our case), and then link it to the pre-existing 'Identifier'
   class.
   Similarly, we can proceed to add definitions to other parts of the text as defined in the
   AmiFormat reference [10], and the final script can look something like this:

   "   V   i   m    synt   ax    file for AmiFormat
   "   L   a   n   guage   : A   miFormat
   "   V   e   r   sion:    1
   "   L   a   s   t Cha   nge   : 2   0   0   6   -   1   2   -   2   8    Thu
   "   M   a   i   ntain   er:    ww   w   .   s   w   a   r   o   o   p   ch.com/contact/
   "   L   i   c   ense:    ww   w.o   p   e   n   s   o   u   r   c   e   .org/licenses/bsd-license.php
   "   R   e   f   erenc   e:    htt   p   :   /   /   o   r   a   n   g   oo.com/labs/AmiNation/AmiFormat/
Vim en:Plugins                                                                       67



   """""""""" Initial Checks """"""""""""""""""""""""""""""""""""""""""""


   " To be       c   o   mp   at   i   ble with Vim 5.8. See `:help 44.12`
   if vers   i   o   n    <    6   0   0
       syn   t   a   x    c   le   a   r
   elseif    e   x   i   st   s(   "   b:current_syntax")
       " Q   u   i   t    w   he   n     a (custom) syntax file was already loaded
       fin   i   s   h
   endif

   """""""""" Patterns """"""""""""""""""""""""""""""""""""""""""""""""""

   " Emphasis
   syn match amiItalic /<i>.\{-}<\/i>/
   syn match amiBold /<b>.\{-}<\/b>/


   " Todo
   syn keyword amiTodo TODO FIXME XXX

   " Headings
   syn match amiHeading /^h[1-6]\.\s\+.\{-}$/

   " Lists
   syn match amiList /^\s*\*\s\+/
   syn match amiList /^\s*\d\+\.\s\+/


   " Classes
   syn match amiClass /^\s*%(\w\+).*%/
   syn match amiClass /^\s*%{.*}.*%/

   " Code
   syn region amiCode excludenl start=/\[code\]/ end=/\[\/code\]/

   " HTML
   syn region amiEscape excludenl start=/\[escape\]/ end=/\[\/escape\]/

   " Link
   syn match amiLink /".\{-}":(.\{-})/

   " Image
   syn match amiImage /!.\{-}(.\{-})!/

   """""""""" Highlighting """"""""""""""""""""""""""""""""""""""""""""""


   hi def amiItalic term=italic cterm=italic gui=italic
   hi def amiBold term=bold cterm=bold gui=bold
Vim en:Plugins                                                                                                                              68



   hi def link amiHeading Title
   hi def link amiTodo Todo
   hi def link amiList PreProc
   hi def link amiClass Statement
   hi def link amiCode Identifier
   hi def link amiEscape Comment
   hi def link amiLink String
   hi def link amiImage String

   """""""""" Finish """"""""""""""""""""""""""""""""""""""""""""""""""""

   " Set syntax name
   let b:current_syntax = "amifmt"

   Now that the script actually works, I've uploaded it to the Vim scripts section [11] already as
   I wrote this! Now anyone in the world can use the AmiFormat syntax highlighting in Vim.
   To learn more about syntax highlighting scripts in Vim, refer:
   •   :   h   e   l   p   s   y   n   t   a   x
   •   :   h   e   l   p   u   s   r   _   4   4   .   t   x   t
   •   :   h   e   l   p   g   r   o   u   p   -   n   a   m   e
   •   :   h   e   l   p   p   a   t   t   e   r   n   -   o   verview
   •   :   h   e   l   p   m   y   s   y   n   t   a   x   f   ile
   •   :   h   e   l   p   n   e   w   -   f   i   l   e   t   ype
    Note
               If you want to redraw the screen in case the syntax file is causing the display to be
               improper, press C T R L - L .
    Note
               You might have already guessed that when we have previously set the f i l e t y p e , Vim
               in turn automatically sets the s y n t a x to the same name also.


   Compiler plugin
   Compiler plugins are used for compiling programs written in different languages. It is
   useful anywhere a transformation is required from a source plain text language to a
   different format, even if you are writing a plain text file in Markdown want to convert the
   text to HTML using a transformation program.
   Let us explore the use of a compiler plugin for Python.
                                                                         [12]
   1. Download the compiler/python.vim                                          script and put it in your ~ / . v i m / c o m p i l e r /
   directory.
   2. Put the following line in your ~ / . v i m r c :

   autocmd BufNewFile,BufRead *.py compiler python

   3. Restart Vim and open a Python file, say t e s t . p y and enter the following program:
Vim en:Plugins                                                                                                              69


   #!python
   print 'Hello World'

   4. Run : m a k e and you should see successful compilation.
   5. Let us intentionally introduce an error in the program by changing the spelling of 'print'
   to 'pritn':

   pritn 'Hello World'

   Now run : m a k e and notice that the error is displayed and Vim automatically moves the
   cursor to the error line!
   6. Run : c l i s t to see the full list of errors.
   7. After fixing an error, you can run : c n e x t to move to the next error.
   If you open up the c o m p i l e r / p y t h o n . v i m script that we downloaded, you will notice that it
   is very simple - there are only two variables defined - one is m a k e p r g which defines how to
   'make' the file i.e. how to compile it and the second is e r r o r f o r m a t which defines the form
   of the error output of the compiler.
                                                                [13]
   I've written a compiler plugin for Adobe Flex                       using the same two variables.
   See : h e l p w r i t e - c o m p i l e r - p l u g i n and : h e l p q u i c k f i x for details on how to write your
   own compiler plugin.


   Homework : Write a global plugin
   In order to exercise your newly acquired plugin-writing skills, here's an exercise for you to
   try out:
         Write a plugin that deletes duplicate lines and deletes redundant blank lines in
         the document.
   You can use either Vim's scripting language or any of the other languages that have an
   interface with Vim.
                                                         [14]
   If you need "inspiration", see this Vim Tip                  .
   How about another one?
         Write a script to fetch the meaning and related words for the current word under
         the cursor.
                                                                                [15]
   Again, if you need "inspiration", see my lookup.vim plugin                          .


   Disabling plugins
   Suppose you find Vim acting weirdly and suspect a plugin to be the cause, then you can
   allow Vim to do selective initialization using the - u command line argument.
   For example, v i m - u N O N E will start up Vim without any initialization scripts being run.
   This is pure raw Vim running. Use v i m - u y o u r - m i n i m a l - i n i t i a l i z a t i o n . v i m to run only
   the specific initializations that you need. This option is useful for debugging if any problems
   you are facing are present in Vim or have been introduced by a plugin, etc.
   See : h e l p - u and : h e l p s t a r t i n g for details.
Vim en:Plugins                                                                                   70


   Summary
   We have seen the various kinds of plugins available for Vim, how to use such plugins and
   how to write such plugins. We now have some idea of how extensible Vim is, and how we
   can write plugins to make our life easier.

   Previous Next


   External links
   [1]   http:/ / www. vim. org/ scripts/ index. php
   [2]   http:/ / dotfiles. org/ . vimrc
   [3]   http:/ / www. vi-improved. org/ vimrc. php
   [4]   http:/ / amix. dk/ vim/ vimrc. html
   [5]   http:/ / www. vim. org/ scripts/ script. php?script_id=1652
   [6] http:/ / www. vim. org/ scripts/ script. php?script_id=301
   [7] http:/ / www. vim. org/ scripts/ script. php?script_id=1242
   [8] http:/ / daringfireball. net/ projects/ markdown/
   [9] http:/ / orangoo. com/ labs/ AmiNation/ AmiFormat/
   [10] http:/ / orangoo. com/ labs/ AmiNation/ AmiFormat/ online%20reference/
   [11] http:/ / www. vim. org/ scripts/ script. php?script_id=1745
   [12] http:/ / www. vim. org/ scripts/ script. php?script_id=1439
   [13] http:/ / www. vim. org/ scripts/ script. php?script_id=1746
   [14] http:/ / vim. wikia. com/ wiki/ Remove_unwanted_empty_lines
   [15] http:/ / www. vim. org/ scripts/ script. php?script_id=2001


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:Plugins&oldid=1241
   Principal Authors: Swaroop



   Vim en:Programmers Editor
   Introduction
   Vim tends to be heavily used by programmers. The features, ease of use and flexibility that
   Vim provides makes it a good choice for people who write a lot of code. This should not
   seem surprising since writing code involves a lot of editing.
   Let me reiterate that typing skills is critical for a programmer. If our earlier discussion
   didn't convince you, hope this article by Jeff Atwood on 'We Are Typists First, Programmers
   Second' [1] will convince you.
   If you do not have programming experience, you can skip this chapter.
   For those who love programming, let's dive in and see Vim can help you in writing code.
Vim en:Programmers Editor                                                                                     71


   Simple stuff
   The simplest feature of Vim that you can utilize to help you in writing code is to use syntax
   highlighting. This allows you to visualize i.e. "see" your code which helps you in reading and
   writing your code faster and also helps avoid making obvious mistakes.


   Syntax highlighting
   Suppose you are editing a vim syntax
   file, run : s e t f i l e t y p e = v i m and see
   how Vim adds color. Similarly, if you
   are editing a Python file, run : s e t
   filetype=python.
   To see the list of language types
   available, check the
   $ V I M R U N T I M E / s y n t a x / directory.
    Tip
          If you want the power of syntax
          highlighting for any Unix shell
          output, just pipe it to Vim, for
          example s v n d i f f | v i m - R - .
          Notice the dash in the end
          which tells Vim that it should read text from its standard input.


   Smart indentation
   An experienced programmer's code is usually indented properly which makes the code look
   "uniform" and the structure of the code is more visually apparent. Vim can help by doing
   the indentation for you so that you can concentrate on the actual code.
   If you indent a particular line and want the lines following it to be also indented to the same
   level, then you can use the : s e t a u t o i n d e n t setting.
   If you start a new block of statements and want the next line to be automatically indented
   to the next level, then you can use the : s e t s m a r t i n d e n t setting. Note that the behavior of
   this setting is dependent on the particular programming language being used.


   Bounce
   If the programming language of your choice uses curly brackets to demarcate blocks of
   statements, place your cursor on one of the curly brackets, and press the % key to jump to
   the corresponding curly bracket. This bounce key allows you to jump between the start and
   end of a block quickly.


   Shell commands
   You can run a shell command from within Vim using the : ! command.
   For example, if the d a t e command is available on your operating system, run : ! d a t e and
   you should see the current date and time printed out.
   This is useful in situations where you want to check something with the file system, for
   example, quickly checking what files are in the current directory using : ! l s or : ! d i r and
Vim en:Programmers Editor                                                                                     72


   so on.
   If you want access to a full-fledged shell, run : s h .
   We can use this facility to run external filters for the text being edited. For example, if you
   have a bunch of lines that you want to sort, then you can run : % ! s o r t , this passes the
   current text to the s o r t command in the shell and then the output of that command
   replaces the current content of the file.


   Jumping around
   There are many ways of jumping around the code.
   • Position your cursor on a filename in the code and then press g f to open the file.
   • Position your cursor on a variable name and press g d to move the local definition of the
     variable name. g D achieves the same for the global declaration by searching from the
     start of the file.
   • Use ]]
   to move to the next { in the first column. There are many similar motions - see : h e l p
   o b j e c t - m o t i o n s for details.
   • See : h e l p 2 9 . 3 , : h e l p 2 9 . 4 , and : h e l p 2 9 . 5 for more such commands. For example,
     [ I will display all lines that contain they keyword under the cursor!


   Browsing parts of the code

   File system
   Use : V e x or : S e x to browse the file system within Vim and subsequently open the required
   files.


   ctags
   We have now seen how to achieve simple movements within the same file, but what if we
   wanted to move between different files and have cross-references between files? Then, we
   can use tags to achieve this.
   For simple browsing of the file, we can use the t a g l i s t . v i m plugin.
                                          [2]
   1. Install the Exuberant ctags
     program.
                                 [3]
   2. Install the taglist.vim          plugin.
     Refer the "install details" on the
     script page.
   3. Run : T l i s t T o g g l e to open the
     taglist window. Voila, now you can
     browse through parts of your
     program such as macros, typedefs,
     variables and functions.
   4. You can use : t a g f o o to jump to                              Taglist in action
     the definition of f o o .
   5. Position your cursor on any symbol and press c t r l - ] to jump to the definition of that
     symbol.
Vim en:Programmers Editor                                                                                          73


     • Press c t r l - t to return to the previous code you were reading.
   6. Use c t r l - w ] to jump to the definition of the symbol in a split window.
   7. Use : t n e x t , : t p r e v , : t f i r s t , : t l a s t to move between matching tags.
   Note that exuberant Ctags supports 33 programming languages as of this writing, and it
   can easily be extended for other languages.
   See : h e l p t a g l i s t - i n t r o for details.


   cscope
   To be able to jump to definitions across files, we need a program like cscope. However, as
   the name suggests, this particular program works only for the C programming language.
   1. Install cscope. Refer : h e l p
       c s c o p e - i n f o and : h e l p
       c s c o p e - w i n 3 2 regarding
       installation.
                                        [4]
   2. Copy cscope_maps.vim                    to your
       ~ / . v i m / p l u g i n / directory.
   3. Switch to your source code
       directory and run c s c o p e - R - b
       to 'b'uild the database 'r'ecursively
       for all subdirectories.
   4. Restart Vim and open a source
       code file.
                                                                             cscope in action
   5. Run : c s c o p e s h o w to confirm
       that there is a cscope connection
       created.
   6. Run : c s c o p e f i n d s y m b o l f o o to locate the symbol f o o . You can shorten this
       command to : c s f s f o o .
   You can also:
   •   Find   this definition - : c s f g
   •   Find   functions called by this function - : c s f d
   •   Find   functions calling this function - : c s f c
   •   Find   this text string - : c s f t
   •   Find   this egrep pattern - : c s f e
   See : h e l p c s c o p e - s u g g e s t i o n s for suggested usage of cscope with Vim.
   Also, the Source Code Obedience [5] plugin is worth checking out as it provides easy
   shortcut keys on top of cscope/ctags.
                                                                                       [6]
   While we are on the subject of C programming language, the c.vim                          plugin can be quite
   handy.
Vim en:Programmers Editor                                                                                           74


   Compiling
   We have already seen in the previous chapter regarding : m a k e for the programs we are
   writing, so we won't repeat it here.


   Easy writing

   Omnicompletion
   One of the most-requested features which was added in Vim 7 is "omnicompletion" where
   the text can be auto-completed based on the current context. For example, if you are using
   a long variable name and you are using the name repeatedly, you can use a keyboard
   shortcut to ask Vim to auto-complete and it'll figure out the rest.
   Vim accomplishes this via ftplugins, specifically the ones by the name
   f t p l u g i n / < l a n g u a g e > c o m p l e t e . v i m such as p y t h o n c o m p l e t e . v i m .
   Let's start the example with a simple Python program:

   def hello():
       print 'hello world'


   def helpme():
       print 'help yourself'

   After typing this program, start a
   new line in the same file, type 'he'
   and press c t r l - x c t r l - o which will
   show you suggestions for the
   autocompletion.
   If you get an error like E 7 6 4 :
   Option 'omnifunc' is not set,
   then run : r u n t i m e !
   a u t o l o a d / p y t h o n c o m p l e t e . v i m to
   load the omnicompletion plugin.
   To avoid doing this every time, you
   can add the following line to your
   ~/.vimrc:
                                                                                        Omni-completion in action
   autocmd FileType python runtime! autoload/pythoncomplete.vim


   Vim automatically uses the first suggestion, you can change to the next or previous
   selection using c t r l - n and c t r l - p respectively.
   In case you want to abort using the omnicompletion, simply press e s c .
   Refer : h e l p n e w - o m n i - c o m p l e t i o n for details on what languages are supported (C, HTML,
   JavaScript, PHP, Python, Ruby, SQL, XML, ...) as well as how to create your own
   omnicompletion scripts.
    Note
Vim en:Programmers Editor                                                                                                      75


         If you are more comfortable in using the arrow keys to select your choice from the
         omnicompletion list, see Vim Tip 1228 [7] on how to enable that.
   I prefer to use a simple c t r l - s p a c e instead of the unwieldy c t r l - x c t r l - o key
   combination. To achieve this, put this in your v i m r c :

   imap <c-space> <c-x><c-o>

                                          [8]
   Relatedly, the PySmell plugin                may be of help to Vim users who code in Python.


   Using Snippets
   Code snippets are small pieces of code that you repetitively tend to write. Like all good lazy
   programmers, you can use a plugin that helps you to do that. In our case, we use the
   amazing SnippetsEmu plugin.
   1. Download the snippetsEmu [9] plugin.
   2. Create your ~ / . v i m / a f t e r / directory if it doesn't already exist.
   3. Start Vim by providing this plugin name on the command line. For example, start Vim as
     gvim snippy_bundles.vba
   4. Run : s o u r c e % . The 'vimball' will now unpack and store the many files in the
     appropriate directories.
   5. Repeat the same process for s n i p p y _ p l u g i n . v b a
   Now, let's try using this plugin.
   1. Open a new file called, say, t e s t . p y .
   2. Press the keys d , e , f and then < t a b > .
   3. Voila! See, how snippetsEmu has created a structure of your function already. You should
   now see this in your file:

   def <   {   fname}>(<{args}>):
       "   "   "
       <   {   }>
       <   {   args}>"""
        <{pass}>
        <{}>

    Note
         In case you see d e f < t a b > and nothing else happened, then perhaps the snippets
         plugin is not loaded. Run : r u n t i m e ! f t p l u g i n / p y t h o n _ s n i p p e t s . v i m and see if that
         helps.
   4. Your cursor is now positioned on the function name i.e. f n a m e .
   5. Type the function name, say, t e s t .
   6. Press < t a b > and the cursor is automatically moved to the arguments. Tab again to move
   to the next item to be filled.
   7. Now enter a comment: J u s t s a y H i
   8. Tab again and type p r i n t ' H e l l o W o r l d '
   9. Press tab
   10. Your program is complete!
Vim en:Programmers Editor                                                                                                       76


   You should now see:

   def t   e   st():
       "   "   "
       J   u   st say Hi
       "   "   "
       p   r   int 'Hello World'

   The best part is that SnippetsEmu enables a standard convention to be followed and that
   nobody in the team 'forgets' it.


   Creating Snippets
   Let's now see how to create our own snippets.
   Let us consider the case where I tend to repeatedly write the following kind of code in
   ActionScript3:

   private var _foo:Object;


   public function get foo():Object
   {
       return _foo;
   }

   public function set foo(value:Object)
   {
       _foo = value;
   }

   This is a simple getter/setter combination using a backing variable. The problem is that's an
   awful lot of boilerplate code to write repeatedly. Let's see how to automate this.
   The SnippetsEmu language snippets plugins assume s t as the start tag and e t as the end
   tag - these are the same arrow-type symbols you see in-between which we enter our code.
   Let's start with a simple example.

   exec "Snippet pubfun public function
   ".st.et.":".st.et."<CR>{<CR>".st.et."<CR>}<CR>"

   Add the above line to your ~ / . v i m / a f t e r / f t p l u g i n / a c t i o n s c r i p t _ s n i p p e t s . v i m .
   Now open a new file, say, t e s t . a s and then type p u b f u n and press < t a b > and see it
   expanded to:

   public function <{}>:<{}>
   {

   }

   The cursor will be positioned for the function name, tab to enter the return type of the
   function, tab again to type the body of the function.
Vim en:Programmers Editor                                                                                                                                                       77


   Going back to our original problem, here's what I came up with:

   e   x   e   c       "   S   n   ip   p   e   t g   e   t   s   e   t    pri   v   a   t   e    var    _".   s   t."   n   a   m   e   "   .   et.   ";<CR><CR>public
   f   u   n   c   t   i   o   n    g   e   t    ".   s   t   .   "   n   ame"   .   e   t   .   "():   ".st   .   "ty   p   e   "   .   e   t   ."<   CR>{<CR><tab>return
   _   "   .   s   t   .   "   n   am   e   "   .et   .   "   ;   <   C   R>}<   C   R   >   <   CR>p   ubli   c    fu   n   c   t   i   o   n    se   t
   "   .   s   t   .   "   n   a   me   "   .   et.   "   (   v   a   l   ue:"   .   s   t   .   "typ   e".e   t   .")   <   C   R   >   {   <   CR>   <tab>_".st."name".et."
   =       v   a   l   u   e   ;   <C   R   >   }<C   R   >   "

       Note
                   All snippets for this plugin must be entered on a single line. It is a technical limitation.
   Follow the same procedure above to use this new snippet:
   1. Add this line to your ~ / . v i m / a f t e r / f t p l u g i n / a c t i o n s c r i p t _ s n i p p e t s . v i m .
   2. Open a new file such as t e s t . a s .
   3. Type g e t s e t and press < t a b > and you will see this:

   private var _<{name}>;


   public function get <{name}>():<{type}>
   {
           return _<{name}>;
   }

   public function set <{name}>(value:<{type}>)
   {
           _<{name}> = value;
   }

   4. Type c o l o r and press < t a b > . Notice that the variable name c o l o r is replaced
   everywhere.
   5. Type N u m b e r and press < t a b > . The code now looks like this:

   private var _color;

   public function get color():Number
   {
           return _color;
   }

   public function set color(value:Number)
   {
                                   _color = value;
   }

   Notice how much of keystrokes we have reduced! We have replaced writing around 11 lines
   of repetitive code by a single Vim script line.
   We can keep adding such snippets to make coding more lazier and will help us concentrate
   on the real work in the software.
Vim en:Programmers Editor                                                                                          78


   See : h e l p s n i p p e t s _ e m u . t x t for more details (this help file will be available only after
   you install the plugin).


   IDE
   Vim can be actually used as an IDE with the help of a few plugins.


   Project plugin
   The Project plugin is used to create a Project-manager kind of usage to Vim.
   1.   Download the project [10] plugin.
   2.   Unarchive it to your ~ / . v i m / directory.
   3.   Run : h e l p t a g s ~ / . v i m / d o c / .
   4.   Download Vim source code from http:/ / www. vim. org/ subversion. php
   5.   Run : P r o j e c t . A sidebar will open up in the left which will act as your 'project window'.
   6.   Run \ \ c (backslash followed by 'c')
   7.   Give answers for the following options
     • Name of entry, say 'vim7_src'
     • Directory, say C : \ \ r e p o \ \ v i m 7 \ \ s r c \ \
     • CD option, same as directory above
     • Filter option, say * . h * . c
   8. You will see the sidebar filled up with the list of files that match the filter in the specified
     directory.
   9. Use the arrow keys or j /k keys to move up and down the list of files, and press the enter
     key to open the file in the main window.
   This gives you the familiar IDE-kind of interface, the good thing is that there are no fancy
   configuration files or crufty path setups in IDEs which usually have issues always. The
   Project plugin's functionality is simple and straightforward.
   You can use the standard fold commands to open and close the projects and their details.
   You can also run scripts at the start and end of using a project, this helps you to setup the
   PATH or set compiler options and so on.
   See : h e l p p r o j e c t . t x t for more details.


   Running code from the text
                                                                                               [11]
   You can run code directly from Vim using plugins such as EvalSelection.vim                         or simpler
   plugins like inc-python.vim [12].


   SCM integration
   If you start editing a file, you can even make it automatically checked out from Perforce
   using the perforce plugin [13]. Similarly, there is a CVS/SVN/SVK/Git integration plugin [14].


   More
   To explore more plugins to implement IDE-like behavior in Vim, see:
                                                           [15]
   • Vim Tip: Using vim as an IDE all in one
                                                 [16]
   • C++/Python Vim+IDE plugins list
Vim en:Programmers Editor                                                                                                         79


   There are more language-specific plugins that can help you do nifty things. For example, for
   Python, the following plugins can be helpful:
   • SuperTab [17] allows you to call omni-completion by just pressing tab and then use arrow
     keys to choose the option.
   • python_calltips [18] shows a window at the bottom which gives you the list of possibilities
     for completion. The cool thing about this compared to omni-completion is that you get to
     view the documentation for each of the possibilities.
   • VimPdb [19] helps you to debug Python programs from within Vim.


   Writing your own plugins
   You can write your own plugins to extend Vim in any way that you want. For example,
   here's a task that you can take on:
                Write a Vim plugin that takes the current word and opens a browser with the
                documentation for that particular word (the word can be a function name or a
                class name, etc.).
   If you really can't think of how to approach this, take a look at "Online documentation for
   word under cursor" tip at the Vim Tips wiki [20].
   I have extended the same tip and made it more generic:

   "    A   d   d    t   h   e    f    o   llowing lines to your ~/.vimrc to enable online
   d   oc   u   m   en   t   a   ti    o   n
   "    I   n   s   pi   r   a   ti    o   n:
   h   tt   p   :   //   v   i   m.    w   ikia.com/wiki/Online_documentation_for_word_under_cursor

   function Browser()
       if has("win32") || has("win64")
   let s:           ob   r       wser = "C:\\Program Files\\Mozilla Firefox\\firefox.exe
   -new-t           "a   b
       el           is   e       f     h   a   s(   "w      i   n   3   2un   i   x")    "     Cyg   win
   let s:           ob   r       w   se    r    =    "      '   /   c   ygd   r   ive/   c   /Pro    gram\ Files/Mozilla\
   Firefo           fx   /       i   re    f   ox   .e      x   e   '    -n   e   w-ta   b   "
       el           is   e       f     h   a   s(   "m      a   c   "   ) |   |    has   (   "mac    unix") || has("unix")
                    l            e   t     s   :b   ro      w   s   e   r =       "fir   e   fox     -new-tab"
                endif

       return s:browser
   endfunction

   function Ru                         n(c      o   m   m   a   n   d)
       if has(                         "wi      n   3   2   "   )    |   | has      ("   wi    n64")
           let                          s:      s   t   a   r   t   Co   mmand       =     "   !start"
           let                          s:      e   n   d   C   o   mm   and =       "   "
       elseif                          has      (   "   m   a   c   ")    || h      as   ("    macunix") " TODO Untested on Mac
           let                          s:      s   t   a   r   t   Co   mmand       =     "   !open -a"
           let                          s:      e   n   d   C   o   mm   and =       "   "
                elseif has("unix") || has("win32unix")
                    let s:startCommand = "!"
Vim en:Programmers Editor                                                                                                            80


                       let s:endCommand = "&"
       else
           echo "Don't know how to handle this OS!"
           finish
       endif


   let s:      c   m   d    = "silent " . s:startCommand . " " . a:command . " " .
   s:endC      o   m   m   and
       "       e   c   h   o s:cmd
       ex      e   c   u   te s:cmd
   endfun      c   t   i   on

   function OnlineDoc()
       if &filetype == "viki"
           " Dictionary
   let s   :   u   r   l   T   em   p   l   a   t   e    =    "h   t   tp   :   /   /   d   ictionary.reference.com/browse/<name>"
       e   l   s   e   i   f    &   f   i   l   e   t   yp   e =   =    "   p   e   r   l   "
   let s   :   u   r   l   T   em   p   l   a   t   e    =    "h   t   tp   :   /   /   p   erldoc.perl.org/functions/<name>.html"
       e   l   s   e   i   f    &   f   i   l   e   t   yp   e =   =    "   p   y   t   h   on"
   let s   :   u   r   l   T   em   p   l   a   t   e    =
   "http   :   /   /   w   w   w.   g   o   o   g   l   e.   com/search?q=<name>&domains=docs.python.org&sitesearch=docs.python.org"
       e   l   s   e   i   f    &   f   i   l   e   t   yp   e == "ruby"
   let s   :   u   r   l   T   em   p   l   a   t   e    =    "http://www.ruby-doc.org/core/classes/<name>.html"
       e   l   s   e   i   f    &   f   i   l   e   t   yp   e == "vim"
   let s   :   u   r   l   T   em   p   l   a   t   e    =
   "http   :   /   /   v   i   md   o   c   .   s   o   ur   ceforge.net/search.php?search=<name>&docs=help"
       e   n   d   i   f

       let s:wordUnderCursor = expand("<cword>")
   let s:url = substitute(s:urlTemplate, '<name>', s:wordUnderCursor, 'g')

       call Run(Browser() . " " . s:url)
   endfunction


   noremap <silent> <M-d> :call OnlineDoc()<CR>
   inoremap <silent> <M-d> <Esc>:call OnlineDoc()<CR>a


   Access Databases
   You can even talk to some 10 different databases from Oracle to MySQL to PostgreSQL to
   Sybase to SQLite, all from Vim, using the dbext.vim plugin [21]. The best part is that this
   plugin helps you to edit SQL written within PHP, Perl, Java, etc. and you can even directly
   execute the SQL even though it is embedded within another programming language and
   even asking you for values for variables.
Vim en:Programmers Editor                                                                             81


   Summary
   We have learned how Vim can be used for programming with the help of various plugins
   and settings. If we need a feature, it can be solved by writing our own Vim plugins (as we
   have discussed in the Scripting chapter).
                                                                  [22]
   A good source of related discussions is at Stack Overflow             and Peteris Krumins's blog
   [23]
        .

   Previous Next


   External links
   [1] http:/ / www. codinghorror. com/ blog/ archives/ 001188. html
   [2] http:/ / ctags. sourceforge. net
   [3] http:/ / www. vim. org/ scripts/ script. php?script_id=273
   [4] http:/ / cscope. sourceforge. net/ cscope_maps. vim
   [5] http:/ / www. vim. org/ scripts/ script. php?script_id=1638
   [6] http:/ / vim. sourceforge. net/ scripts/ script. php?script_id=213
   [7] http:/ / www. vim. org/ tips/ tip. php?tip_id=1228
   [8] http:/ / code. google. com/ p/ pysmell/
   [9] http:/ / www. vim. org/ scripts/ script. php?script_id=1318
   [10] http:/ / www. vim. org/ scripts/ script. php?script_id=69
   [11] http:/ / www. vim. org/ scripts/ script. php?script_id=889
   [12]   http:/ / www. vim. org/ scripts/ script. php?script_id=1941
   [13]   http:/ / www. vim. org/ scripts/ script. php?script_id=240
   [14]   http:/ / www. vim. org/ scripts/ script. php?script_id=90
   [15]   http:/ / vim. wikia. com/ wiki/ Using_vim_as_an_IDE_all_in_one
   [16]   http:/ / phraktured. net/ vimmity-vim-vim. html
   [17]   http:/ / www. vim. org/ scripts/ script. php?script_id=1643
   [18]   http:/ / www. vim. org/ scripts/ script. php?script_id=1074
   [19]   http:/ / www. vim. org/ scripts/ script. php?script_id=2043
   [20]   http:/ / vim. wikia. com/ wiki/ Online_documentation_for_word_under_cursor
   [21] http:/ / www. vim. org/ scripts/ script. php?script_id=356
   [22] http:/ / stackoverflow. com/ questions/ tagged/ vim
   [23] http:/ / www. catonmat. net/ tag/ vim


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_ en:Programmers_
   Editor&oldid=1245
   Principal Authors: Swaroop
Vim en:More                                                                                                    82


   Vim en:More
   Introduction
   We've explored so many features of Vim, but we still haven't covered them all, so let's take
   a quick wild ride through various topics that are useful and fun.


   Modeline
   What if you wanted to specify that a certain file should always use pure tabs and no spaces
   while editing. Can we enforce that within the file itself?
   Yes, just put v i m : n o e x p a n d t a b within the first two lines or last two lines of your file.
   An example:

   # Sample Makefile
   .cpp:
       $(CXX) $(CXXFLAGS) $< -o $@


   # vim: noexpandtab

   This line that we are adding is called a "modeline."


   Portable Vim
   If you keep switching between different computers, isn't it a pain to maintain your Vim
   setup exactly the same on each machine? Wouldn't it useful if you could just carry Vim
   around in your own USB disk? This is exactly what Portable GVim [1] is.
   Just unzip into a directory on the portable disk, then run G V i m P o r t a b l e . e x e . You can even
   store your own v i m r c and other related files on the disk and use it anywhere you have a
   Microsoft Windows computer.


   Upgrade plugins
   Any sufficiently advanced Vim user would be using a bunch of plugins and scripts added to
   their ~ / . v i m or ~ / v i m f i l e s directory. What if we wanted to update them all to the latest
   versions? You could visit the script page for each of them, download and install them, but
   there's a better way - just run : G L V S (which stands for 'G'et 'L'atest 'V'im 'S'cripts).
   See : h e l p g e t s c r i p t for details.
                                                     [2]
   There are scripts to even twitter from Vim              !


   Dr.Chip's plugins
   "Dr. Chip" has written some amazing Vim plugins [3] over many years. My favorite ones are
   the d r a w i t . v i m which help you to draw actual text-based drawings such as all those fancy
   ASCII diagrams that you have seen before.
   Another favorite is Align.vim [4] which helps you to align consecutive lines together. For
   example, say you have the following piece of program code:
Vim en:More                                                                                                             83


   a = 1
   bbbbb = 2
   cccccccccc = 3

   Just visually select these three lines and press \ t = , and voila, it becomes like this:

   a          = 1
   bbbbb      = 2
   cccccccccc = 3

   This is much easier to read than before and makes your code look more professional.
   Explore Dr. Chip's page to find out about many more interesting plugins.


   Blog from Vim
                                  [5]
   Using the Vimpress plugin            , you can blog to your Wordpress blog right within Vim.


   Make Firefox work like Vim
   Use the Vimperator add-on [6] to make Firefox behave like Vim, complete with modal
   behavior, keyboard shortcuts to visit links, status line, tab completion and even marks
   support!


   Bram's talk on the seven habits
   Bram Moolenaar, the creator of Vim, had written an article long ago titled "Seven habits of
   effective text editing" [7] that explained how you should use a good editor (such as Vim).
                                                                                             [8]
   Bram recently gave a talk titled "Seven habits for effective text editing, 2.0"                 where he
   goes on to describe the newer features of Vim as well as how to effectively use Vim. This
   talk is a good listen for any regular Vim user.


   Contribute to Vim
                                                                                                              [9]
   You can contribute to Vim in various ways such as working on development of Vim itself                           ,
   writing plugins and color schemes [10], contributing tips [11] and helping with the
   documentation [12].
   If you want to help in the development of Vim itself, see : h e l p d e v e l o p m e n t .


   Community
   Many Vim users hang out at the vim@vim.org mailing list [13] where questions and doubts
   are asked and answered. The best way to learn more about Vim and to help other beginners
   learn Vim is to frequently read (and reply) to emails in this mailing list.
                                                          [14]                [15]
   Find more articles and discussions at delicious               and reddit          .
Vim en:More                                                                                                 84


   Summary
   We've seen some wide range of Vim-related stuff and how it can be beneficial to us. Feel
                                                            [16]
   free to explore these and many more Vim scripts                 to help you ease your editing and
   make it even more convenient.

   Previous Next


   External links
   [1]   http:/ / portablegvim. sourceforge. net
   [2]   http:/ / www. vim. org/ scripts/ script. php?script_id=1853
   [3]   http:/ / mysite. verizon. net/ astronaut/ vim/
   [4]   http:/ / www. vim. org/ scripts/ script. php?script_id=294
   [5]   http:/ / www. vim. org/ scripts/ script. php?script_id=1953
   [6] http:/ / vimperator. mozdev. org/
   [7] http:/ / www. moolenaar. net/ habits. html
   [8] http:/ / video. google. com/ videoplay?docid=2538831956647446078& q=%22Google+
     engEDU%22
   [9] http:/ / groups. google. com/ group/ vim_dev
   [10] http:/ / www. vim. org/ scripts/
   [11] http:/ / vim. wikia. com
   [12] http:/ / vimdoc. sourceforge. net
   [13] http:/ / www. vim. org/ maillist.php#vim
   [14] http:/ / delicious. com/ popular/ vim
   [15] http:/ / www. reddit. com/ r/ vim/
   [16] http:/ / www. vim. org/ scripts/


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:More&oldid=1043
   Principal Authors: Swaroop



   Vim en:What Next
   Introduction
   We have explored so much about Vim, so what next?
   Well, if you have learned, understood and made Vim a habit, then you are officially a
   Vimmer. Congratulations!
                                          [1]
   Now, immediately send me a mail              thanking me for this book ;-) . This step is optional but
   recommended.
   Also please consider making a donation [2] to support the continued development of this
   book, or donate to the Vim project to help children in Uganda.
   Next, I recommend to regularly follow the Vim mailing list [3] to see the kind of queries and
   answers that appear there. You would be surprised to see the amount of activity and the
   range of flexibility of Vim that is demonstrated by all the discussion. And you never know,
   you might be able to answer a few queries too.
Vim en:What Next                                                                                          85


   Two other important resources that should be good to explore are the "Best of Vim Tips" [4]
                                                [5]
   page and the all-important :help user-manual     that is an index to everything possible in
   Vim. Make sure to refer the user-manual from time to time and familiarize yourself on how
   to find the relevant information so that you can look up for commands as and when
   required.
   Lastly, if you want to know what are the latest cool features in Vim, then see : h e l p n e w - 7 .


   Summary
   We have gone through a very broad overview of the range of things possible in Vim. The
   most important thing that we have stressed on again and again is to not learn every feature
   possible, but to make the features, most useful to you, a habit, and to make sure to use the
   : h e l p to look for features as and when needed.
   So, go forth and skyrocket your editing skills to be more efficient and effective than you
   ever thought possible.
   Happy Vimming!

   Previous Next


   External links
   [1] http:/ / www. swaroopch. com/ contact/
   [2] http:/ / www. swaroopch. com/ byteofdonate
   [3] http:/ / www. vim. org/ maillist.php#vim
   [4] http:/ / rayninfo. co. uk/ vimtips. html
   [5] http:/ / vimdoc. sourceforge. net/ htmldoc/ usr_toc. html


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_ en:What_
   Next&oldid=1105
   Principal Authors: Swaroop



   Vim en:Feedback
   This book is a work-in-progress. Your feedback is essential to improving the book. So,
   please do send in your comments [1].
                                                                   [2]
   This book is also available on its official website as a wiki         so that means you can go
   ahead and fix things yourself as well!
   Known Gaps are:
   • Inconsistent use of examples
   • Current strength is the later chapters for experienced Vimmers as opposed to the
     beginners' chapters.
Vim en:Feedback                                                                                86


   Previous Next


   External links
   [1] http:/ / www. swaroopch. com/ contact/
   [2] http:/ / www. swaroopch. com/ notes/ Vim


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:Feedback&oldid=1106
   Principal Authors: Swaroop



   Vim en:Charityware
   Vim is "charityware". If you find Vim useful, you are encouraged to help the ICCF Holland
   foundation [1] in any way you can.
   From their website:
        The south of Uganda has been suffering from the highest HIV infection rate in the
        world. Parents die of AIDS, just when their children need them most. An extended
        family can be their new home. Fortunately there is enough food in this farming
        district. But who will pay their school fees, provide medical aid and help them
        grow up? That is where ICCF Holland helps in the hope that they will be able to
        take care of themselves, and their children, in the long run.
   Details on ICCF can be found in Vim by running : h e l p i c c f .
   To contribute to the development of Vim itself, you can sponsor Vim development [2] by
   making a monetary donation and becoming a Vim registered user - you get to vote on what
   new features will be added to Vim!

   Previous Next


   External links
   [1] http:/ / iccf-holland. org
   [2] http:/ / www. vim. org/ sponsor/ faq. php


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:Charityware&oldid=1049
   Principal Authors: Swaroop
Vim en:Colophon                                                                                       87


   Vim en:Colophon
   About this book
   This is an alpha edition of the book. That means it may contain incomplete sections, obvious
   mistakes, blatant lack of detail and more. Please feel free to send constructive suggestions
   [1]
       .


   Creating this book
   This book would have never been written without Vim 7. My life would never have been
   complete without Vim. Thank you Bram Moolenaar and Vimmers all over the world.


   The original content was written in Viki syntax were then strung together using the deplate
   command [2]. Special thanks to Thomas Link [3] for patiently answering all my queries on
   how to use Viki/Deplate :-)
   The book was later converted into a wiki format. Even though the book is now being edited
   online live, I still use Vim to write and copy/paste to the MediaWiki to save the text.


   Inspiration
   I started writing this book in 2004 or so. It seemed to inevitably end up on the backburner.
   I revived writing the book in the month after foss.in [4]/2006 thanks to the infective spirit of
   the people there.
   But yet again, I couldn't sustain the momentum. I started to be more productive when I
   started following David Allen's Getting Things Done principles [5]. This led me to revive
   working on the book to get it finally in some shape to be released to the world on the first
   day of foss.in/2008.


   About the author



   Swaroop C H is 26 years of age. He graduated in B.E. (Computer Science) from PESIT,
   Bangalore, India. He currently works at his co-founded startup IONLAB [6]. He has
   previously worked at Yahoo! and Adobe. His passions are reading and writing, running and
   cycling, and some coding.
   More about him at http:/ / www. swaroopch. com/ about/
   He can be contacted via http:/ / www. swaroopch. com/ contact/
Vim en:Colophon                                                                                      88


   Previous Next


   External links
   [1]   http:/ / www. swaroopch. com/ contact/
   [2]   http:/ / deplate. sourceforge. net
   [3]   http:/ / www. vim. org/ account/ profile. php?user_id=4037
   [4]   http:/ / www. foss. in
   [5]   http:/ / www. swaroopch. com/ gtdbook
   [6]   http:/ / www. ionlab. in


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:Colophon&oldid=1194
   Principal Authors: Swaroop



   Vim en:Translations
   • If you want to learn how to create a translation, please see the 'A Byte of Python'
     Translation Howto.
   • If you are already in the process of creating a translation, please add your introduction
     and the language of translation here on this page, similar to the list of 'A Byte of Python'
     translations.


   Swedish
   Mikael Jacobsson (leochingkwake-at-gmail-dot-com) has volunteered to translate the book
   to Swedish, and the translation is in progress at http:/ / leochingkwake. se/ wiki/ index. php/
   Byte_of_Vim .


   Traditional Chinese
   Yeh, Shin-You (or Yesyo) has volunteered to translate the book to Traditional Chinese. The
   translation is in progress, and starts with the chapter "Vim zh-tw".


   Russian
   Vitalij Naumov (or hbvit7) has volunteered to translate the book to Russian. The translation
   is in progress, and starts with the chapter "Vim_ru".


   Source: http:/ / www. swaroopch. com/ mediawiki/ index. php? title=Vim_
   en:Translations&oldid=1247
   Principal Authors: Swaroop, Yesyo, Hbvit7, Leochingkwake
License                                                    89


   License
   Creative Commons Attribution-Share Alike 3.0 Unported
   http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/