How to use Unix text editor 'vim'?

To use the following features or short-cut keys, you may need to copy files .cppvim, .cvim, .fvim, .gvimrc, .htmlvim, .texvim, .viminfo, .vimrc from Dr. Harry Joe's home directory.

 


Go to the top

 

Basic Operations:

  • vi is a Visual Editor. The name vi is for Visual. Visual editors are ones that let you see multiple lines of the document that you are editing as you edit it.
  • vi editor has two modes (command mode and insert mode). In the command mode, you can input commands. In the insert mode, you can edit files. To enter into command mode, type ESC key. To enter into insert mode from command mode, type character i.
  • u --- undo
  • ctrl+r --- Redo
  • :wq --- save the file and quit from vi
  • :q! --- quit from vi without saving the file
  • Cursor movement (all commands listed below are entered in the command mode and commands are case sensitive)
    • G --- move to the end of the file
    • 1G --- move to the beginning of the file
    • :n --- move to the n-th row of the file (n is a non-negative integer)
    • :0 --- move to the beginning of the file
    • :5000 --- move to the end of the file (where 5000 can be any number which is larger than the total row number of the file)
    • :-n -- move up n rows from the current row (n is a non-negative integer)
    • :-6 -- move up 6 rows from the current row
    • ^ --- move to the first character in the row
    • 0 --- (zero) move to the beginning of the row
    • $ --- move to the last character in the row
    • w --- move to the beginning of the next word
    • b --- move to the beginning of the previous word
    • 6w --- move forward to the beginning of the 6-th word from the current position
    • 8b --- move backward to the beginning of the 8-th word from the current position
    • Ctrl+f --- move to the next page
    • Ctrl+b --- move to the previous page
    • h --- move to the previous character
    • l --- move to the next character
    • k --- move to the previous line
    • j --- move to the next line
    • use arrow keys, or ctrl+arrow keys, or pageup or pagedown keys (in either command mode or insert mode)
    • ) --- forward sentence
    • ( --- backward sentence
    • } --- forward paragraph
    • { --- backward paragraph
    • ]] --- forward section
    • [[ --- backward section
  • select, copy, and paste
    • To select text, use mouse (you can first use the mouse to hightlight part of text, then use arrow keys or pageup or pagedown key to highlight more text)
    • To select text in a rectangle region
      1. type Ctrl+v
      2. hold the left-button of the mouse and drag the mouse to select the desired rectangle region
    • ggvG --- to select all text in the current window
    • yy --- to copy the current line to the clipborad
    • 6yy --- to copy 6 lines from the current line (include the current line) to the clipboard
    • p --- (small letter "p") to paste the content in the clipboard to the next line
    • P --- (captial letter "P") to paste the content in the clipboard to previous line
  • delete or change characters, words, or lines
    • x --- to delete the current character
    • ra --- to replace the current character with the character "a" (you can replace "a" with any other character)
    • dw --- to delete the current word
    • dj --- to delete the current line and the next line
    • d} --- to delete from the current character to the end of this paragraph
    • 6dw --- to delete 6 words from the current word (including the current word)
    • cw --- to delete the current word and enter into insert mode (change the current word)
    • 6cw --- to delete 6 words from the current word (including the current word) and enter into insert mode (change the 6 words)
    • dd --- to delete the current line and copy it into the clipboard
    • 6dd --- to delete 6 lines from the current line (include the current line) and copy them into the clipboard
    • d^ --- to deletes from current cursor position to the first character of the line.
    • d0 --- (0 is zero, not character O) to deletes from current cursor position to the beginning of the row.
    • d$ --- to delete from the current current cursor position to the end of the line
    • D --- same as d$
  • search and replacement
    • /abc --- to search the word "abc"
    • /abc efg.r --- to search the phrase "abc efg.r"
    • n --- to find next
    • N --- to find previous
    • :s/abc/ef/g --- to replace the word "abc" with the word "ef" in the range of the whole file
    • :3,10s/abc/ef/g --- to replace the word "abc" with the word "ef" from the 3rd line to the 10 line.
    • :1,$s/abc/ef/g --- to replace the word "abc" with the word "ef" from the first line to the last line. It is equivalent to :s/abc/ef/g.
  • windows operation
    • ctrl+w+s --- to split the current window horizontally (ctrl+w+s means that first hold ctrl key, then type "w" and "s" sequentially, finally release ctrl key)
    • ctrl+w+v --- to split the current window vertically(ctrl+w+s means that first hold ctrl key, then type "w" and "s" sequentially, finally release ctrl key)
    • ctrl+w+q --- to close the current window
    • ctrl+w+w --- to jump the cursor to the next window
    • ctrl+w+= --- to equalize the sizes of windows
  • file operation
    • :e abc.txt --- to edit (or create) the file "abc.txt" in the current window (you can use TAB to complete the command)
    • :w abc.txt --- to write the content in the current window to the file "abc.txt" (you can use TAB to complete the command)
    • :w --- to save the current file
    • :w >> abc.txt --- to append the contents of the buffer to the file abc.txt.
  • Escaping to Shell
    • :!cmd --- to execute a single unix command
    • :sh --- to escape to shell. By doing this, you can execute many unix command. You can return to gvim by typing Ctrl+D
  • Recovering lost files

    If the system crashes while you are editing with vi, you can recover the work you were doing to within a few changes.

    To recover the file, abc.txt say, type command

        vi -r abc.txt
    

    To get a list of the files which are saved for you, type command

        vi -r
    
  • Misc
    • J --- join the next line with the current line
    • % --- find the matched (round, squared, or curly) brackets (first put the cursor to one of the bracket, then type % to find it's counterpart bracket)
    • . --- the period "." is used to repeat the previous operation
    • o --- the small letter "o" is used to create a new line under the current line and enter into the insert mode
    • O --- the capital letter "O" is used to create a new line above the current and enter into the insert mode
    • i --- to put the cursor in the current cursor position and enter into the insert mode
    • a --- to put the cursor after the current character and enter into the insert mode
    • I --- to put the cursor before the first character of the current line and enter into the insert mode
    • A --- to put the cursor after the last character of the current line and enter into the insert mode
    • :set number --- to view the line number
    • :set nonumber --- to remove the line number
    • ctrl+G --- to show the state (e.g. file name, the number of lines of the file) of the file you are editing.
    • `` --- (two back quotes) to get back to a previous position.
    • ~ --- to switch the case of the character under the cursor.

Go to the top

 

Create short-cut keys:

You can create short-cut keys for gvim. For example, you can type ",l" to compile latex file in the current gvim window. To do that, type the following mappings in the .vimrc file in your home directory:

      map ,l :!latex %
      map ,b :!bibtex %<  
      map ,x :!xdvi %<.dvi & 
      map ,p :!pdflatex % & 
      map ,f :!xpdf %<.pdf & 
      map ,a :!acroread %<.pdf & 
      map ,g :!ghostview  %<.ps &

Go to the top

 

Transform a table to LaTeX format

(

This entry is provided by Mark Robinson in Informal Computing Seminar - January 20, 2000.

)

A really useful tool ... suppose you have a bunch of numbers which you want to
put into a table in latex.  This is a quick way to do it.

You want to transform:  
0.41 -1.00  0.27  0.01 -0.99  0.64 
-2.90  0.24 -0.33 0.02  1.37  0.47

into:  
begin{center} 
begin{tabular}{|cccccc|} hline 
0.41 & -1.00 & 0.27 & 0.01 & -0.99 & 0.64 

-2.90 & 0.24 & -0.33 & 0.02 & 1.37 & 0.47  hline
end{tabular} 
end{center}

To do this, type (while in command mode) ":43,44!table2tex.pl"

(the breakdown ... the 43,44 says it will only work on lines 45 to 46 and the
!table2tex.pl will make a call a the Perl program ... note that you must have
this Perl program in your current directory or some directory covered in your
PATH variable)

(

You can obtain the source code of the file table2tex.pl at Dr. Harry Joe's webpage http://hajek.stat.ubc.ca/~harry/local/tabl2ltx.html

)

Go to the top

 

Transform a table to HTML format

(

This entry is provided by Mark Robinson in Informal Computing Seminar - January 20, 2000.

)

Start:  
0.41 -1.00  0.27  0.01 -0.99  0.64 
-2.90  0.24 -0.33  0.02  1.37  0.47

Make a call to ":67,68!table2html.pl" will produce:  
<TABLE border=5 cellpadding=5 cellspacing=3> 
<TR> 
<TD> 0.41</TD><TD> -1.00</TD><TD> 0.27</TD><TD> 0.01</TD><TD> -0.99</TD><TD> 0.64</TD></TR> 
<TR> 
<TD> -2.90</TD><TD> 0.24</TD><TD> -0.33</TD><TD> 0.02</TD><TD> 1.37</TD><TD> 0.47</TD>
</TR>
</TABLE>

which you can include in an HTML file.

The source code of the file table2html.pl is as follows:

  #! /usr/local/bin/perl 
  #convert table to html 
  #entries are centered justified 
  #add parameter to <TD>to get left or right justification 
  # for example <TD align="left">
  print "<TABLE border=5 cellPadding=5 cellSpacing=3>n"; 
  $i=0; 
  while(<>) { 
    chop($_); 
    $line=$_; 
    $line=~ s/^s+//; 
    @fields=split(/s+/,$line); 
    if($i==0) { 
      $n2=0; 
      foreach $itm (@fields) {$n2++;} 
    } 
    print " <TBODY> <TR>n"; 
    for($j=0;$j<$n2;$j++) { 
      print " <TD>", $fields[$j], "</TD>";
    } 
    print "<TR>n"; 
    $i++; 
  } 
  print "</TBODY></TABLE>n"; 

Go to the top

 

Format (Splus) Output

(

This entry is provided by Mark Robinson in Informal Computing Seminar - January 20, 2000.

)

Say you have output from S-plus which you want to format a little better ...
say you want to get rid of the first and third and last column and make the
rest of the columns have 1,2,3,4 decimals points respectively

First, above the output, type something like "0 8.1 0 8.2 8.3 8.4 0"  (the 0's
signify getting rid of that column, the a.b format signifies a width of a with
b decimal points)  Set it up like the following:

0 8.1 0 8.2 8.3 8.4 0
  [1] -1.35861443  0.30258917 -0.57190688  0.27911763  0.41829340 -0.33448098
  [7]  0.14098338  0.26156014 -0.67817408  0.27750322  0.70046690  1.63321662
 [13] -0.87113567 -1.09045095  1.79157953 -0.05500772  0.14935190  0.52317747
 [19]  1.22088326 -0.93934903 -1.11713757 -0.59225728 -1.59756826  0.10786151
 [25]  0.37489964  1.20734204 -0.25157383 -0.43282194 -0.22918384  0.29038264
 [31] -0.72439167 -1.34276791  0.65337613  0.89718566  0.43414847  0.54969927
 [37]  0.79278406 -1.20080351 -0.64851697  0.85754266  0.57609186  1.17390791
 [43]  0.79725791  1.80341577  1.29116587 -1.90582760 -0.29568917 -1.19636474
 [49]  0.02651639 -0.61876364  2.48667007 -0.36526389  0.34067777  0.94685260
 [55] -0.30327891 -2.18308852  1.70048157 -0.22125863 -0.47901244  0.41492965
 [61] -1.58239934 -1.70093696  1.28804581 -0.59947646 -0.57224725  0.15351164
 [67]  0.58445247  0.92078516 -0.60084557 -0.48747232 -0.29188598 -0.06975106
 [73]  1.26688431 -0.65137419 -0.26926444  0.92899189  0.01798242 -0.25006773
 [79]  0.40696346 -1.05068278  0.78963162  0.94104497 -0.55190809  0.97130390
 [85]  0.45307721 -0.47658350  0.61146376  0.14271527 -0.45779235  0.61202598
 [91] -0.66847263  0.71141322 -0.55144940 -0.94407312 -0.89556232 -1.72122285

Call ":91,107!format.pl" and it should change the above to:
    -1.4   -0.57   0.279  0.4183
     0.1   -0.68   0.278  0.7005
    -0.9    1.79  -0.055  0.1494
     1.2   -1.12  -0.592 -1.5976
     0.4   -0.25  -0.433 -0.2292
    -0.7    0.65   0.897  0.4341
     0.8   -0.65   0.858  0.5761
     0.8    1.29  -1.906 -0.2957
     0.0    2.49  -0.365  0.3407
    -0.3    1.70  -0.221 -0.4790
    -1.6    1.29  -0.599 -0.5722
     0.6   -0.60  -0.487 -0.2919
     1.3   -0.27   0.929  0.0180
     0.4    0.79   0.941 -0.5519
     0.5    0.61   0.143 -0.4578
    -0.7   -0.55  -0.944 -0.8956

The source code of the file format.pl is as follows

:

#! /usr/local/bin/perl

# formatting a data file (and also can extract subset of columns)

$argc=$#ARGV+1;
#print $argc,"n";

if($argc==1 && $ARGV[0]=~ /-h/)
{ print "usage: format.pl [-f w.d w.d ... w.d filename]n";
  print "where w.d = 0 for excluding columnn";
  print "      otherwise w.d = width and number of decimal placesn";
  print "If no '-f' flag, then first line of file has w.d ...n";
  exit(0);
}

#for($i=0;$i<$argc;$i++) { print $ARGV[$i], " "; }
#print "n";

if($ARGV[0] =~ /-f/) 
{ $file=$ARGV[$argc-1]; $tem=shift(@ARGV); $argc-=2; 
  print "ncol= ", $argc,"n";
  open(STDIN,"<" . $file);
}
else 
{ 
  $_=<STDIN>;
  $_=~s/^s+//;
  $_=~s/s+$//;
  @ARGV=split(/s+/,$_);
  $argc=$#ARGV+1;
  #print @ARGV,"n";
}

while(<STDIN>)
{ chop($_);
  $_=~s/^s+//;
  $_=~s/s+$//;
  @fields = split(/s+/,$_);
  $nfield=$#fields+1;
  $ncol=$argc;
  if($nfield<$ncol) { $ncol=$nfield+1; }
  for($i=0;$i<$ncol;$i++)
  { if($ARGV[$i]>0)
    { $fmt="%" . $ARGV[$i] . "f";
      printf($fmt,$fields[$i]);
    }
  }
  print "n";
}

Go to the top

 

How to change the fontsize of the text in gVim?

You can use -fn flag. For example:

    gvim -fn -*-*-*-*-*-*-*-250-*-*-*-*-*-* 

The sequence

-*-*-*-*-*-*-*-250-*-*-*-*-*-*

is obtained by running the command

    xfontsel&

and select the popup menu ptSz. Click the select button to copy the sequence to the buffer. Then you can paste the sequence to the terminal after command:

gvim -fn

For VIM 6.0, you can change the font from the Edit menu. Then select Select Font submenu.

Go to the top

 

gVim file explorer

From the Window menu of VIM 6.0, select Split File Explorer submenu. A file explorer will show on the left panel of the VIM 6.0 window. Double click a text file name in the file explorer. The text file will be shown in the right panel.

FAQ Category