Difference between revisions of "Introduction to Linux in HPC/The vim text editor"

From HPC Wiki
Introduction to Linux in HPC/The vim text editor
Jump to navigation Jump to search
m (Tweak page sorting)
 
(31 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
[[Category:Tutorials|vim - vi Improved (Text Editor)]]<nowiki />
 +
{{DISPLAYTITLE:vim - vi Improved (Text Editor)}}<nowiki />
 +
{{Syllabus Introduction to Linux}}<nowiki />
 
__TOC__
 
__TOC__
 +
 +
This part of the Linux tutorials introduces the vim text editor and describes its main features and use cases. A short explanation of the most important commands paired with examples on how to use them allow the user to delve right in. The tutorial demonstrates the basics, like opening/writing files or moving within the text as well as the most often employed tasks like search&replace or copy&paste which makes it interesting to both complete beginners and more intermediate users. The vim text editor's main advantage is that it's present in most unix operational systems, futhermore it's highly configurable and provides an extensive plugin system.
  
 
=== Video === <!--T:5-->
 
=== Video === <!--T:5-->
  
<youtube width="600" height="400" right>IfD9IPixgpo</youtube>
+
<youtube width="600" height="340" right>QPWdUkgGd3I</youtube>
  
[https://git-ce.rwth-aachen.de/hpc.nrw/ap2/tutorials/linux/-/blob/master/Slides/Linux_Intro/Linux_Intro.pdf Linux Introduction] Slides 91 - 99 (9 pages)
+
([[Media:HPC.NRW_Introduction_to_Linux_in_HPC_08_The_vim_Text_Editor.pdf | Slides as pdf]])
  
 +
=== Quiz === <!--T:5--> 
  
=== Slide Layout === <!--T:5-->
+
{{hidden begin
 +
|title = How many windows does vim use?
 +
}}
 +
<quiz display=simple>
 +
{
 +
|type="()"}
 +
- it runs in the console and opens additional windows
 +
|| 
 +
- it can start in the console but it requires the X window system and opens additional windows
 +
||
 +
+  it runs completely inside the console
 +
|| Explanation: <code>vim</code> doesn't require the X window system or any additional windows, it runs completely inside the console.
 +
</quiz>
 +
{{hidden end}}
  
 +
{{hidden begin
 +
|title = How many modes does vim have?
 +
}}
 +
<quiz display=simple>
 +
{
 +
|type="()"}
 +
-  it has only one mode
 +
|| 
 +
-  it has two modes
 +
||
 +
+  it has at least three modes
 +
|| Explanation: <code>vi</code> has the modes normal, insert and command. In addition, <code>vim</code> hast the modes visual, select und ex-mode, not covered in this tutorial.
 +
</quiz>
 +
{{hidden end}}
  
    page 1:
+
{{hidden begin
        vi and vim are terminal based text editors.
+
|title = How to enter the insert mode of <code>vim</code>?
        Advantages vs. disadvantages
+
}}
    page 2 - 6:
+
<quiz display=simple>
        animation
+
{
            normal mode -> insert mode
+
|type="()"}
            insert mode -> normal mode
+
- press <code>enter</code> key
            normal mode -> command mode
+
||
            command mode -> normal mode
+
+ press <code>i</code> key
    page 7:
+
|| Explanation: If you are not in the insert mode, the <code>i</code> key means insert and by pressing it you can enter the insert mode. On the other hand, the <code>Esc</code> key brings you out of the insert mode. The behavior of the enter key depends on in which mode of vim you are. If you are in the normal mode, you navigate to the next line. If you are in the insert mode already, you start a new line.
        arrow keys or h, j, k, l for navigation
+
- press <code>Esc</code> key
        undo
+
||
        quit with/without saving
+
</quiz>
        search for text
+
{{hidden end}}
        yank
 
    page 8:
 
        If you forget which mode you are in, keep pressing Esc.
 
        You may need a lot of time to learn vim.
 
    page 9:
 
        Knowing vim basics is important for Linux users.
 
        However there are also many GUI-based text editors.
 
  
 +
{{hidden begin
 +
|title = How to save a file and exit during normal mode?
 +
}}
 +
<quiz display=simple>
 +
{
 +
|type="()"}
 +
- press <code>:q!</code> keys and <code>enter</code>
 +
||
 +
+ press <code>:wq</code> keys and <code>enter</code> or <code>:X</code> keys and <code>enter</code> or <code>ZZ</code> keys
 +
|| Explanation: Any of the pressed key combinations will trigger a save and exit when in normal mode. The sequence <code>:q!</code> would exit without writing the file.
 +
- press <code>Ctrl-x Ctrl-s</code> keys
 +
||
 +
</quiz>
 +
{{hidden end}}
  
=== Quiz === <!--T:5-->
+
{{hidden begin
 +
|title = How to copy and paste <code>5</code> entire lines in normal mode?
 +
}}
 +
<quiz display=simple>
 +
{
 +
|type="()"}
 +
+ press <code>5yy</code> keys, move the cursor and press <code>p</code>
 +
|| Explanation: commands can be repeated by placing an integer value before them. In this case 5 lines are copied by pressing <code>5yy</code>. The paste command is executed by pressing <code>p</code>, pressing <code>5p</code> would have pasted 25 lines.
 +
- press <code>5yy</code> keys, move the cursor and press <code>5p</code>
 +
||
 +
- press <code>Ctrl-c Ctrl-v</code> keys
 +
||
 +
</quiz>
 +
{{hidden end}}
 +
 
 +
{{hidden begin
 +
|title = How to perform a forward search for the pattern <code>foo</code>, afterwards a backward search for the pattern <code>bar</code> in normal mode?
 +
}}
 +
<quiz display=simple>
 +
{
 +
|type="()"}
 +
- press <code>/foo</code> and <code>enter</code>, afterwards <code>//bar</code> and <code>enter</code>
 +
||
 +
+ press <code>/foo</code> and <code>enter</code>, afterwards <code>?bar</code> and <code>enter</code>
 +
|| Explanation: the described commands will perform a search for a regex pattern, either forward (<code>/</code>) or backward (<code>?</code>), depending on the prefix
 +
- press <code>:f/foo/</code> and <code>enter</code>, afterwards <code>:r/bar/</code> and <code>enter</code>
 +
||
 +
</quiz>
 +
{{hidden end}}
  
  
 
{{hidden begin  
 
{{hidden begin  
|title = 1. How to enter the insert mode of <code>vim</code>?
+
|title = How to search and replace all occurences of the pattern <code>foo</code> with <code>bar</code> in normal mode?
 
}}
 
}}
 
<quiz display=simple>
 
<quiz display=simple>
 
{
 
{
 
|type="()"}
 
|type="()"}
- press <code>enter</code> key
+
+ press <code>:s%/foo/bar/g</code> keys and <code>enter</code>
 +
|| Explanation: the command <code>:s%/foo/bar/g</code> will search and replace the pattern in the entire file. Without the <code>g</code> modifier, it would search the entire file as well but only the first occurence in each line would be replaced. The <code>c</code> modifier asks for a confirmation each time.
 +
- press <code>:s%/foo/bar/</code> keys and <code>enter</code>
 
||  
 
||  
+ press <code>i</code> key
+
- press <code>:sed%/foo/bar/</code> keys and <code>enter</code>
|| Explanation: If you are not in the insert mode, the <code>i</code> key means insert and by pressing it you can enter the insert mode. On the other hand, the <code>Esc</code> key brings you out of the insert mode. The behavior of the enter key depends on in which mode of vim you are. If you are in the normal mode, you navigate to the next line. If you are in the insert mode already, you start a new line.
 
- press <code>Esc</code> key
 
 
||  
 
||  
 
</quiz>
 
</quiz>
Line 54: Line 122:
  
 
{{hidden begin  
 
{{hidden begin  
|title = 2. How would you open a file in read-only mode using the <code>vim</code> editor? </br>
+
|title = How would you open a file in read-only mode using the <code>vim</code> editor? </br>
 
Hint: In terminal <code>man vim</code>  
 
Hint: In terminal <code>man vim</code>  
 
}}
 
}}
Line 60: Line 128:
 
{
 
{
 
|type="()"}
 
|type="()"}
+ Click and submit to see the answer
+
- <code>$ vim -r filename</code>
|| <code>$ vim -R filename</code>
+
||
 +
+ <code>$ vim -R filename</code>
 +
|| Explanation: the <code>-R</code> option opens the file read-only. This can be overriden by pressing <code>:w!</code> or <code>:set noro</code>
 +
- <code>$ vim -n filename</code>
 +
||
 
</quiz>
 
</quiz>
 
{{hidden end}}
 
{{hidden end}}
  
  
{{Warning|mode=info|text= '''If you forget which mode you are in while using vim, just keep pressing Esc.'''}}
+
{{Warning|mode=info|text= '''If you forget in which mode you are in while using vim, just keep pressing Esc.'''}}
 
 
{{Warning|mode=warn|text= '''no warnings in this section'''}}
 
  
=== Exercises in Terminal (slide 100) === <!--T:5-->   
+
=== Exercises in Terminal === <!--T:5-->   
  
  1. Create a vim file and write some text in it with insert (pressing <code>i</code>) and than undo and redo the changes.  
+
  1. Create a vim file and write some text in it with insert (pressing <code>i</code>) and than undo and redo the changes.  
 +
2. Copy (yank) multiple lines and paste them
 +
3. Search for a certain pattern and replace it with another
 
   {| role="presentation" class="wikitable mw-collapsible mw-collapsed"
 
   {| role="presentation" class="wikitable mw-collapsible mw-collapsed"
 
     | <strong>Answer:</strong>
 
     | <strong>Answer:</strong>
Line 82: Line 154:
 
         - <code>u</code>: undo last change (can be repeated to undo preceding commands).
 
         - <code>u</code>: undo last change (can be repeated to undo preceding commands).
 
         - <code>Ctrl-r</code>: Redo changes which were undone (undo the undos).
 
         - <code>Ctrl-r</code>: Redo changes which were undone (undo the undos).
 +
      In order to copy a line press <code>yy</code>, for several lines preclude with the command with a number, e.g. <code>5yy</code>.
 +
      For pasting simply press <code>p</code>.
 +
      Search & Replace can be executed with the command <code>:s%/foo/bar/g</code>, it will search and replace the pattern <code>foo</code>
 +
      and replace it with <code>bar</code> in the entire file. Without the <code>g</code> modifier, it would search the entire file as well but only
 +
      the first occurence in each line would be replaced. The <code>c</code> modifier asks for a confirmation each time.
 
     |}
 
     |}
 +
 +
 +
{{Tutorial Navigation
 +
| previous = [[Introduction_to_Linux_in_HPC/Processes | Processes ]]
 +
| main = [[Introduction_to_Linux_in_HPC | Overview ]]
 +
| next = [[Introduction_to_Linux_in_HPC/Shell_scripting | Shell Scripting ]]
 +
}}

Latest revision as of 17:24, 4 December 2020

Tutorial
Title: Introduction to Linux in HPC
Provider: HPC.NRW

Contact: tutorials@hpc.nrw
Type: Multi-part video
Topic Area: HPC Platforms
License: CC-BY-SA
Syllabus

1. Background and History
2. The Command Line
3. Linux Directory Structure
4. Files
5. Text display and search
6. Users and permissions
7. Processes
8. The vim text editor
9. Shell scripting
10. Environment variables
11. System configuration
12. SSH Connections
13. SSH: Graphics and File Transfer
14. Various tips

This part of the Linux tutorials introduces the vim text editor and describes its main features and use cases. A short explanation of the most important commands paired with examples on how to use them allow the user to delve right in. The tutorial demonstrates the basics, like opening/writing files or moving within the text as well as the most often employed tasks like search&replace or copy&paste which makes it interesting to both complete beginners and more intermediate users. The vim text editor's main advantage is that it's present in most unix operational systems, futhermore it's highly configurable and provides an extensive plugin system.

Video

( Slides as pdf)

Quiz

How many windows does vim use?

it runs in the console and opens additional windows
it can start in the console but it requires the X window system and opens additional windows
it runs completely inside the console

How many modes does vim have?

it has only one mode
it has two modes
it has at least three modes

How to enter the insert mode of vim?

press enter key
press i key
press Esc key

How to save a file and exit during normal mode?

press :q! keys and enter
press :wq keys and enter or :X keys and enter or ZZ keys
press Ctrl-x Ctrl-s keys

How to copy and paste 5 entire lines in normal mode?

press 5yy keys, move the cursor and press p
press 5yy keys, move the cursor and press 5p
press Ctrl-c Ctrl-v keys

How to perform a forward search for the pattern foo, afterwards a backward search for the pattern bar in normal mode?

press /foo and enter, afterwards //bar and enter
press /foo and enter, afterwards ?bar and enter
press :f/foo/ and enter, afterwards :r/bar/ and enter


How to search and replace all occurences of the pattern foo with bar in normal mode?

press :s%/foo/bar/g keys and enter
press :s%/foo/bar/ keys and enter
press :sed%/foo/bar/ keys and enter


How would you open a file in read-only mode using the vim editor?
Hint: In terminal man vim

$ vim -r filename
$ vim -R filename
$ vim -n filename


Info:  If you forget in which mode you are in while using vim, just keep pressing Esc.

Exercises in Terminal

1. Create a vim file and write some text in it with insert (pressing i) and than undo and redo the changes. 
2. Copy (yank) multiple lines and paste them
3. Search for a certain pattern and replace it with another



<< Processes

Overview

Shell Scripting >>