vim represents a newer, improved version of the vi text editor for Linux. vim is installed by default on CentOS 7, the most recent version of CentOS. However, some older and minimal base installs will only include the original vi by default.
The biggest difference between vi and vim is advanced ease-of-use features such as moving the cursor with the arrow keys. Where vim will allow the user to navigate a text file with the arrow keys, vi is restricted to using the “h”, “j”, “k”, “l” keys, listed as follows.
vi text document navigation −
Key | Action |
j | Move down one line |
k | Move up one line |
l | Move to the left one the character |
h | Move to the right one character |
Using vim the same actions can be accomplished with the arrow keys on a standard English (and another common language) based qwerty, keyboard layout. Similarly, vi will often not interpret the numeric keypad on as well.
Mostly, these days, vi will be symlinked to vim. If you ever find it frustrating your arrow keys are doing things unexpected when pressed, try using your package manager to install vim.
vim uses the concept of modes when manipulating and opening files. The two modes we will focus on are −
- normal − This is the mode vim uses when a file is first opened, and allows for entering commands
- insert − The insert mode is used to actually edit text in a file.
Let’s open a file in vim. We will use the CentOS default dictionary located at /usr/share/dict −
[root@localhost rdc]# cp /usr/share/dict/words
What you see is the text file opened in normal mode. Now practice navigating the document using the arrow keys. Also, try using the h,j,k, and keys to navigate the document.
Vim expects us to send commands for file operations. To enable line number, use the colon key: shift+: . Your cursor will now appear at the bottom of the document. Type “set nu” and then hit enter.
:set nu
Now, we will always know where in the file we are. This is also a necessity when programming in vim. Yes! vim has the best syntax highlighting and can be used for making Ruby, Perl, Python, Bash, PHP, and other scripts.
The following table lists the most common commands in normal mode.
Command | Action |
G | Go to the end of the file |
gg | Go to the beginning of the file |
x | Delete the selected character |
u | Undo the last modifications |
Enter | Jump forward bylines |
dd | Delete the entire line |
? | Search for a string |
/ | Proceed to the next search occurrence |
Please try the following tasks in vim, to become familiar with them.
- Search for the string “test”, then first 5 occurrences
- Move to the beginning of the document after finding the first 5 occurrences of “test”
- Go to line 100 using enter
- Delete the entire word using “x”
- Undo the deletions using “u”
- Delete the entire line using “dd”
- Reconstruct the line using “u”
We will pretend that we made edits on a critical file and want to be sure not to save any unintended changes. Hit the shift+: and type: q!. This will exit vim, discarding any changes made.
Now, we want to actually edit a file in vim: at the console type: vim myfile.txt
We are now looking at a blank text buffer in vim. Let’s write something: say – hit “i”.
vim is now in insert mode, allowing us to make edits to a file just like in Notepad. Type a few paragraphs in your buffer, whatever you want. Later, use the following steps to save the file −
- Step 1 − Press the escape key
- Step 2 − Press shift+:
- Step 3 − type w myfile.txt:w and hit Enter
- Step 4 − Press shift+:
- Step 5 − Type q! and hit Enter
We have just created a text file named, myfile.txt and saved it −
[root@localhost]# cat myfile.txt
this is my txt file.
[root@localhost]#
Linux File Input/Output Redirection
The pipe character “|“, will take an output from the first command, passing it to the next command. This is known as Standard Output or stdout. The other common Linux redirector is Standard Input or stdin.
Following are two examples; first using the cat command putting the file contents to stdout. Second, using cat to read a file with the standard input redirector outputting its contents.
STDOUT
[root@centosLocal centos]# cat output.txt
Hello,
I am coming from Standard output or STDOUT.
[root@centosLocal centos]#
STDIN
[root@centosLocal centos]# cat < stdin.txt
Hello,
I am being read form Standard input, STDIN.
[root@centosLocal centos]#
Now, let’s “pipe” the stdout of cat to another command.
[root@centosLocal centos]# cat output.txt | wc -l
2
[root@centosLocal centos]#
Above, we passed cat’sstdout to wc for processing the pipe character. wc then processed the output from cat printing the line count of output.txt to the terminal. Think of the pipe character as a “pipe” passing output from one command, to be processed by the next command.
Following are the key concepts to remember when dealing with command redirection.
Number | File Descriptor | Character |
0 | standard input | < |
1 | standard output | > |
2 | standard error | |
append stdout | >> | |
assign redirection | & | |
pipe stdout | | |