Vim Color Editor HOW-TO (Vi Improved with syntax color high-
  lighting)
  Al Dev (Alavoor Vasudevan)        alavoor@yahoo.com
  v4.0, 31 December 1999

  This document is a guide to very quickly setup Vim color editor on
  Linux or Unix systems. The information here will improve the prodcu-
  tivity of programmer since Vim editor supports syntax color highlight-
  ing and bold fonts which improves the "readability" of program code.
  Programmer's productivity improves 2 to 3 times with color editor like
  Vim.  The information in this document applies to all operating sytems
  where Vim works that is - Windows 95/NT and all flavors of Unix like
  Linux, Solaris, HPUX, AIX, SCO, Sinix, BSD, SCO, etc..
  ______________________________________________________________________

  Table of Contents


















































  1. Introduction

     1.1 Install Vim on Redhat Linux
     1.2 Install Vim on GNU Debian Linux
     1.3 Install Vim on Unixes
     1.4 Install Vim on Microsoft Windows 95/NT

  2. Setup gvim init files

     2.1 Sample gvimrc file
     2.2 Xdefaults parameters

  3. Color Syntax init files

  4. VIM Usage

  5. Vi companions

     5.1 Ctags for ESQL
     5.2 Ctags for Javascript programs, Korn, Bourne shells
     5.3 Debugger gdb

  6. Online VIM help

  7. Vim Home page and Vim links

  8. Vim Tutorial

     8.1 Vim Hands-on Tutorial
     8.2 Vi Tutorials on Internet

  9. Vi Tutorial

     9.1 Cursor Movement Commands
     9.2 Repeat Counts
     9.3 Deleting Text
     9.4 Changing Text
     9.5 Yanking (Copying) Text
     9.6 Filtering text
     9.7 Marking Lines and Characters
     9.8 Naming Buffers
     9.9 Substitutions
     9.10 Miscellaneous "Colon Commands"
     9.11 Setting Options
     9.12 Key Mappings
     9.13 Editing Multiple Files
     9.14 Final Remarks

  10. Vim Reference Card

     10.1 Vi states
     10.2 Shell Commands
     10.3 Setting Options
     10.4 Notations used
     10.5 Interrupting, cancelling
     10.6 File Manipulation
     10.7 Movement
     10.8 Line Positioning
     10.9 Character positioning
     10.10 Words, sentences, paragraphs
     10.11 Marking and returning
     10.12 Corrections during insert
     10.13 Adjusting the screen
     10.14 Delete
     10.15 Insert, change
     10.16 Copy and Paste
     10.17 Operators (use double to affect lines)
     10.18 Search and replace
     10.19 General
     10.20 Line Editor Commands
     10.21 Other commands

  11. Other Formats of this Document



  ______________________________________________________________________

  11..  IInnttrroodduuccttiioonn

  Vim editor stands for 'Vi Improved'. Vi is the most popular and
  powerful editor in the Unix world. The VVii is a abbreviation for
  "VViisual" editor.  In olden days, the first editor on this planet was a
  line editor called 'ed' (and 'ex'). The VViisual editor like Vi was a
  vast improvement over line editors like 'ed' (or 'ex'). The editors
  'ed' and 'ex' are still available on Linux, see 'man ed' and 'man ex'.

  A good editor will improve the productivity of the programmer. Vim
  supports color syntax highlighting of program code and also emphasises
  using different fonts like normal, bold or italics. The color editor
  like Vim will improve the pprroodduuccttiivviittyy of programming by 22 ttoo 33
  ttiimmeess!! Programmers can read the code much more rapidly as the code
  syntax is colored and highlighted.

  11..11..  IInnssttaallll VViimm oonn RReeddhhaatt LLiinnuuxx

  To use Vim install the following RPM packages on Redhat Linux -

  ______________________________________________________________________
          rpm -i vim*.rpm
  OR do this -
          rpm -i vim-enhanced*.rpm
          rpm -i vim-X11*.rpm
          rpm -i vim-common*.rpm
          rpm -i vim-minimal*.rpm
  ______________________________________________________________________


  You can see the list of files the vim rpm installs by -

  ______________________________________________________________________

          rpm -qa | grep ^vim | awk '{print "rpm -ql " $1 }' | /bin/sh | less
  ______________________________________________________________________


  and browse output using j,k, CTRL+f, CTRL+D, CTRL+B, CTRL+U or using
  arrow keys, page up/down keys.  See 'man less'.

  11..22..  IInnssttaallll VViimm oonn GGNNUU DDeebbiiaann LLiinnuuxx

  To install Vim on Debian Linux (GNU Linux), login as root and when
  connected to internet type -

  ______________________________________________________________________
  apt-get install vim vim-rt
  ______________________________________________________________________


  It will go download the lastest version of vim, install it, configure
  it, and erase the .deb file it downloaded. The first package listed is
  vim, the standard editor, compiled with X11 support, vim-rt is the vim
  runtime, it holds all the syntax and help files.


  11..33..  IInnssttaallll VViimm oonn UUnniixxeess

  For other flavors of unixes like Solaris, HPUX, AIX, Sinix, SCO
  download the source code file

  ______________________________________________________________________

          zcat vim.tar.gz | tar -xvf -
          cd vim-5.5/src
          ./configure --enable-gui=motif
          make
          make install
  ______________________________________________________________________




  11..44..  IInnssttaallll VViimm oonn MMiiccrroossoofftt WWiinnddoowwss 9955//NNTT

  For Windows 95/NT, download the zip file and install clicking on
  setup.  Get the zip file from -

  +o  The home page of vim is at  <http://www.vim.org>

  +o  Mirror site in US is at  <http://www.us.vim.org>


  22..  SSeettuupp ggvviimm iinniitt ffiilleess

  To enable the syntax color highlighting you MUST copy the gvimrc file
  to your home directory. This will also put the "Syntax" Menu with gvim
  command.  You can click on Syntax Menu and select appropriate
  languages like C++, Perl, Java, SQL, ESQL etc..

  ______________________________________________________________________
  cd $HOME
  cp /usr/doc/vim-common-5.3/gvimrc_example  ~/.gvimrc
  ______________________________________________________________________


  Comment lines in .gvimrc begin with double-quotes (").  You can cus-
  tomize gvim by editing the file $HOME/.gvimrc and put the following
  lines -

  ______________________________________________________________________
  " This line is a comment .... one which begins with double-quotes
  " The best is the bold font, try all of these and pick one....
  set guifont=8x13bold
  "set guifont=9x15bold
  "set guifont=7x14bold
  "set guifont=7x13bold
  "
  " Highly recommended to set tab keys to 4 spaces
  set tabstop=4
  set shiftwidth=4
  "
  " The opposite is 'set wrapscan' while searching for strings....
  set nowrapscan
  "
  " The opposite is set noignorecase
  set ignorecase
  ______________________________________________________________________

  It is vveerryy  ssttrroonnggllyy recommended that you set the _t_a_b_s_t_o_p to 4 and
  _s_h_i_f_t_w_i_d_t_h to 4.  The _t_a_b_s_t_o_p is number spaces TAB key will put while
  editing with gvim. The _s_h_i_f_t_w_i_d_t_h is the number spaces the lines will
  be shifted with ">>" or "<<"  vi commands (Press twice "greater than"
  and "less than" keys on keyboard). Refer to Vi tutorials ``'' for more
  details.

  22..11..  SSaammppllee ggvviimmrrcc ffiillee

  You can change the settings like color, bold/normal fonts in your
  $HOME/.gvimrc file.  It is vveerryy ssttrroonnggllyy recommended that you set the
  background color to _l_i_g_h_t_y_e_l_l_o_w or _w_h_i_t_e with _b_l_a_c_k foreground.
  Ergonomics says that best background color is _l_i_g_h_t_y_e_l_l_o_w or _w_h_i_t_e
  with _b_l_a_c_k foreground. Hence change the variable 'guibg' in your
  $HOME/.gvimrc file as follows:

  ______________________________________________________________________
          highlight Normal guibg=lightyellow
  ______________________________________________________________________



  The sample gvimrc from /usr/doc/vim-common-5.3/gvimrc_example is as
  follows:










































  ______________________________________________________________________
  " Vim
  " An example for a gvimrc file.
  " The commands in this are executed when the GUI is started.
  "
  " To use it, copy it to
  "     for Unix and OS/2:  ~/.gvimrc
  "             for Amiga:  s:.gvimrc
  "  for MS-DOS and Win32:  $VIM\_gvimrc

  " Make external commands work through a pipe instead of a pseudo-tty
  "set noguipty

  " set the X11 font to use
  " set guifont=-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso8859-1

  " Make command line two lines high
  set ch=2

  " Make shift-insert work like in Xterm
  map <S-Insert> <MiddleMouse>
  map! <S-Insert> <MiddleMouse>

  " Only do this for Vim version 5.0 and later.
  if version >= 500

    " I like highlighting strings inside C comments
    let c_comment_strings=1

    " Switch on syntax highlighting.
    syntax on

    " Switch on search pattern highlighting.
    set hlsearch

    " For Win32 version, have "K" lookup the keyword in a help file
    "if has("win32")
    "  let winhelpfile='windows.hlp'
    "  map K :execute "!start winhlp32 -k <cword> " . winhelpfile <CR>
    "endif

    " Hide the mouse pointer while typing
    set mousehide

    " Set nice colors
    " background for normal text is light grey
    " Text below the last line is darker grey
    " Cursor is green
    " Constants are not underlined but have a slightly lighter background
    highlight Normal guibg=grey90
    highlight Cursor guibg=Green guifg=NONE
    highlight NonText guibg=grey80
    highlight Constant gui=NONE guibg=grey95
    highlight Special gui=NONE guibg=grey95

  endif
  ______________________________________________________________________



  See also sample vimrc used for console mode vim command from
  /usr/doc/vim-common-5.3/vimrc_example.




  22..22..  XXddeeffaauullttss ppaarraammeetteerrss

  You can set some of the Vim properties in Xdefaults file.

   WWAARRNNIINNGG!!!! WWAARRNNIINNGG:: _D_o _N_O_T _p_u_t VViimm**ggeeoommeettrryy it will break the gvim
  menu, use VViimm..ggeeoommeettrryy instead

  Edit the $HOME/.Xdefaults and put the following lines:

  ______________________________________________________________________
  ! GVim great Colors.
  Vim*useSchemes:         all
  Vim*sgiMode:            true
  Vim*useEnhancedFSB:     true
  Vim.foreground:         Black
  !Vim.background:        lightyellow2
  Vim*background:         white
  ! Do NOT use Vim*geometry , this will break the menus instead
  ! use Vim.geometry. Asterik between Vim and geometry is not allowed.
  ! Vim.geometry: widthxheight
  Vim.geometry:           88x40
  !Vim*font:              -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso8859-15-*5
  Vim*menuBackground: yellow
  Vim*menuForeground: black
  ______________________________________________________________________


  In order for this change to take effect, type -

  ______________________________________________________________________
          xrdb -merge $HOME/.Xdefaults
          man xrdb
  ______________________________________________________________________



  You can also edit the ~/.gvimrc file to change the background colors

  ______________________________________________________________________
          gvim $HOME/.gvimrc
  The best background color is lightyellow or white, with black foreground.
          highlight Normal guibg=lightyellow
  ______________________________________________________________________



  33..  CCoolloorr SSyynnttaaxx iinniitt ffiilleess

  Instead of using "Syntax" menu you can also manually source in the
  syntax file. Edit the file with gvim and at : (colon) command give
  'so' command. For example -

  ______________________________________________________________________
          gvim foo.pc
          :so $VIM/syntax/esqlc.vim
  ______________________________________________________________________


  The syntax source files are at /usr/share/vim/syntax/*.vim. Vim sup-
  ports more than 120 different syntax files for different languages
  like C++, PERL, VHDL, Javascript,...and so on!!

  Each syntax file supports a default file extension names, for example,
  Javascript syntax file supports *.js extension. If you happen to use
  different extension conflicting with another default syntax file as in
  putting Javascript in *.html file than you MUST source in with command
  :so $VIM/syntax/javascript.vim. Best method is create a soft link like
  -

  ______________________________________________________________________
          ln -s $VIM/syntax/javascript.vim js
          gvim foo.html  (... this file contains javascript functions and HTML)
          :so js
  ______________________________________________________________________



  44..  VVIIMM UUssaaggee

  You can use Vim in two modes - one with GUI and other without GUI.  To
  use GUI use command -

  ______________________________________________________________________
          gvim foo.cpp
  ______________________________________________________________________


  To use non-gui mode give -

  ______________________________________________________________________
          vim foo.cpp
  OR plain vanilla mode
          vi foo.cpp
  ______________________________________________________________________


  It is very strongly recommended that you always use gvim instead of
  vim, since GUI mode with colors will definitely improve your produc-
  tivity.

  GUI mode gvim provides the following -

  +o  You can mark the text using the mouse to do cut, copy and paste.

  +o  You can use the Menu bar which has - File, Edit, Window, Tools,
     Synatx and Help buttons.

  +o  Also in near future in gvim - a second menu bar will display the
     list of files being edited, and you can switch files by clicking on
     the filenames, untill than you can use vi commands - :e#, :e#1,
     :e#2, :e#3, :e#4, ....so on to select the files.

  55..  VVii ccoommppaanniioonnss

  Generally Vim is used in conjunction with other powerful tools like
  ccttaaggss and ggddbb. The ccttaaggss is for very rapid navigation through millions
  of lines of "C/C++" code and ggddbb for debugging the "C/C++" code.  A
  brief introduction of these two indispensable commands will be given
  in this chapter.

  The ccttaaggss is the most powerful command available for coding C, C++,
  Java, Perl, Korn/Bourne shell scripts or Fortran. Developers very
  extensively use ccttaaggss to navigate "to and fro" thousands of functions
  of C/C++ programs. See 'man ctags' on Unix.  It is vveerryy iimmppoorrttaanntt that
  you MUST learn how to use ctags in order to develop programs in C or
  C++, Java, etc.. Navigation is the single most important task while
  doing development of C or C++ code. Using ctags you can very quickly
  read the code by jumping from calling line to function and drill down
  deeper into nested function calls and unwind back all the way upto the
  top. You can go back and forth from function to function very quickly.


  Without NAVIGATION you will be completely lost! ccttaaggss is like the
  magnetic COMPASS needle for the programmers.

  Usage of ccttaaggss :

  ______________________________________________________________________
          ctags *.cpp
          gvim -t foo_function
          gvim -t main
  ______________________________________________________________________


  This will edit the C++ program file which contains the function
  foo_function() and will automatically place the cursor on the first
  line of the function foo_function(). The second command takes you to
  line having main() function definition.

  Inside the Vim editor, you can jump to a function by typing : (colon)
  tag < function name >as below -

  ______________________________________________________________________
          :tag sample_function
  ______________________________________________________________________


  This will place the cursor on first line of sample_function()

  If you want to jump into the function from a line in file which
  contains the function name, place the cursor just before the function
  name and press CCTTRRLL++]] (press control key and left-square-bracket key
  simultaneously), this will take you right at the line where the
  function begins automatically!!

  ______________________________________________________________________
                  // example code
                  switch(id_number) {
                          Case 1:
                                  if ( foo_function( 22, "abcef") == 3 )
                                      ^
                                      |
                                      |
                                      |
                    Place the cursor here (just before foo_function) and press CTRL+]
                    This will take you to function by name "foo_function". To come back to this line press CTRL+t
  ______________________________________________________________________


  To go back to the calling line press CCTTRRLL++tt (Control key and letter
  't' together). You keep pressing CCTTRRLL++tt to unwind and go to the first
  line where you started the navigation. That is you can keep pressing
  CCTTRRLL++]] and than keep pressing CCTTRRLL++tt to go back. You can repeat these
  as many times you want to have complete navigation through all the
  functions of C or C++.

  55..11..  CCttaaggss ffoorr EESSQQLL

  Since ctags directly does not support the Embedded SQL/C (ESQL)
  language, the following shell script can be used to create tags for
  esql. ESQL/C is database SQL commands embedded inside the "C"
  programs.  Oracle's ESQL/C is called Pro*C and Sybase, Informix have
  ESQL/C and PostgreSQL has product "ecpg".

  Save this file as "sqltags.sh" and do chmod a+rx tags_gen.sh.



  ______________________________________________________________________
  #!/bin/sh

  # Program to create ctags for ESQL, C++ and C files
  ESQL_EXTN=pc
  tag_file1=tags_file.1
  tag_file2=tags_file.2

  which_tag=ctags

  rm -f $tag_file1 $tag_file2 tags

  aa=`ls *.$ESQL_EXTN`
  #echo $aa
  for ii in $aa
  do
          #echo $ii
          jj=`echo $ii | cut -d'.' -f1`
          #echo $jj

          if [ ! -f $jj.cpp ]; then
                  echo " "
                  echo " "
                  echo "***********************************************"
                  echo "ESQL *.cpp files does not exist.. "
                  echo "You must generate the *.cpp from *.pc file"
                  echo "using the Oracle Pro*C pre-compiler or Sybase"
                  echo "or Informix esql/c pre-compiler."
                  echo "And than re-run this command"
                  echo "***********************************************"
                  echo " "
                  exit
          fi

          rm -f tags
          $which_tag $jj.cpp
          kk=s/$jj\.cpp/$jj\.pc/g

          #echo $kk > sed.tmp
          #sed -f sed.tmp tags >> $tag_file1

          #sed -e's/sample\.cpp/sample\.pc/g' tags >> $tag_file1
          sed -e $kk tags >> $tag_file1
  done

  # Now handle all the C++/C files - exclude the ESQL *.cpp files
  rm -f tags $tag_file2
  bb=`ls *.cpp *.c`
  aa=`ls *.$ESQL_EXTN`
  for mm in $bb
  do
          ee=`echo $mm | cut -d'.' -f1`
          file_type="NOT_ESQL"
          # Exclude the ESQL *.cpp and *.c files
          for nn in $aa
          do
                  dd=`echo $nn | cut -d'.' -f1`
                  if [ "$dd" = "$ee" ]; then
                          file_type="ESQL"
                          break
                  fi
          done

          if [ "$file_type" = "ESQL" ]; then
                  continue
          fi
          rm -f tags
          $which_tag $mm
          cat tags >> $tag_file2
  done

  mv -f $tag_file2 tags
  cat  $tag_file1 >> tags
  rm -f $tag_file1

  # Must sort tags file for it work properly ....
  sort tags > $tag_file1
  mv $tag_file1 tags
  ______________________________________________________________________



  55..22..  CCttaaggss ffoorr JJaavvaassccrriipptt pprrooggrraammss,, KKoorrnn,, BBoouurrnnee sshheellllss

  The shell script given below can be used to generate tags for a very
  large variety of programs written in JavasScript, PHP/FI scripts, Korn
  shell, C shell, Bourne shell and many others. This is a very generic
  module.

  Save this file as tags_gen.sh and do chmod a+rx tags_gen.sh.










































  ______________________________________________________________________
  #!/bin/sh

  tmp_tag=tags_file
  tmp_tag2=tags_file2

  echo " "
  echo " "
  echo " "
  echo " "
  echo " "
  echo "Generate tags for ...."
  while :
  do
          echo "    Enter file extension for which you want to generate tags."
          echo -n "    File-extension should be like sh, js, ksh, etc... : "
          read ans

          if [ "$ans" == "" ]; then
                  echo " "
                  echo "Wrong entry. Try again!"
          else
                  break
          fi
  done

  \rm -f $tmp_tag

  aa=`ls *.$ans`

  for ii in $aa
  do
          jj=`echo $ii | cut -d'.' -f1`
          #echo $jj
          cp $ii $jj.c
          ctags $jj.c
          echo "s/$jj.c/$ii/g" > $tmp_tag2
          sed -f $tmp_tag2 tags >> $tmp_tag
          \rm -f tags $jj.c
  done

  sort $tmp_tag > tags

  \rm -f $tmp_tag $tmp_tag2
  ______________________________________________________________________



  55..33..  DDeebbuuggggeerr ggddbb

  You would be using gdb extensively along with Vi.  Debugging is the
  most important aspect of programming as major cost of software project
  goes into debugging and testing.

  To debug C++/C programs use 'gdb' tool. See ''mmaann ggddbb''.  You must
  compile your programs with -g3 option like


               gcc -g3 foo.c foo_another.c sample.c




  To setup easy aliases do -


    Setup a alias in your ~/.bash_profile
          alias gdb='gdb -directory=/home/src -directory=/usr/myname/src '
    Give -
          gdb foo.cpp
          gdb> dir /hom2/another_src
          This will add to file search path
          gdb> break 'some_class::func<TAB><TAB>
    This will complete the function name saving you typing time... and will output like -
          gdb> break 'some_class::function_foo_some_where(int aa, float bb)'




  Pressing TAB key twice is the command line completion, which will save
  you lots of typing time. This is one of the most important technique
  of using gdb.

  To get online help do -


               gdb> help
         Gives online help
               gdb> help breakpoints
         Gives more details about breakpoints.




  To set breakpoints and do debugging


               unixprompt> gdb exe_filename
               gdb> b main
         This will put breakpoint in main() function
               gdb> b 123
         This will put breakpoint in line 123 of the current file
               gdb> help breakpoints
         Gives more details about breakpoints.




  To analyze the core dumps do


               unixprompt> gdb exe_filename  core
               gdb> bt
         Gives backtrace of functions and line numbers where the program failed
               gdb> help backtrace
         Gives more details about backtrace.




  You can also use GUI version of gdb called xxgdb.

  Memory leak tools -

  +o  Freeware Electric Fence on linux cd,

  +o  Commercial tools Purify  <http://www.rational.com>

  +o  Insure++  <http://www.insure.com>



  66..  OOnnlliinnee VVIIMM hheellpp

  See the online man pages. At unix shell prompt type ''mmaann vviimm'' and ''mmaann
  ggvviimm''.

  Or inside the gvim session type :help to get the help page. See also
  ``''



                               VIM - main help file

             Move around:  Use the cursor keys, or "h" to go left,
                           "j" to go down, "k" to go up, "l" to go right.
                           ":1" takes you to 1st line of page
                           ":n" takes you to nth line of page
                           "<SHIFT>g" takes you to bottom of page
                           ":/someword/ will search for "someword" in doc

       Close this window:  Use ":q<Enter>".

       Jump to a subject:  Position the cursor on a tag between |bars| and hit CTRL-].

          With the mouse:  ":set mouse=a" to enable the mouse (in xterm or GUI).
                           Double-click the left mouse button on a tag between |bars|.

               jump back:  Type CTRL-T or CTRL-O.

       Get specific help:  It is possible to go directly to whatever you want help
                           on, by giving an argument to the ":help" command |:help|.
                           It is possible to further specify the context:
                                 WHAT                  PREPEND    EXAMPLE      ~
                             Normal mode commands     (nothing)   :help x
                             Visual mode commands        v_       :help v_u
                             Insert mode commands        i_       :help i_<Esc>
                             command-line commands       :        :help :quit
                             command-line editing        c_       :help c_<Del>
                             Vim command arguments       -        :help -r
                             options                     '        :help 'textwidth'

       list of documentation files:

       |howto.txt|     how to do the most common things
       |intro.txt|     introduction to Vim
       |index.txt|     alphabetical index for each mode
       |autocmd.txt|   automatically executing commands on an event
       |change.txt|    delete and replace text




  77..  VViimm HHoommee ppaaggee aanndd VViimm lliinnkkss

  The home page of vim is at  <http://www.vim.org> and mirror site in US
  is at  <http://www.us.vim.org>

  Vim FAQ is at  <http://www.grafnetix.com/~laurent/vim/faq.html> and at
  <http://www.vim.org/faq>

  Eli's Vim Page at  <http://www.netusa.net/~eli/src/vim.html>

  The Vi Lovers Home Page  <http://www.cs.vu.nl/~tmgil/vi.html>

  Vim Reference Guide at  <http://scisun.sci.ccny.cuny.edu/~olrcc/vim/>


  Vim mailing list at
  <http://www.findmail.com/listsaver/vimannounce.html> and
  <http://www.vim.org/mail.html>

  Mailing list archives are kept at:

  +o  <http://www.egroups.com/group/vim>

  +o  <http://www.egroups.com/group/vimdev>

  +o  <http://www.egroups.com/group/vimannounce>

  Vim macros  <http://www.grafnetix.com/~laurent/vim/macros.html>

  88..  VViimm TTuuttoorriiaall


  88..11..  VViimm HHaannddss--oonn TTuuttoorriiaall

  On Linux system see the tutorial at /usr/doc/vim-common-5.*/tutor, on
  other unix systems go to directory where vim is installed and look for
  doc directory.

  ______________________________________________________________________
          cd /usr/doc/vim-common*/tutor
          less README.txt
          cp tutor $HOME
          cd $HOME
          less tutor
  ______________________________________________________________________



  88..22..  VVii TTuuttoorriiaallss oonn IInntteerrnneett


  +o  Purdue University
     <http://ecn.www.ecn.purdue.edu/ECN/Documents/VI/>



  +o  Quick Vi tutorial  <http://linuxwww.db.erau.edu/LUG/node165.html>



  +o  Advanced Vi tutorial  <http://www.yggdrasil.com/bible/bible-
     src/user-alpha-4/guide/node171.html>



  +o  Tutorials  <http://www.cfm.brown.edu/Unixhelp/vi_.html>



  +o  Tutorials
     <http://www.linuxbox.com/~taylor/4ltrwrd/section3_4.html>



  +o  Unix world online vi tutorial
     <http://www.networkcomputing.com/unixworld/unixhome.html>



  +o  Univ of Hawaii tutorial  <http://www.eng.hawaii.edu/Tutor/vi.html>

  +o  InfoBound   <http://www.infobound.com/vi.html>



  +o  Cornell Univ  <http://www.tc.cornell.edu/Edu/Tutor/Basics/vi/>



  +o  Vi Lovers home page:  <http://www.cs.vu.nl/~tmgil/vi.html>

  +o  Ater Sept 2000, will moveto
     <http://www.thomer.com/thomer/vi/vi.html>



  +o  Beginner's Guide to vi
     <http://www.cs.umr.edu/unixinfo/general/packages/viguide.html>



  +o  vi Help file  <http://www.vmunix.com/~gabor/vi.html>



  +o  vim FAQ  <http://www.math.fu-berlin.de/~guckes/vim/faq/>

     There are many Vi Tutorials on internet. In Yahoo (Lycos, excite or
     Hotbot) enter "Vi Tutorial" in search field and search engine will
     return many pointers.

  99..  VVii TTuuttoorriiaall

  In this tutorial, we describe some "advanced" vvii concepts and
  commands, so you can appreciate the power of vvii and so you decide how
  to build your knowledge of vvii commands. Nearly all vvii references list
  the available commands, but many don't bother to discuss how the
  commands interrelate; this topic is the main purpose of this tutorial.

  99..11..  CCuurrssoorr MMoovveemmeenntt CCoommmmaannddss

  The vvii cursor movement commands allow you to position the cursor in
  the file and/or on the screen efficiently, with a minimum number of
  keystrokes. There are oodles of cursor movement commands - don't try
  memorizing them all at once! Later, we'll see that much of the power
  of vvii comes from mixing cursor movement commands with other commands
  to delete, change, yank (copy), and filter text.

  Please edit a large text file (say, wwkknniigghhtt) so you can experiment
  with each command as it is described. Keep in mind these commands will
  only work in Command Mode, not Insert Mode; if you start getting your
  "commands" in your text, press the ESC key to return to Command Mode.


  +o  ccuurrssoorr kkeeyyss : As we've seen, cursor keys move by single character
     amounts left, down, up, and right. Movement above the top of the
     file, below the bottom, to the right of the end of a line, or left
     of the beginning is not allowed (no line wrapping).



  +o  hhjjkkll : When vvii was written (around 1978), many terminals on UNIX
     systems did not have cursor keys! hh,, jj,, kk,, and ll were chosen as
     commands to move left, down, up, and right, respectively.  Try
     them! Most vvii diehards prefer these to the cursor keys because


  +o  ((aa)) they are in the same place on all keyborads, and

  +o  ((bb)) they fit nicely under the fingers, unlike most cursor keys,
     which are arranged in a box or "T" or some other nonlinear shape.


     Why h, j, k, and l? Well, in the ASCII character set, CTRL-H is
     backspace (moves left), CTRL-J is linefeed (moves down), and, of
     course, k and l are next to h and j, so you see, they're mnemonic.



  +o  00 : ("zero", not "oh") Move to the beginning of current line. (To
     try this and the next few commands, use the cursor keys or hh jj kk ll
     to move to an indented text line that contains few "e" characters.
     If you can't find an indented line in your file, create one by
     inserting a few space characters at the beginning of a line.)



  +o   ^^  : Move to first non-white character of current line. (For
     indented line, 0 and ^ are different.)



  +o   $$  : Move to last character of current line.



  +o   ttCC  : Move to (but not on) next character c in current line.
     (Press 0, then press te. This will move to the first e in the
     curent line.)



  +o   ffCC  : Find (move on top of) next character c in current line.
     (Press fe, and the cursor will find - that is, move on top - the
     next e in the current line.)



  +o   TTCC  : Move to (but not on) the previous character c in current
     line (Press $, than Te.)



  +o   FFCC  : Find (move on top of) the previous character c in current
     line.  (Press Fe.)



  +o   nn||  : Move to column n in current line. (Try 20 |. The digits 2
     and 0 will not be displayed as you type them, but when you press |
     the cursor will move to column 20.)

     Try some experiments with t f T F | . When you do something
     illegal, vvii will beep your terminal.



  +o   ww  : Forward to beginning of next "small" word ( a "small" word
     consists of unbroken alphanumeric characters or punctuation
     characters, but not mixed alphanumeric and punctuation). Try
     tapping w a dozen times or so - note what happens at punctuation.


  +o   WW  : Forward to beginning of next "big" word (alphanumeric and
     punctuation mixed). Try W a dozen times or so.



  +o   bb  : Backward to beginning of "small" word.



  +o   BB  : Backward to beginning of "big" word.



  +o   ee  : Forward to end of "small" word.


  +o   EE  : Forward to end of "big" word.



  +o   ++ RReettuurrnn  : Move to first non-white space character on next line.
     (+ and the Return key have the same effect.)



  +o   --  : Move to first non-white space character on previous line.



  +o   ))  : Move to the end of sentence. (A sentence ends either at a
     blank line or at a period or examination mark followed by two space
     characters or at the end of a line. A period or exclamation mark
     followed by one space character does not end a sentence; this is
     correct behaviour, according to traditional rules of how sentences
     should appear in typed documents, but often appears wrong to those
     who have never suffered through a fromal typing class.)



  +o   ((  : Move to beginning of sentence.



  +o   }}  : Move to end of paragraph. (Paragraphs are seperated with
     blank lines, by vvii's definition.)



  +o   {{  : Move to beginning of paragraph.



  +o   HH  : Move to home position (top line) on the screen



  +o   MM  : Move to middle line on the screen.



  +o   LL  : Move to last line on the screen.



  +o   nnGG  : Move to line n. If n is not given, move to the last line in
     the file.  (Try 15G to move to line 15, for example. The CTRL-G
     command displays the name of the file, some status information, and
     the current line number. To move to the top of the file: 1G)



  +o   CCTTRRLL--dd  : Scroll down half-screen (see note).

  +o   CCTTRRLL--uu  : Scroll up half-screen (see note).

  +o   CCTTRRLL--ff  : Move forward one-screen (see note).

  +o   CCTTRRLL--bb  : Move backward one-screen (see note).

  +o   NNoottee  : These four scrolling/paging commands cannot be used with
     the delete, change, yank, or filter commands.



  +o   //rreegg__eexxpp  : Move to next occurrence of the regular expression
     reg_exp When you press /, the cursor drop to the lower left corner
     of the screen and waits for you to type in the regular expression.
     Press the Return key to finish; vvii then searches forward for the
     next occurrence of the regular expression. For example, press /the
     followed by Return. This moves forward to the next occurrence of
     the, perhaps imbedded in the middle of some longer word (other,
     weather, etc.). If you just press / and then Return, vvii searches
     for the next occurrence of whatever the last regular expression was
     that you searched for.



  +o   nn  : Has the same effect as pressing / and then Return; i.e.,
     searches for the next occurrence of whatever the last regular
     expression was that you searched for.



  +o   ??rreegg__eexxpp  : Searches backward, rather than forward. If no reg_exp
     is given, it searches for the last regular expression that was
     entered.  Both / and ? wrap around, so searching "below" the bottom
     or "above" the top of the file is legal.



  +o   NN  : Same as pressing ? and then Return.

  99..22..  RReeppeeaatt CCoouunnttss

  Many of the movement commands discussed above can be preceded with a
  repeat count; the movement is simply repeated the given number of
  times:

  +o   33ww  : Move forward three words

  +o   55kk  : Move up four characters

  +o   33ffaa  : Find the third succeeding a in current line

  +o   66++  : Move down six lines

     For some commands, the "repeat counts" has special meaning:

  +o   44HH  : Move to Line 4 on the screen (home plus 3)

  +o   88LL  : Move to the eigth line from the bottom of the screen

  +o   33$$  : Move to the end of the third line down

     For some commands (e.g., ^) the repeat count is ignored; for others
     (e.g., / and ? ) it is illegal

  99..33..  DDeelleettiinngg TTeexxtt

  We've seen that dddd deletes the current line. This can be used with a
  repeat count: 3dd deletes three lines, the current line, and the two
  following lines.

  The d command can be used as a "prefix" on most of the movement
  commands above to delete nearly arbitrary chunks of text. When used
  with d, the movement commands are called target specifiers. d can be
  given a repeat count. (As you try these experiments, remember to press
  u after each command to undo the deletion).


  +o   ddww  : Delete "small" word forward

  +o   dd33ww  : Delete three "small" words forward

  +o   33ddww  : Three times, delete "small" word forward

  +o   33dd33ww  : Three times, delete three "small" words forward (that is,
     delete nine "small" words forward)

  +o   dd++  : Delete current line and next line down

  +o   dd//tthhee : Delete from current character up to but not including the
     next occurrence of the pattern the.

  +o   dd$$  : Delete to end of line

  +o   dd00  : Delete to beginning of line

  +o   dd3300GG  : Delete from the curent line to and including Line 30

  +o   ddGG  : Delete from current line to and including last line

  +o   dd11GG  : Delete from current line to and including Line 1

     To delete single characters, use x. x can be given a repeat count:

  +o   1155xx  : Delete current and 14 following characters

     x is actually just an abbreviation of d1; that is, delete one
     character right.

  99..44..  CChhaannggiinngg TTeexxtt

  The c command is similar to d, except it toggles vvii into Insert Mode,
  allowing the original (unwanted) text to be changed to something else.

  For example, put the cursor on the beginning of a word (press w to get
  to the beginning of the next word). Then, press cw to change that
  word. On the screen, the last character in the word being changed will
  be replaced with a $$ symbol indicating the boundary of the change;
  type ina new word (you will overwrite the original word on the screen)
  and press the ESC key when done.  Your input may be longer or shorter
  than the word being changed.

  Put the cursor at the beginning of a line containing at least three
  words, and try c3w to chage three words. Try c$ to change to the end
  of the current line.  In all cases where the chage affects only the
  current line, the boundary of the change is indicated with $.
  When a change affects more than just the current line, vvii deletes the
  original text from the screen and toggles into Insert Mode. For
  example, try c3+ to change the current and the next three lines; vvii
  deletes the four original lines from the screen and toggles into
  Insert Mode in a new blank line.  As usual, press the ESC key when you
  have finished entering your new text.

  Some other change commands:

  +o   cccc  : Change current line

  +o   55cccc  : Change five lines (current and next four)

  +o   cc//tthhee  : Change from current character up to but not including the
     next occurrence of the pattern the

  +o   cc$$  : Change to end of line

  +o   cc3300GG  : Change from the current line to and including Line 30

  +o   ccGG  : Change from curernt line to and including last line

  +o   cc11GG  : Change from curernt line to and including Line 1

  99..55..  YYaannkkiinngg ((CCooppyyiinngg)) TTeexxtt

  The y command yanks a copy of  text into a buffer; the yanked text can
  then be put (or pasted) elsewhere in the file using p or P.

  The simplest form of yank is yy to yank the current line; after yy,
  try p to put a copy of the yanked line after the cursor. Following yy,
  you can make as many copies of the yanked line as you want by moving
  up and down in the file and pressing p.

  To copy multiple lines, try, for example, 5yy (yank the current and
  next four lines). p puts a copy of the yanked lines after the cursor;
  the sequence 5yyp "works" but it probably doesn't do what you would
  like. The P command is like p, but puts a copy of the yanked text
  ahead of the cursor; try the sequence 5yyP.

  Other yank commands:

  +o   yy33ww  : Yank three words

  +o   yy$$  :  Yank to end of current line

  +o   yy11GG  : Yank from current line to and including Line 1

  99..66..  FFiilltteerriinngg tteexxtt

  The filter command !!, prompts for the name of a UNIX command (which
  should be a filter), then passes selected lines through the filter,
  replacing those selected line in the vvii buffer with the output of the
  filter command. vvii's ability to pass nearly arbitrary chunks of text
  through any UNIX filter adds incredible flexibility to vvii, at no
  "additional cost" in size or performance to vvii itself.

  Some examples will help illustrate. Create a line in your file
  containing just the word who and absolutely no other text. Put the
  cursor on this line, and press !!!!  This command is analogous to dd,
  cc, or yy, but instead of deleting, changing, or yanking the current
  line, it filters the current line. When you press the second !, the
  cursor drops down to the lower left corner of the screen and a single
  ! is displayed, prompting you to enter the name of a filter. As the
  filter name, type sh and press the Return key. sshh (the Bourne shell)
  is a filter!  It reads standard input, does some processing of its
  input (that is, executes commands), and sends its output (the output
  of those commands) to standard output. Filtering theline containing
  who through sh causes the line containing who to be replaced with a
  list of the current users on the system - right in your file!

  Try repeating this process with ddaattee. That is, create a line
  containing nothing but the word ddaattee, then put the cursor on the line,
  and press !!!!sshh and the Return key. The line containing ddaattee is
  replaced with the output of the ddaattee command.

  Put your cursor on the first line of the output of who. Count the
  numebr of lines.  Suppose, for example, the number is six. Then select
  those six lines to be filtered through sort; press 66!!!!ssoorrtt and the
  Return key. The six lines will be passed through sort, and sort's
  output replaces the original six lines.

  The filter command can only be used on complete lines, not on
  characters or words.

  Some other filter commands (here, < CR > means press Return):

  +o  !!//tthhee << CCRR >> ssoorrtt << CCRR >> : Sort from the current line up to and
     including the next line containing the

  +o   !!11GGggrreepp tthhee << CCRR >> : Replace from the current line to and
     including Line 1 with just the lines that contain the

  +o   !!GGaawwkk ''{{pprriinntt $$11}}'' << CCRR >> : From the current line to the end of
     file, replace every line with just its first word.

  99..77..  MMaarrkkiinngg LLiinneess aanndd CChhaarraacctteerrss

  You can mark lines and characters to be used as targest for movement,
  deletion, change, yankidn, and filtering using the command mc, where c
  is a lowercase letter.

  For example, put the cursor in the middle of some word and press ma.
  This marks the character under the cursor as mark a.

  Now, move the cursor off the marked character and to a different line
  ( use the cursor keys, CTRL-u, or whatever). To return to the marked
  line, press 'a (that is, single quote, than a). This moves to the
  first non-white space character on the line containing mark a.

  Move off that line again. To return to the marked character, press `a
  (that is, backquote, than a). This moves on top of the character
  marked with a.

  Marking is usually used with deleting, changing, yanking or filtering.
  For example, move the cursor to al line other than the one containing
  mark a, and then press d'a (d, single quote, a). This deletes from the
  current line to and including the line marked with a.

  Put the cursor in the middle of a different word and press mb to set
  mark b.  Now, move the cursor away from that word (but only a few
  lines, so you can see what we're about to do more easily), and than
  press d`b (d, backquote, b).  This deletes from the current CHARACTER
  to and including the CHARACTER marked with b.

  As another example, to sort the output of who, mark the first line
  (ma), then move the cursor to the last line and press !'asort and the
  Return key.

  If you jump to a mark and decide you want to jump back to whatever you
  jumped from, you can press '' (jump back to line) or `` (jump back to
  character).
  99..88..  NNaammiinngg BBuuffffeerrss

  When you delete, change, or yank text, the original text is stored
  (until the next delete, change, or yank) in an unnamed buffer from
  which it can be put using p or P. Using the unnamed buffer, only the
  most recently deleted, changed or yanked text may be recovered.

  If you wish to delete, change, or yank multiple sections of text and
  remember them all (up to a maximum of 26), you can give a buffer name
  ahead of the delete change or yank command. A buffer name has the form
  "c (double quote, lowercase c).

  For example, press "ayy to yank the current line into buffer a, then
  move to a different line and press "byy to yank that line into buffer
  b. Now, move elsewhere in the file and press "ap and "bp to put copies
  of the text stored in buffers a and b.

  Some other named buffer commands:

  +o   ""aa66yyyy  : Yank six lines (current and next five) into buffer a

  +o   ""bbdd11GG  : Delete from the curernt line to and including Line 1,
     storing the deleted lines in buffer b

  +o   ""ccyy''cc  : Yank from the current line to the line marked c into
     buffer c (marks and buffers are distinct, and may have the same
     name without confusing vvii)

  99..99..  SSuubbssttiittuuttiioonnss

  To substitute one chunk of text for another in lines throughout your
  file, use the :s command. Some subsitute examples:

  +o   ::11,,$$ss//tthhee//TTHHEE//gg   From Line 1 to the last line (line $), subsitute
     for the text THE; do this globally in each line where the occurrs

  +o   ::''aa,,..ss//..**//hhaa hhaa//  From the line marked a to the current line (line
     .), substitute for everything on the line the text ha ha

  99..1100..  MMiisscceellllaanneeoouuss ""CCoolloonn CCoommmmaannddss""

  All colon commands begin with a colon; when you press the colon, the
  cursor drops to the lower left corner of the screen, and a colon
  prompt is displayed waiting for you to finish your colon command.

  Some important examples:

  +o  ::ww  Write the buffer contents to the file without quitting from vvii

  +o  ::ww aabbcc Write the buffer contents to the file abc (creating abc if
     it doesn't exist, or overwriting current contents if it does exist)
     without quitting from vvii

  +o  ::11,,1100ww  aabbcc  Write lines 1 through 10 to file abc

  +o  ::''aa,,$$ww aabbcc  Write from the line marked a to the last line into file
     abc

  +o  ::ee aabbcc Edit file abc, instead of the current file. vvii prints an
     error message if changes have been made to the curernt file that
     have not been saved with :w

  +o  ::ee!! aabbcc Edit file abc, throwing away any changes that may have been
     made to the current file


  +o  ::ee ##  Edit the prior file edited (successive :e# commands toggle
     back and forth between two files)

  +o  ::ff aabbcc  Change the file anme for the current vvii buffer to abc

  +o  ::qq Quit, unless unsaved chanegs have been made

  +o  ::qq!! Quit, throwing away any changes that may have been made

  +o  ::rr aabbcc Read the file abc into current vvii buffer, after the line the
     cursor is on (try :r croc to read in a copy of the croc file)

  +o  ::!!ccmmdd Execute command cmd (who, sort, ls, etc.)

  99..1111..  SSeettttiinngg OOppttiioonnss

  Various options affect the "feel" of vvii. You can display all the
  various options that can be set using the colon command :set all. You
  can also use set to change options.

  For example, if you want to see line numbers for the lines in the file
  you're editing, use the command :set number. To turn off line
  numbering, use the command :set nonumber. Most options can be
  abbreviated; :set nu turns on line numbering and :set nonu turns off
  line numbering.

  If you :set nomagic, the special meanings of regular expression
  characters (period, asterisk, square bracket, etc.) are switched off.
  Use :set magic to restore the special meanings.

  Some options take a value. For example, :set tabstop=4 causes tabs to
  be displayed as four space characters, rather than the usual eight.

  If you find you always want certain options set certain ways, you can
  put the set commands you want ina file .exrc, or you can set up the
  environment variable EXINIT to specify the options you want.

  For example, if your lgoin shell is Bourne shell, this line could go
  in your .profile file:

  ______________________________________________________________________
          EXINIT='set nomagic nu tabstop=4'; export EXINIT
  ______________________________________________________________________


  If your login shell is a C shell, this line could go in your .login
  file:

  ______________________________________________________________________
          setenv EXINIT 'set nomagic nu tabstop=4'
  ______________________________________________________________________



  99..1122..  KKeeyy MMaappppiinnggss

  If you find you're performing a series of simple commands over and
  over, you can map the command series to an unused command key using
  the :map command. If your mapping must include control characters such
  as Return key (CTRL-M in ASCII) or the ESC (CTRL-[ in ASCII) key,
  precede such characters with CTRL-v to suppress their usual special
  meaning.

  For example, this command maps CTRL-A to move the cursor forward 55
  lines, then back up to the msot recent blank line, then change that
  blank line to a formfeed (CTRL-L) and three blank lines. That is, each
  CTRL-A will paginate the next page, without splitting paragraphs
  across pages.

  Note: In this command, each control character is shown as ^C, where C
  is some uppercase letter. For example, CTRL-M is shown as ^M. Also,
  when you enter this command you will not see the CTRL-v characters as
  shown: each CTRL-v merely suppresses the usual special meaning of the
  following control character, so when you press the sequence ^V^M, all
  you will see on the screen is ^M. In this command, ^M is the Return
  key and ^[ is the ESC key.

  ______________________________________________________________________
          :map ^A  55+?^$^V^Mcc^V^L^V^M^V^M^V^M^V^[
  ______________________________________________________________________



  99..1133..  EEddiittiinngg MMuullttiippllee FFiilleess

  You can edit multiple files with vvii by giving multiple file names as
  command line arguments:

  ______________________________________________________________________
          vi croc fatherw  wknight
  ______________________________________________________________________


  Two colon commands are used to move through the multiple files:

  +o   ::nn  Move to the next file in the argument list (you must save
     changes with :w or vvii will print an error message)

  +o   ::rreeww Rewind and start over with the first file in the argument
     list

     The :n and :rew commands aer somewhat clumsy, but there are some
     important benefits: the contents of named buffers ("a, "b, "c,
     etc.) are remembered across files, so you can use :n and :rew with
     p and P to copy text back and forth between files. Also, the most
     recent search string for the / and ? commands remembered across
     files, so you can do repetitive searches in multiple files rather
     easily.

  For example, try the following experiment: First get out of vvii, then
  execute vvii with croc and wknight as arguments:

  ______________________________________________________________________
          $ vi croc wknight
  ______________________________________________________________________


  In croc, search for the

       //tthhee << CCRR >>

  Yank this line into buffer a:

       ""aayyyy

  Now go to the next file (you've made no change to croc, so this will
  work):

       ::nn << CCRR >>

  Search for the "next" line containing the, without retyping the search
  string:
       nn

  Put a copy of buffer a after the current line in wknight:

       ""aapp

  Move down two lines, and yank the current line into buffer b:

       jjjj""bbyyyy

  Save the changes to wknight

       ::ww << CCRR >>

  Now, rewind to croc

       ::rreeww << CCRR >>

  Search again, and put a copy of buffer b after the found line:

       nn""bbpp

  Save the changes, and exit vvii

       ZZZZ

  99..1144..  FFiinnaall RReemmaarrkkss

  This tutorial was intended to introduce some of the vvii capabilities
  that you might overlook in your system's vvii manual or that might not
  be mentioned in the manual (different systems have manuals of widely
  varying quality).

  You will not be a vvii expert after reading this tutorial, but you will
  have a good appreciation of vvii's capabilities. Only time and effort
  can make a vvii expert. But the efficiency and universality of vvii make
  this effort pay off in the long run.

  You may have decided you hate vvii. So be it! But be aware that vvii
  remains the standard UNIX text editor - the one editor you can count
  on being available on every UNIX system you'll use - so even if you
  prefer to use something else day-to-day, you'd be well advised to know
  the bare minimum vvii material covered in this tutorial.

  1100..  VViimm RReeffeerreennccee CCaarrdd


  1100..11..  VVii ssttaatteess

  Vi has 3 modes:

  1. _c_o_m_m_a_n_d _m_o_d_e - Normal and initial state; others return here (use
     EESSCC to abort a partially typed command)

  2. _i_n_p_u_t _m_o_d_e - entered by specific commands aa ii AA II oo OO cc CC ss SS RR
     and ended by EESSCC or abnormally with interrupt

  3. _l_i_n_e _m_o_d_e - i.e. waiting for input after a :: , // , ??  or a !!
     command (end with CCRR, abort with CCTTRRLL--cc). CCTTRRLL is the control key:
     CCTTRRLL--cc means "control c"

  1100..22..  SShheellll CCoommmmaannddss


  1. TTEERRMM== _c_o_d_e Puts a code name for your terminal into the variable
     TTEERRMM
  2. eexxppoorrtt TTEERRMM Conveys the value of TTEERRMM (the terminal code) to any
     UNIX system program that is terminal dependant.

  3. ttppuutt iinniitt Initializes the terminal so that it will function
     properly with various UNIX system programs.

  4. vvii  _f_i_l_e_n_a_m_e Accesses the vvii screen editor so that you can edit a
     specified file.

  5. vvii  _f_i_l_e_1 _f_i_l_e_2 _f_i_l_e_3 Enters three files into the vvii buffer to be
     edited. Those files are _f_i_l_e_1_, _f_i_l_e_2_, and _f_i_l_e_3.

  6. vviieeww  _f_i_l_e Invoke vi editor on _f_i_l_e in read-only mode

  7. vvii --RR  _f_i_l_e Invoke vi editor on _f_i_l_e in read-only mode

  8. vvii --rr  _f_i_l_e Recover _f_i_l_e and recent edits after system crash

  9. vvii --rr  _f_i_l_e Recover _f_i_l_e and recent edits after system crash

  1100..33..  SSeettttiinngg OOppttiioonnss


  1. ::sseett _o_p_t_i_o_n Activate _o_p_t_i_o_n

  2. ::sseett _o_p_t_i_o_n_=_v_a_l_u_e Assign _v_a_l_u_e to _o_p_t_i_o_n

  3. ::sseett nnoo _o_p_t_i_o_n Deactivate _o_p_t_i_o_n

  4. ::sseett  Display options set by user

  5. ::sseett aallll Display list of all current options, both default and
     those set by the user

  6. ::sseett  _o_p_t_i_o_n? Display values of _o_p_t_i_o_n

  1100..44..  NNoottaattiioonnss uusseedd

  Notations:

  1. CCTTRRLL--cc CCTTRRLL is the control key: CCTTRRLL--cc means "control c"

  2. CCRR is Carriage return (ENTER key)

  1100..55..  IInntteerrrruuppttiinngg,, ccaanncceelllliinngg


  +o  EESSCC end insert or incomplete command

  +o  CCTTRRLL--?? CCTTRRLL is the control key: CCTTRRLL--?? means "control ?" delete or
     rubout interrupts

  +o  CCTTRRLL--ll reprint/refresh screen if CTRL-? scrambles it

  1100..66..  FFiillee MMaanniippuullaattiioonn


  +o  ZZZZ Save the file and exit vi

  +o  ::wwqq Save the file and exit vi

  +o  ::ww Write the current file

  +o  ::ww!! Force write the current file, if file is read-only


  +o  ::ww_n_a_m_e Write to file _n_a_m_e

  +o  ::qq Exit from vi

  +o  ::qq!! Force exit from vi (discarding changes)

  +o  ::ee nnaammee Edit file _n_a_m_e

  +o  ::ee!! reedit, discard changes

  +o  ::ee ++ nnaammee edit file _n_a_m_e, starting at end

  +o  ::ee ++ nn edit starting at line _n

  +o  ::ee ## edit alternate file

  +o  ::nn edit next file in _a_r_g_l_i_s_t

  +o  ::aarrggss list files in current filelist

  +o  ::rreeww rewind current filelist and edit first file

  +o  ::nn aarrggss specify new arglist

  +o  ::ff  show current file and line

  +o  CCTTRRLL--GG synonym for :f , show current file and line

  +o  ::ttaa ttaagg  to tag file entry _t_a_g

  +o  CCTTRRLL--]]  :ta, following word is tag

  1100..77..  MMoovveemmeenntt


  +o  AArrrroowwss Move the cursor

  +o  CCTTRRLL--dd Scroll half page down

  +o  CCTTRRLL--uu Scroll half page up

  +o  CCTTRRLL--ff Scroll a full page down

  +o  CCTTRRLL--bb Scroll a full page up

  +o  ::00 Move to start of file

  +o  ::nn Move to line number n

  +o  ::$$ Move to end of file

  +o  00 Move to start of line

  +o  ^^ Move to first non-blank character

  +o  $$ Move to end of line

  +o  CCRR Move to the start of next line

  +o  -- Move to the start of previous line

  +o  %% Find matching bracket

  +o  GG  goto line (last line default)


  +o  ]]]]  next section/function

  +o  [[[[  previous section/function

  1100..88..  LLiinnee PPoossiittiioonniinngg


  +o  HH  Home window line

  +o  LL  Last window line

  +o  MM  Middle window line

  +o  ++  Next line, at first non-white

  +o  --  Previous line, at first non-white

  +o  CCRR  return, same as +

  +o  jj  next line, same column

  +o  kk  previous line, same column

  1100..99..  CChhaarraacctteerr ppoossiittiioonniinngg


  +o  00  beginning of line

  +o  $$  end of line

  +o  hh  forward

  +o  ll  backwards

  +o  SSPPAACCEE  same as l

  +o  ffxx  find x forward

  +o  FFxx  find x backward

  +o  ;;  repeat last f F

  +o  ,,  inverse of ;

  +o  ||  to specified column

  +o  %%  find matching { or }

  1100..1100..  WWoorrddss,, sseenntteenncceess,, ppaarraaggrraapphhss


  +o  ww  Word forward

  +o  bb  Word backward

  +o  ee  End of word

  +o  ))  To next sentence

  +o  ((  Back sentence

  +o  }}  To next paragraph

  +o  {{  Back paragraph


  +o  WW  Blank delimited word

  +o  BB  Back W

  +o  EE  To end of W

  1100..1111..  MMaarrkkiinngg aanndd rreettuurrnniinngg


  +o  ```` (press twice the back-quote ` key) Previous context

  +o  '.nr bi 1

     mmxx mark position with letter x

  +o  ``xx (back quote key and letter x) goto mark x

  +o

  1100..1122..  CCoorrrreeccttiioonnss dduurriinngg iinnsseerrtt


  +o  CCTTRRLL--hh Erase last character

  +o  CCTTRRLL--ww Erase last word

  +o  eerraassee  Press DELETE key, same as CTRL-h

  +o  kkiillll  Your kill key, erase input this line

  +o  \\  Escapes CTRL-h, DELETE and kill

  +o  EESSCC  Ends insertion, back to command

  +o  CCTTRRLL--??  Interrupt, terminates insert

  +o  CCTTRRLL--dd  Backtab over _a_u_t_o_i_n_d_e_n_t

  +o  CCTTRRLL--vv  Quote non-printing character

  1100..1133..  AAddjjuussttiinngg tthhee ssccrreeeenn


  +o  CCTTRRLL--ll Clear and redraw

  +o  CCTTRRLL--rr retype, eliminate @lines

  +o  zz--CCRR redraw, current line at window top

  +o  zz-- redraw, current line at window bottom

  +o  zz.. redraw, current line at window center

  +o  //ppaatt//zz-- _p_a_t line bottom

  +o  ttnn Use n line window

  +o  CCTTRRLL--ee Scroll window down 1 line

  +o  CCTTRRLL--yy Scroll window up 1 line

  1100..1144..  DDeelleettee


  +o  xx Delete the character under the cursor

  +o  XX Delete the charater before the cursor

  +o  DD Delete to the end of line

  +o  dd^^ Delete back to start of line

  +o  dddd Delete the current line

  +o  nndddd Delete _n lines starting with the current one

  +o  ddnnww Delete _n words starting from cursor

  1100..1155..  IInnsseerrtt,, cchhaannggee


  +o  ii Enter input mode inserting before the cursor

  +o  II Enter input mode inserting before the first non-blank character

  +o  aa Enter input mode inserting after the cursor

  +o  AA Enter input mode inserting after the end of the line

  +o  oo Open a new line below current line and enter input mode

  +o  OO Open a new line above current line and enter input mode

  +o  rr Replace the character under the cursor (does NOT enter input
     mode)

  +o  RR Enter input mode replacing characters

  +o  CC shift-c. Change rest of line

  +o  DD shift-d. Delete rest of line

  +o  ss Substitute chars

  +o  SS Substitute lines

  +o  JJ Join lines

  +o  JJ Join lines

  1100..1166..  CCooppyy aanndd PPaassttee

  The "yank buffer" is filled by _E_V_E_R_Y delete command, or explicitely by
  YY and yyyy.

  +o  YY Copy the current line to the yank buffer

  +o  _nyy Copy _n lines starting from the current to the yank buffer

  +o  pp Paste the yank buffer after the cursor (or below the current
     line)

  +o  PP Paste the yank buffer before the cursor (or above the current
     line)

  +o  ""_xp  Put from buffer x

  +o  ""_xy  Yank to buffer x

  +o  ""_xd  Delete into buffer x


  1100..1177..  OOppeerraattoorrss ((uussee ddoouubbllee ttoo aaffffeecctt lliinneess))


  +o  dd  delete

  +o  cc  change

  +o  <<  left shift

  +o  >>  right shift

  +o  !!  filter through command

  +o  ==  indent for LISP

  +o  yy  yank text to buffer

  1100..1188..  SSeeaarrcchh aanndd rreeppllaaccee


  +o  //_t_e_x_t Search forward for _t_e_x_t

  +o  ??_t_e_x_t Search backward for _t_e_x_t

  +o  nn Repeat the last search in the same direction

  +o  NN Repeat the last search in the reverse direction

  +o  // Repeat the last search forward

  +o  ?? Repeat the last search backward

  +o  [[ aaddddrr ]] ss//ffrroomm//ttoo// [[ gg ]]  Search for the occurence of _f_r_o_m and
     replace it with _t_o in the current line, or in the range _a_d_d_r (two
     line numbers seperated by command; 1,$ is the whole file).
     Replaces one occurrence per line, or all occurrences if _g is
     specified.  For example, :3,20s/someword/anotherword/g  Will
     replace "someword" with "anotherword" starting from line 3 to line
     20. 'g' is global means replace all occurrences of "someword".

  1100..1199..  GGeenneerraall


  +o  ::sshh Forks a shell (to be exited with CTRL-d)

  +o  ::!!_c_o_m_m_a_n_d Forks a shell to execute _c_o_m_m_a_n_d

  +o  ::sseett nnuummbbeerr Switch on line numbering

  +o  ::sseett nnoonnuummbbeerr Switch off line numbering

  1100..2200..  LLiinnee EEddiittoorr CCoommmmaannddss


  +o  :: Tells vvii that the next commands you issue will be line editor
     commands.

  +o  ::sshh Temporarily returns to the shell to perform some shell commands
     without leaving vvii.

  +o  CCTTRRLL--dd Escapes the temporary return to the shell and returns to vvii
     so you can edit the current window.

  +o  ::_n Goes to the _nth line of the buffer.


  +o  ::_x_,_zww _f_i_l_e_n_a_m_e Writes lines from the numbers _x through the number _z
     into a new file called _f_i_l_e_n_a_m_e.

  +o  ::$$ Moves the cursor to the beginning of the last line in the
     buffer.

  +o  ::..,,$$dd Deletes all the lines from the current line to the last line

  +o  ::rr _f_i_l_e_n_a_m_e Inserts the contents of the file _f_i_l_e_n_a_m_e under the
     current line of the buffer.

  +o  ::ss_/_t_e_x_t_/_n_e_w___t_e_x_t_/ Replaces the first instance of _t_e_x_t on the
     current line with _n_e_w___t_e_x_t

  +o  ::ss_/_t_e_x_t_/_n_e_w___t_e_x_t_/_g Replaces the every occurrence of _t_e_x_t on the
     current line with _n_e_w___t_e_x_t

  +o  ::gg_/_t_e_x_t_/_s_/_/_n_e_w___t_e_x_t_/_g Changes every occurrence of _t_e_x_t on the
     buffer to _n_e_w___t_e_x_t.

  1100..2211..  OOtthheerr ccoommmmaannddss


  +o  uu Undo the last change

  +o  UU Restore the current line

  +o  ~~ Change case

  +o  JJ Join the currentline with the next line

  +o  .. Repeat last text changing command

  +o  CCTTRRLL--gg Show file name and line number

  1111..  OOtthheerr FFoorrmmaattss ooff tthhiiss DDooccuummeenntt

  This document is published in 10 different formats namely - DVI,
  Postscript, Latex, LyX, GNU-info, HTML, RTF(Rich Text Format), Plain-
  text, Unix man pages and SGML.

  +o  You can get this HOWTO document as a single file tar ball in HTML,
     DVI, Postscript or SGML formats from -
     <ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/other-formats/> or
     <ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/other-formats/>

  +o  Plain text format is in:
     <ftp://metalab.unc.edu/pub/Linux/docs/HOWTO> or
     <ftp://metalab.unc.edu/pub/Linux/docs/HOWTO>

  +o  Translations to other languages like French, German, Spanish,
     Chinese, Japanese are in
     <ftp://metalab.unc.edu/pub/Linux/docs/HOWTO> or
     <ftp://metalab.unc.edu/pub/Linux/docs/HOWTO> Any help from you to
     translate to other languages is welcome.

     The document is written using a tool called "SGML tool" which can
     be got from - <http://www.xs4all.nl/~cg/sgmltools/> Compiling the
     source you will get the following commands like

  +o  sgml2html vim-howto.sgml     (to generate html file)

  +o  sgml2rtf  vim-howto.sgml     (to generate RTF file)

  +o  sgml2latex vim-howto.sgml    (to generate latex file)

  This document is located at -

  +o  <http://metalab.unc.edu/LDP/HOWTO/VIM-HOWTO.html>

  Also you can find this document at the following mirrors sites -

  +o  <http://www.caldera.com/LDP/HOWTO/VIM-HOWTO.html>

  +o  <http://www.WGS.com/LDP/HOWTO/VIM-HOWTO.html>

  +o  <http://www.cc.gatech.edu/linux/LDP/HOWTO/VIM-HOWTO.html>

  +o  <http://www.redhat.com/linux-info/ldp/HOWTO/VIM-HOWTO.html>

  +o  Other mirror sites near you (network-address-wise) can be found at
     <http://metalab.unc.edu/LDP/hmirrors.html> select a site and go to
     directory /LDP/HOWTO/VIM-HOWTO.html


  In order to view the document in dvi format, use the xdvi program. The
  xdvi program is located in tetex-xdvi*.rpm package in Redhat Linux
  which can be located through ControlPanel | Applications | Publishing
  | TeX menu buttons.


               To read dvi document give the command -
                       xdvi -geometry 80x90 howto.dvi
               And resize the window with mouse. See man page on xdvi.
               To navigate use Arrow keys, Page Up, Page Down keys, also
               you can use 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' letter
               keys to move up, down, center, next page, previous page etc.
               To turn off expert menu press 'x'.




  You can read postscript file using the program 'gv' (ghostview) or The
  ghostscript program is in ghostscript*.rpm package and gv program is
  in gv*.rpm package in Redhat Linux which can be located through Con-
  trolPanel | Applications | Graphics menu buttons. The gv program is
  much more user friendly than ghostscript.  Ghostscript and gv are also
  available on other platforms like OS/2, Windows 95 and NT.


               To read postscript document give the command -
                       gv howto.ps

               To use ghostscript give -
                       ghostscript howto.ps




  You can read HTML format document using Netscape Navigator, Microsoft
  Internet explorer, Redhat Baron Web browser or any other web browsers.

  You can read the latex, LyX output using LyX a "X-Windows" front end
  to latex.