Saturday, 6 September 2014

Linux Text editor vim/vi

The vi editor has a long history in UNIX. It is a default text editor of the UNIX and UNIX based
operating system including Linux. Some people say vi is difficult to use. Here is good news for
you; the improved version of vi editor which is called vim editor is a lot easier and user friendly.
In this tutorial, I'll just mention vi but it's the same as vim. I'll mention some vim improvements
over original vi editor at the end of this tutorial.
Create new file with vi editor
Remember that vi/vim has 2 modes, command mode and insert mode. To start vi/vim from
the command line, type:

[root@fileserver /]# vi file1
[root@fileserver /]# vim file1

The vi command will create a new file, the file name I mentioned (file1) in the above command.
To working with vim/vim please read the following example :
To insert text to the new file, press i. Now you can start typing what you want. You probably
notice that delete key and backspace key didn't work. If you want to delete text, you must
enter vi command mode. Press Esc to go the vi command mode. To delete a character, move
cursor to the character and press x to delete that character. To delete a line, move cursor to the
beginning of the line and press dd. To delete n number of lines (n=1, 2, 3, 4….) press ndd. To
continue insert the text again, press i or this time try press a to append text. The different
between i and a command in vi is, a will move the cursor one character after the current cursor.
At this step in the learning process, just remember the vi command mode and vi insert mode.
The vi command mode is everything here, insert text, delete text and save file. Oh we haven't
saved our file yet. To save and exit file, exit from insert mode with Esc press and enter this key
:wq or :x. If you want to exit without saving press Esc, then :q! . We focused more vi/vim tools
use in following sections:
Cursor movement
 h - move left
 j - move down
 k - move up
 l - move right
 w - jump by start of words (punctuation considered words)
 W - jump by words (spaces separate words)
 e - jump to end of words (punctuation considered words)
 E - jump to end of words (no punctuation)
 b - jump backward by words (punctuation considered words)
 B - jump backward by words (no punctuation)
 0 - (zero) start of line
 ^ - first non-blank character of line
 $ - end of line
 G - Go To command (prefix with number - 5G goes to line 5)

Note: Prefix a cursor movement command with a number to repeat it. For example, 4j moves
down 4 lines.

Insert Mode - Inserting/Appending text
 i - start insert mode at cursor
 I - insert at the beginning of the line
 a - append after the cursor
 A - append at the end of the line
 o - open (append) blank line below current line (no need to press return)
 O - open blank line above current line
 ea - append at end of word
 Esc - exit insert mode

 r - replace a single character (does not use insert mode)
 J - join line below to the current one
 cc - change (replace) an entire line
 cw - change (replace) to the end of word
 c$ - change (replace) to the end of line
 s - delete character at cursor and subsitute text
 S - delete line at cursor and substitute text (same as cc)
 xp - transpose two letters (delete and paste, technically)
 u - undo
 . - repeat last command

Marking text (visual mode)
 v - start visual mode, mark lines, then do command (such as y-yank)
 V - start Linewise visual mode
 o - move to other end of marked area
 Ctrl+v - start visual block mode
 O - move to Other corner of block
 aw - mark a word
 ab - a () block (with braces)
 aB - a {} block (with brackets)
 ib - inner () block
 iB - inner {} block
 Esc - exit visual mode

Visual commands
 > - shift right
 < - shift left
 y - yank (copy) marked text
 d - delete marked text
 ~ - switch case

Cut and Paste
 yy - yank (copy) a line
 2yy - yank 2 lines
 yw - yank word
 y$ - yank to end of line
 p - put (paste) the clipboard after cursor
 P - put (paste) before cursor
 dd - delete (cut) a line
 dw - delete (cut) the current word
 x - delete (cut) current character
 shift + d – cut current word to end of line

 :w - write (save) the file, but don't exit
 :wq - write (save) and quit
 :q - quit (fails if anything has changed)
 : q! - quit and throw away changes

 /pattern - search for pattern
 ?pattern - search backward for pattern
 n - repeat search in same direction
 N - repeat search in opposite direction
 :%s/old/new/g - replace all old with new throughout file
 :%s/old/new/gc - replace all old with new throughout file with confirmations

Working with multiple files
 :e filename - Edit a file in a new buffer
 :bnext (or :bn) - go to next buffer
 :bprev (of :bp) - go to previous buffer
 :bd - delete a buffer (close a file)
 :sp filename - Open a file in a new buffer and split window
 ctrl+ws - Split windows
 ctrl+ww - switch between windows
 ctrl+wq - Quit a window
 ctrl+wv - Split windows vertically


The VIM Editor
The VIM editor is the most widely used text processing software in Linux. It is primarily used from the
console and is a powerful software. However, using this software is tricky, and requires a little practice.
I'm listing a couple of options that one might need frequently while using VIM.

Command Output
Insert OR i Sets the editor in insert mode; required to write
new lines.
Esc + u Undo
Esc + yy Yanks (copies) the current line to the clipboard
Esc + Nyy Yanks (copies) N lines to the clipboard starting from
current line

Esc + dd Cuts the current line
Esc + Ndd Cuts N lines starting from current line
Esc + p Pastes the line below the current line
/search_text Searches the written text within the file

Esc + : N Goes to line number N
Esc + : set ic Sets the editor to ignore case mode; useful in

Esc + : set nu Displays line number
Esc + : q! Quits without saving.
Esc + : w Writes the file.
Esc + : wq OR Esc + : x Save & quit.
Esc + : wq! OR Esc + : x! Save & quit forcefully