Vim: Difference between revisions

From SaruWiki
Jump to navigation Jump to search
(added deletion table + updated insertion table)
No edit summary
Line 6: Line 6:
* vi is very powerful
* vi is very powerful
* with some practice, it's even usable.
* with some practice, it's even usable.
===About modal editors===


==Installation and configuration==
==Installation and configuration==
Line 11: Line 13:
To get ''vim'', simply use ''sudo apt-get install vim'' or ''sudo aptitude'', and find ''vim'' in the available packages. Nice to know: when you install ''vim'', you also get ''xxd'', a tool to make a hexdump, or convert a hex dump back to it's original binary form.
To get ''vim'', simply use ''sudo apt-get install vim'' or ''sudo aptitude'', and find ''vim'' in the available packages. Nice to know: when you install ''vim'', you also get ''xxd'', a tool to make a hexdump, or convert a hex dump back to it's original binary form.


In Debian Etch, the default editor is nano instead of vim. This can be changed in the following way:  
In Debian Etch, the default editor is nano instead of vim. This can be changed in the following way:
  sudo update-alternatives --set editor /usr/bin/vim.tiny
which vim.basic
  sudo update-alternatives --set editor /usr/bin/vim.basic
(The first line is to check that you really have vim.basic in place)
Now '''all''' commands that invoke an editor will use ''vim'' instead of ''nano''. Is that a good thing? We're not sure, but we do want to keep our ''vi'' skills up to par, so we do this.
Now '''all''' commands that invoke an editor will use ''vim'' instead of ''nano''. Is that a good thing? We're not sure, but we do want to keep our ''vi'' skills up to par, so we do this.


==Using VIM==
==Using vim==
 
Vim operates in two modes: a command mode and an insert mode. You start in command mode, so almost every key is a command. Several commands you can issue will bring you into '''--INSERT--''' moode, e.g. ''i'' or ''a''; to return in command mode press ''<esc>'' or ( ''<ctrl> ['' ).
 
It can be confusing to remember if you're in command mode or insert mode (even though there's a bright marker in the left bottom of the ''vim'' screen :-). So remember: when you're in insert mode, ''<esc>'' will bring you to command mode; when you're already in command mode, ''<esc>'' does nothing (no harm done). So press ''<esc>'' two or three times, and you're sure to be in command mode.
 
Another thing to remember: if you're in command mode and you start entering a number ''before'' a command, the command will get repeated that many times. The most used feature of this is deleting lines. Deleting the current line is done with the command ''dd''; deleting (for example) twelve lines can be accomplished using ''12dd''. Another example is the use of a number in front of G: command ''12G'' (use <shift>-g) will bring you to the beginning of the 12th line. A special number is zero; pressing 0 as the first character in a command means immediately going to the beginning of the line.


Vim operates in two modes: a command mode and an insert mode. You start in command mode, so almost every key is a command. You can switch to insert mode with ''i'' or ''a''; to return in command mode press ''<esc>'' or ( ''<ctrl> ['' )
===Exiting vim===
Start in insert mode and typ some text. To save your progress return in command mode with ''<esc>'' Now we can use the ''exit-commands'' typ '':w'' to save the document. or use these commands.


{| class="wikitable" style="text-align:center" border="1" cellspacing="0" cellpadding="5"
{| class="wikitable" style="text-align:center" border="1" cellspacing="0" cellpadding="5"
Line 39: Line 48:
|save and quit
|save and quit
|}
|}
==About modal editors==


==Cursor positioning==
 
===Cursor positioning===
{| class="wikitable" style="text-align:center" border="1" cellspacing="0" cellpadding="5"
{| class="wikitable" style="text-align:center" border="1" cellspacing="0" cellpadding="5"
!style="background:#ffdead;"|Key(s)
!style="background:#ffdead;"|Key(s)
!style="background:#ffdead;"|Movement
!style="background:#ffdead;"|Movement
|-
|h
|one character back
|-
|-
|j
|j
Line 51: Line 63:
|k
|k
|up one line, same column
|up one line, same column
|-
|h
|one character back
|-
|-
|l,<space>
|l,<space>
Line 83: Line 92:
|-
|-
|}
|}
Note that h,j,k,l is one block on your (US) keyboard


==Searching==
===Searching===
{| class="wikitable" style="text-align:center" border="1" cellspacing="0" cellpadding="5"
{| class="wikitable" style="text-align:center" border="1" cellspacing="0" cellpadding="5"
!style="background:#ffdead;"|Key(s)
!style="background:#ffdead;"|Key(s)
Line 100: Line 110:
|}
|}


==Text insertion==
===Text insertion===
{| class="wikitable" style="text-align:center" border="1" cellspacing="0" cellpadding="5"
{| class="wikitable" style="text-align:center" border="1" cellspacing="0" cellpadding="5"
!style="background:#ffdead;"|Key(s)
!style="background:#ffdead;"|Key(s)
Line 109: Line 119:
|-
|-
|A
|A
|appends text at the end of the line & switches to Insert mode
|appends text at the '''end''' of the line & switches to Insert mode
|-
|-
|i
|i
Line 115: Line 125:
|-
|-
|I
|I
|inserts text at the beginning of the line & switches to Insert mode
|inserts text at the '''beginning''' of the line & switches to Insert mode
|-
|-
|o
|o
Line 121: Line 131:
|-
|-
|O
|O
|opens new line above the current line for text insertion & switches to Insert mode  
|opens new line '''above''' the current line for text insertion & switches to Insert mode  
|-
|-
|<del>
|<del>
Line 131: Line 141:
|}
|}


==Text deletion==
===Text deletion===
{| class="wikitable" style="text-align:center" border="1" cellspacing="0" cellpadding="5"
{| class="wikitable" style="text-align:center" border="1" cellspacing="0" cellpadding="5"
!style="background:#ffdead;"|Key(s)
!style="background:#ffdead;"|Key(s)
Line 153: Line 163:
|d$
|d$
|same (deletes to the end of the current line)
|same (deletes to the end of the current line)
|-
|p
|"paste", puts the buffer (e.g. text from the previous deletion) after the position of the cursor
|-
|-
|P
|P
|"paste", puts back text from the previous deletion at the position of the cursor
|"Paste", puts the buffer (e.g. text from the previous deletion) '''before''' the position of the cursor
|-
|-
|}
|}

Revision as of 09:30, 28 May 2008

Introduction

The screen-oriented text editor vim stems from vi, written in '76 for an early BSD Unix release by Bill Joy. vi is old, nonintuitive, and complex. vim stems from 1991, and stands for Vi IMproved, but its improvements do not lessen it's nonintuitivity or complexity.

So why do we feel that vim is an essential system tool? Well, it's because

  • vi can be found on just about any Linux and Unix system
  • vi is very powerful
  • with some practice, it's even usable.

About modal editors

Installation and configuration

To get vim, simply use sudo apt-get install vim or sudo aptitude, and find vim in the available packages. Nice to know: when you install vim, you also get xxd, a tool to make a hexdump, or convert a hex dump back to it's original binary form.

In Debian Etch, the default editor is nano instead of vim. This can be changed in the following way:

which vim.basic 
sudo update-alternatives --set editor /usr/bin/vim.basic

(The first line is to check that you really have vim.basic in place) Now all commands that invoke an editor will use vim instead of nano. Is that a good thing? We're not sure, but we do want to keep our vi skills up to par, so we do this.

Using vim

Vim operates in two modes: a command mode and an insert mode. You start in command mode, so almost every key is a command. Several commands you can issue will bring you into --INSERT-- moode, e.g. i or a; to return in command mode press <esc> or ( <ctrl> [ ).

It can be confusing to remember if you're in command mode or insert mode (even though there's a bright marker in the left bottom of the vim screen :-). So remember: when you're in insert mode, <esc> will bring you to command mode; when you're already in command mode, <esc> does nothing (no harm done). So press <esc> two or three times, and you're sure to be in command mode.

Another thing to remember: if you're in command mode and you start entering a number before a command, the command will get repeated that many times. The most used feature of this is deleting lines. Deleting the current line is done with the command dd; deleting (for example) twelve lines can be accomplished using 12dd. Another example is the use of a number in front of G: command 12G (use <shift>-g) will bring you to the beginning of the 12th line. A special number is zero; pressing 0 as the first character in a command means immediately going to the beginning of the line.

Exiting vim

Command Output
:w Save
:w filename Save with this filename
:q quit vim
:q! quit without save
:wq save and quit


Cursor positioning

Key(s) Movement
h one character back
j down one line, same column
k up one line, same column
l,<space> one character forward
b one word back (to beginning of previous word)
e one word back (to end of previous word)
w one word forward
<enter> beginning of next line
0 (zero) beginning of line
$ end of line
nG to beginning of line n; if no number given, the last line of the file
:n also to beginning of line n (but this is visible as command)

Note that h,j,k,l is one block on your (US) keyboard

Searching

Key(s) Search
/pattern Moves the cursor to the next occurrence of pattern; will wrap around to the beginning of the file from the last occurence
?pattern Moves the cursor backward to the previous occurrence of pattern; will wrap around to the end of the file from the first occurence
n repeats last pattern search (either forward or backward)

Text insertion

Key(s) Effect
a appends text after cursor & switches to Insert mode
A appends text at the end of the line & switches to Insert mode
i inserts text before cursor & switches to Insert mode
I inserts text at the beginning of the line & switches to Insert mode
o opens new line below the current line for text insertion & switches to Insert mode
O opens new line above the current line for text insertion & switches to Insert mode
<del> overwrites last character during text insertion
<esc> stops text insertion. The escape key on the DECstations is the <F11> key

Text deletion

Key(s) Effect
x deletes character under the cursor
dd deletes current line
dw deletes word under the cursor
d) deletes to the end of the current sentence (up to and including the dot)
D deletes to the end of the current line
d$ same (deletes to the end of the current line)
p "paste", puts the buffer (e.g. text from the previous deletion) after the position of the cursor
P "Paste", puts the buffer (e.g. text from the previous deletion) before the position of the cursor