VI advanced command collection and VIM Application Instances 1. Swap two character locations XP 2. Change the upper and lower lines DDP 3. Reverse the File Content : G/^/M0/(not passed) 4. Merge the upper and lower rows J 5. Delete all rows DG 6. delete from the current position to the end of the row D $ 7. copy from the current position to the end of the row Y $ if you want to paste P to other places, bash supports a large number of keyboard shortcuts for command line navigation and editing. The shortcut key Ctrl-A can move the cursor to the beginning of the command line, while Ctrl-e can move the cursor to the end of the command line. The CTRL-W shortcut can quickly delete the characters before the cursor, while Ctrl-K can immediately delete the characters after the cursor. Use ctrl-y to cancel the delete operation. Because VI is built on ex, when you type:, it comes to the ex command status. 8. : AB string strings For example, "AB USA United States of America ", When you insert USA into the document United States of America came out. 9. : Map keys new_seq Define your current Keyboard Command 10. : Set [all] VI or ex editing status Show each line: Set nu 11. In the command state, nyy indicates copying the content of the next n lines starting from the cursor line, P indicates paste, and the copied content can be pasted at the cursor Below. 12. Replace a single character with R, replace multiple characters with R, replace one character with S, and replace the whole line with S. 13. : % S/old_word/new_word/g This command replaces a specific string in the entire file. 14. cursor control K: Move up NK move up n rows J: Move Down NJ move down n rows Move the cursor to line N and press mk Move the cursor to Row M and press "ay 'K Store row n to m in register a, and so on. Register B, c... In this way, you can paste the frequently used content that needs to be reused into different registers for backup. To paste it somewhere, move the cursor directly to a certain place, and press 'ap, and so on. B, C... registers, etc. In the current screen H jump to the first line M jumps to the middle row. L jump to the last line 15. Table 8-2 delete commands DELETE command operation D l Delete the current character (same as the X command) D 0: Delete to the starting position of a row D ^ Delete to the first character position of a line (excluding spaces or ta B characters) D w: delete it to the end of a word D 3 W Delete to the end of the third word D B. Delete it to the start position of a word. D w is deleted to the end of a word with a space as the separator. D B: delete it to the start position of a word with a space as the separator. D 7 B is deleted to the start position of the first seven words with spaces as separators D) Delete to the end of a statement D 4) Delete to the end of the fourth statement D (delete to the start position of a statement) D} Delete to the end of a paragraph D {Delete to the beginning of a paragraph D 7 {Delete the first 7th paragraph positions before the start position of the current paragraph D. Delete the current row. D/t e x T: Delete the position of the text specified in "t e x T" from the text until the next Content between locations (but not including the words) D FC deletes the position where the character "C" appears from the text until the next character appears (including Between characters) D TC deletes the content from the current row until the next character "C" appears D. Delete it to the end of a row. D $ Delete to the end of a row D. Delete the contents of the five rows starting from the current row. D l Delete the content until the last line on the screen D H Delete the content until the first line on the screen D G deletes the content until the end of the work Cache D 1g content deleted until the beginning of the work Cache Modify command operation C l change the current character C w to the end of a word C 3 W to the end of the third word C B is changed to the start position of a word. C w is changed to the end position of a word with a space as the Separator C B is changed to the start position of a word with spaces as the separator. C 7 B is changed to the start position of the first seven words with spaces as separators C 0: change to the end of a row C) modify to the end of a statement C 4) modify to the end of the fourth statement C (modify to the starting position of a statement) C} modify to the end of a paragraph C {modify to the start position of a paragraph C 7 {change to the first 7th paragraph positions before the start position of the current paragraph C TC modifies the content between the current row and the position where the next character C appears C. modify it to the end of a row. C. modify the current row 5 C: modify the content of the 5 rows starting from the current row . Repeat the previous modification! Table 8-4 replacement commands Replace command operation S replaces the current character with one or more characters S replaces the current row with one or more characters 5 s Replace the 5 characters starting from the current character with one or more characters VI replacement rules: : G/S1/S/s2/S3/g The first G indicates that each row including S1 is replaced, and the second G indicates that all S2 of each row including S1 are replaced by S3. S indicates replacement. S2 indicates the string to be replaced. It can be the same as S1 (use // If the string is the same), and S3 indicates replacement string. 16. FX Move to the right to x characters FX Move to the left to X characters TX Move to the right before X TX Move to the left behind x characters (Note: X indicates the characters in the preceding four commands) ; Semicolon, used with F and t, repeat once , Comma (,), used together with F and t, and repeated in the opposite direction 17. VI environment option Solaris KSh Noautoindent nomodelines noshowmode Autoprint nonumber noslowopen Noautowrite nonovice tabstop = 8 Nobeautify nooptimize taglength = 0 Directory =/var/tmp paragraphs = iplpppqpp lipplpipnpbtags = tags/usr/lib/tags Noedcompatible prompt tagstack Noerrorbells noreadonly term = VT100 Noexrc redraw noterse Flash remap timeout Hardtabs = 8 report = 5 ttytype = VT100 Noignorecase scroll = 11 warn Nolisp sections = nhshh huuhsh + C window = 23 Nolist shell =/bin/KSh wrapscan Magic shiftwidth = 8 wrapmargin = 0 Mesg noshowmatch nowriteany For C-shell: Setenv exinit "set nu" For Bourne or Korn shell: Exinit = "set nu"; export exinit For Korn shell only (alternate method ): Typeset-x exinit = "set nu" Set VI environment options in. profile. All the above tests have been performed. 18. Mark text Mchar: Mark the position of the current cursor with a letter char 'Char moves to the position marked by char 'Char moves to the beginning of the row where the char mark is located "Move to the last position of the current row (after the cursor moves)-a double quotation mark ''Move to the beginning of the row where the first row is located (after the cursor moves)-two single quotes 19. At the same time when vi multiple files, the CTRL-SHIFT-6 back to the previous file, in the VI file and the last VI file switch. But I found a bug: when I switched to the previous file with a CTRL-SHIFT-6 and checked the multi-file VI Status with: ARGs, The current VI file is still displayed at the bottom of the screen. (Via HP-UX, Solaris, AIX) You can also use: : E # Switch 20. Under SCO, VI should be added with the same characters before the text % S/^/content to be added/G must be added with the same character after the text % S/$/content to be added/g 21. How do I remove the ^ m hard carriage return in the text? You do not need to use binary to pass back and then use ASCII to pass back. It is implemented using shell or Unix statements. Cat filename | tr-D'/015 '> newfile Different UNIX systems also have some different commands, such as doscp. Sed can also implement this function. Dos2unix filename filename2 Otherwise Unix2dos filename filename2 In VI: $ S/^ m/g ^ Is crtl-V crtl-m 22. How to replace a string of a file with another string under "Unix Command Line" Sed's/string1/string2/GP 'file1> file2 23. Ping all the addresses in/etc/hosts twice. 1 #/usr/bin/sh 2 # grad/etc/hosts and Ping each address 3 CAT/etc/hosts | grep-V '^ #' | while read line 4 do 5 ADDR = 'awk' {print $1 }'' 6 For machine in $ ADDR 7 do 8 Ping $ machine-N 2 9 done 10 done 24 To the previous function [[, to the next function], pair the brackets (%), cross reference CTRL _] (use ctags for indexing in advance), and use e # 'to edit a function: VI-T function name: edit the encrypted text vi-x 25 In the insert mode, press Ctrl + P to automatically add the remaining words, depending on the rule: tags, some words, and so on. In today's world, there are many types of text editors, and there is a trend of "getting eye-catching with flowers. There is an old saying in China: it is not as good as a coincidence. As a professional in the IT industry, it is vital to choose an excellent editing software. I believe that Vim in Linux will benefit you for life with its powerful functions and infinite charm. Author: Kaiseki (iloveibm@163.com) From: http://www-900.ibm.com/developerWorks/cn/linux/l-tip-prompt/tip15/index.shtml Thanks to extensive transplantation, we can see Vim in both DOS and Windows on a PC, as well as AIX on a Windows server, or on a Windows server, or an AIX on a Windows server, or IBM mainframe S/6000. However, for beginners, Vim's user interface and usage are very unconventional and even confusing. In fact, the vim editor is specially designed for experienced users. Its Interface and usage provide faster speed and stronger functions. For users familiar with it, many of Vim's features save time and number of times of hitting, and can complete some functions that cannot be completed by other editors. The best way to learn is practice. Only in this way can you truly grasp the essence of the learning. The examples listed in this article are all encountered by the author in actual work and are representative. Please read them carefully. Now let's share a wonderful Vim world! Example 1: two commonly used command sequences XP switches the cursor position between two characters. The position of the two rows at the cursor at the top and bottom of the DDP switch. Example 2: repeat the same character Sometimes, we may want to input the same character multiple times. The Vim insertion function can do a good job. The command 80i = ^ ESC can enter 80 characters = at a time. Of course, 80a = ^ ESC can also complete the above functions. Note: ^ ESC indicates the ESC key in the upper-left corner of the keyboard. Example 3: merge two text data files one by one and give a ruler The content of Data File 1 is as follows: 1 ----- 2 ----- 3 ----- The data file 2 is as follows: 1 ==== 2 ==== 3 ==== The results are as follows: | -------- 1---------2-------3---------4---------5 1 ----- 1 ==== | -------- 1---------2-------3---------4---------5 2 ----- 2 ==== | -------- 1---------2-------3---------4---------5 3 ----- 3 ==== You may say that this is not simple, it is nothing more than copying and pasting repeatedly. Any text editor can complete the above functions. However, if these two files are large and each file has thousands of lines, I am afraid it will be difficult to copy and paste them simply. Therefore, what we care about is to find an effective way to leave boring work to computers, and we only need to issue instructions. To achieve this, follow these steps: (I) Merge the two files. The results are as follows: 1 ----- 2 ----- 3 ----- 1 ==== 2 ==== 3 ==== (Ii) Insert a flag line at the beginning and end of the two files to distinguish them. This article uses a whole line! Character 1 ----- 2 ----- 3 ----- !!!!!!!!!!!!!!!!!!!!!!!! 1 ==== 2 ==== 3 ==== (3) enter the ruler below the flag line 1 ----- 2 ----- 3 ----- !!!!!!!!!!!!!!!!!!!!!!!! | -------- 1---------2-------3---------4---------5 1 ==== 2 ==== 3 ==== (4) execute the macro Command Script merge_2r.vim, that is, press the following key in the vim Editor: So merge_2r.vim press ENTER (V) Press the = key on the keyboard. The execution result is as follows: | -------- 1---------2-------3---------4---------5 1 ----- 1 ==== | -------- 1---------2-------3---------4---------5 2 ----- 2 ==== | -------- 1---------2-------3---------4---------5 3 ----- 3 ==== | -------- 1---------2-------3---------4---------5 !!!!!!!!!!!!!!!!!!!!!!!! | -------- 1---------2-------3---------4---------5 (6) Delete the last three rows to obtain the expected results. | -------- 1---------2-------3---------4---------5 1 ----- 1 ==== | -------- 1---------2-------3---------4---------5 2 ----- 2 ==== | -------- 1---------2-------3---------4---------5 3 ----- 3 ==== How is it, simple? Please try it on your own. Next, I will explain in detail the macro Command Script merge_2r.vim. The script content is as follows: "-------------------------------------------------------------------- "Macro function: Merge file1 and file2, have rcord in every record "Date: 2001/12/01 "Author: Yan Shi "-------------------------------------------------------------------- "1 ----- "2 -----} sample file1 "3 ----- "!!!!!!!!!!!!!!!!!!!!!!!! Flag row "| -------- 1---------2---------3---------4---------5 r133 "1 = "2 ===} sample file2 "3 = "-------------------------------------------------------------------- : 1 : Map = MA /!!!!! ^ M +:. CO 'a-1 ^ m /!!!!! ^ M2 +:. m'a ^ m + = Each line in the first 14 rows starts with ", indicating that this line is a comment line and is not actually executed. It is just easy for readers to read. Only the last two lines are the real code lines. Note: In this example, ^ m indicates the Enter key on the keyboard, which is not a ^ or M character. To make it clear, I split the command line and explain it one by one. First, set the first line to the current line, and then execute the map command to map a large string of VIM commands to the character =. The Vim commands are executed in nine steps: Ma marks the first line of Data File 1 as 1 ----- 2 ----- 3 ----- !!!!!!!!!!!!!!!!!!!!!!!! | -------- 1---------2-------3---------4---------5 1 ==== 2 ==== 3 ==== /!!!!! ^ M locate the flag row and set it to the current row 1 ----- 2 ----- 3 ----- !!!!!!!!!!!!!!!!!!!!!!!! | -------- 1---------2-------3---------4---------5 1 ==== 2 ==== 3 ==== + Move the cursor down a row to set the ruler row to the current row. 1 ----- 2 ----- 3 ----- !!!!!!!!!!!!!!!!!!!!!!!! | -------- 1---------2-------3---------4---------5 1 ==== 2 ==== 3 ==== :. CO 'a-1 ^ m copy the row of the ruler to the top of the row marked (the first row of Data File 1) | -------- 1---------2-------3---------4---------5 1 ----- 2 ----- 3 ----- !!!!!!!!!!!!!!!!!!!!!!!! | -------- 1---------2-------3---------4---------5 1 ==== 2 ==== 3 ==== /!!!!! ^ M finds the flag row again and sets it to the current row. | -------- 1---------2-------3---------4---------5 1 ----- 2 ----- 3 ----- !!!!!!!!!!!!!!!!!!!!!!!! | -------- 1---------2-------3---------4---------5 1 ==== 2 ==== 3 ==== 2 + move the cursor down two rows, that is, the first row of data file 2 is set to the current row. | -------- 1---------2-------3---------4---------5 1 ----- 2 ----- 3 ----- !!!!!!!!!!!!!!!!!!!!!!!! | -------- 1---------2-------3---------4---------5 1 ==== 2 ==== 3 ==== :. M'a ^ m move the first row of data file 2 below the marked row | -------- 1---------2-------3---------4---------5 1 ----- 1 ==== 2 ----- 3 ----- !!!!!!!!!!!!!!!!!!!!!!!! | -------- 1---------2-------3---------4---------5 2 ==== 3 ==== + Move the cursor down a row, that is, the second row of Data File 1 is set to the current row. | -------- 1---------2-------3---------4---------5 1 ----- 1 ==== 2 ----- 3 ----- !!!!!!!!!!!!!!!!!!!!!!!! | -------- 1---------2-------3---------4---------5 2 ==== 3 ==== = This step is critical. It is a typical recursive call that repeats the preceding steps. Example 4: add the row number to the file At work, we sometimes want to put the row number into the file, and VIM provides the function: Set nu can only display the row number, Cannot edit or put it into the file, the following macro Command Script row_num.vim can complete this function. "------------------------------------------ "Macro function: source file add row_num "Date: 2001/12/01 "Author: Yan Shi "------------------------------------------ : % S/^ I/ : $ : Let end = line (".") : 1 "------------------------------------------ : Let num = 1 : While num <= end : Let line = Getline (".") : Let temp = substitute (line, $, num ,"") : Call setline (".", temp) : + : Let num = num + 1 : Endwhile "------------------------------------------ Note: In this example, ^ I represents the tab key on the keyboard. It is not a ^ Or I character. Next, I will explain the macro Command Script one by one. : % S/^ I/Add a Tab character at the beginning of each line : $ To the last line of the file : Let end = line (".") the row number at the end of the line => variable end. The function of line is to get the row number of the specified row. The parameter "." Here indicates the current row. : 1 to the first line of the file "------------------------------------------ : Let num = 1 1 => counter : While num <= end : Let line = Getline (".") Get the content of the current row ==> Variable Line : Let line = substitute (line, $, num, "") Place the row number before the line variable : Call setline (".", line) writes the content of the variable line back to the current row. : + Move one row down : Let num = num + 1 counter plus one : Endwhile executes cyclically until the end of the file "------------------------------------------ Use of Regular Expressions Many tools in Unix/Linux are powerful and flexible because of regular syntax and metacharacters, which are also the essence of vim and even Unix/Linux systems. Because of its flexible use, it is difficult to grasp it. If you do not really understand it, there will be a strange error in actual use. Therefore, it is necessary to spend more effort on this part of knowledge. The following is an example. Example 5: There is a file containing the information of a Chinese employee of a foreign company. The first is the name, the second is two spaces, and the second is the 15-digit ID card number. Zhang. Fei 430759701022003 Diao. chan651302801225012 Guan. yu342869680413001 XI. Shi 120638780214006 Liu. Bei 210324650708001 The following problems need to be solved: According to the habits of foreigners, it should be the first and last names. Therefore, the name field in the file needs to be modified. The first letter of the surname and name should be in upper case. Based on the ID card number, you can also determine the date of birth and add it as a new field. Based on the ID card number, you can determine the gender. Add male for male and female for female. Separate male and female employees. Male employees are in front and female employees are in the back. Align the data of each field to the left The final result is as follows: Fei. Zhang 430759701022003 male Yu. Guan 342869680413001 1968/04/13 male BEI. Liu 210324650708001 1965/07/08 male ----------------------------------------------- Chan. Diao 651302801225012 female Shi. XI 120638780214006 female To complete the above functions, you only need to execute the script "employee. Vim" and press Enter. The script content is as follows: : % S /// : % S // (.../)/(*/)/1/ : % S // ([A-Za-Z] [A-Za-Z] */)/(/. /)/([A-Za-Z] [A-Za-Z] */) // U/3/2/u/1/ : % S/$/xxxxxx/ : % S // ([0-9]/{6}/)/([0-9]/{6 }/) /([0-9]/{3}/)/(xxxxxx/) // 1/2/3/2/ : % S // (../)/(../) $/19/1 ///2 // 3 : % S/$/xxxxxx/ : % S // ([0-9]/{14} [13579]/)/(. */)/(xxxxxx/) // 1/2 male/ : % S // ([0-9]/{14} [02468]/)/(. */)/(xxxxxx/) // 1/2 female/ : $ : S/. */& ^ m ----------------------------------------------- : G/female/. M $ In this script, a large number of regular expressions are used. Here we will only briefly introduce the involved regular expressions. There are quite a few regular expressions. This article cannot take up a large amount of space to describe. Thank you for your understanding. % Address range symbol, representing all rows in the file, which is equivalent to address range 1, $ . Matches any single character (except line breaks). For example, Y. S can match Yas Y. S or Y. S. * Matches the previous character Zero or multiple times. For example, y * s can match yys yyyyys or S. $ Matches the end of the row. & Indicates the string that appears in the pattern match. For example, S/ABC/& def replaces the ABC of the current row with abcdef. [] Matches the characters in []. For example, [ABC] matches the characters A, B, or C, and [A-Za-Z] to match all English characters. /(/)/(And/) can be replaced by/num. /1/2/3 replace/(and. /U capital the first letter of the subsequent string. /{Num} matches the num of the previous character. Now, we will explain the script one by one, hoping to help you understand the regular syntax. (1): % S /// Replace the two spaces in each line of the file with 10 spaces. Zhang. Fei 430759701022003 Diao. chan651302801225012 Guan. yu342869680413001 XI. Shi 120638780214006 Liu. Bei 210324650708001 (2): % S // (...)/(*/)/1/ Retain the first 12 characters of the line and delete the remaining spaces. In this way, the first two fields are aligned. Zhang. Fei 430759701022003 Diao. chan651302801225012 Guan. yu342869680413001 XI. Shi 120638780214006 Liu. Bei 210324650708001 (3): % S // ([A-Za-Z] [A-Za-Z] */)/(/. /)/([A-Za-Z] [A-Za-Z] */) // U/3/2/u/1/ Replace the names of employees in each row in the file and uppercase the first letter. Fei. Zhang 430759701022003 Chan. Diao 651302801225012 Yu. Guan 342869680413001 Shi. XI 120638780214006 BEI. Liu 210324650708001 (4): % S/$/xxxxxx/ Add 2 spaces and 6 X at the end of each row Fei. Zhang 430759701022003 xxxxxx Chan. Diao 651302801225012 xxxxxx Yu. Guan 342869680413001 xxxxxx Shi. XI 120638780214006 xxxxxx BEI. Liu 210324650708001 xxxxxx Failed: % S // ([0-9]/{6}/)/([0-9]/{6 }/) /([0-9]/{3}/)/(xxxxxx/) // 1/2/3/2/ Replace xxxxxx with the date of birth. Fei. Zhang 430759701022003 701022 Chan. Diao 651302801225012 801225 Yu.guan 342869680413001 680413 Shi. XI 120638780214006 780214 BEI. liu210324650708001 650708 Usage: % S // (../)/(../) $/19/1 ///2 // 3 Separate "year", "month", "/", and add "19" years ago. Fei. Zhang 430759701022003 Chan. Diao 651302801225012 Yu. Guan 342869680413001 1968/04/13 Shi. XI 120638780214006 BEI. Liu 210324650708001 Usage: % S/$/xxxxxx/ Add 2 spaces and 6 X at the end of each row Fei. Zhang 430759701022003 xxxxxx Chan. Diao 651302801225012 xxxxxx Yu. Guan 342869680413001 1968/04/13 xxxxxx Shi. XI 120638780214006 xxxxxx BEI. liu210324650708001 1965/07/08 xxxxxx Failed: % S // ([0-9]/{14} [13579]/)/(. */)/(xxxxxx/) // 1/2 male/ The last digit of the ID number is odd. Replace xxxxxx with male. Fei. Zhang 430759701022003 male Chan. Diao 651302801225012 xxxxxx Yu. Guan 342869680413001 1968/04/13 male Shi. XI 120638780214006 xxxxxx BEI. Liu 210324650708001 1965/07/08 male Usage: % S // ([0-9]/{14} [02468]/)/(. */)/(xxxxxx/) // 1/2 female/ The last digit of the ID card number is an even number. Replace xxxxxx with female. Fei. Zhang 430759701022003 male Chan. Diao 651302801225012 female Yu. Guan 342869680413001 1968/04/13 male Shi. XI 120638780214006 female BEI. Liu 210324650708001 1965/07/08 male Rows: $ to the last row of the file Generation: S/. */& ^ m ----------------------------------------------- Insert a line of "-" characters in the last line of the file. Fei. Zhang 430759701022003 male Chan. Diao 651302801225012 female Yu. Guan 342869680413001 1968/04/13 male Shi. XI 120638780214006 female BEI. Liu 210324650708001 1965/07/08 male ----------------------------------------------- Memory: G/female/. M $ Move all records of female employees to the end of the file. Fei. Zhang 430759701022003 male Yu. Guan 342869680413001 1968/04/13 male BEI. Liu 210324650708001 1965/07/08 male ----------------------------------------------- Chan. Diao 651302801225012 female Shi. XI 120638780214006 female I am currently engaged in mainframe (IBM S/390) software development for a foreign company, and all work is carried out in the TSO environment. Test data must be prepared to test the program. People who have experience in mainframe development will know that Tso can also be used to input bytes-type data. It is very troublesome to input hexadecimal data. Because hexadecimal numbers are arranged vertically, the input is inconvenient and prone to misplacement. How can this problem be solved? I tried several methods to prove that Vim is the most convenient. Example 6: Convert 1234567890 abcdef to 13579ace 24680bdf. In this way, the data can be easily pasted into the TSO environment. The macro Command Script change_d.vim is provided below. "---------------------------------------------------- "Macro function: Convert char arrange direction " "Sample: 40 50 60 ==> 4 5 6 "0 0 0 "Date: 2001/12/01 "Author: Yan Shi "---------------------------------------------------- : S/. */& ^ m/ : 1 : Map = malx + $ p-'al = Description: (1): S/. */& ^ m/Add an empty row under the Data row. (2): 1. Return to the first line of the file. (3): Map = malx + $ p-'al = map a large string of VIM commands to the character = ① Ma marks the first character as ② L move the cursor one character to the right ③ X Delete the character at the cursor ④ + Move to the next row ⑤ $ To the end of the line ⑥ P paste the deleted characters 7-back to the top line Comment 'A is returned to mark characters L move the cursor one character to the right Iterator = recursive call. Repeat the preceding steps until all data of the row is processed. The above examples show the powerful text processing functions of VIM, but this far cannot cover the whole picture. Vim has a lot of commands and is flexible to use. It requires some effort to be proficient. I am still young and lack of experience. I hope this article can serve as a reference. Due to the time, the above instances are only tested in DOS and Windows environments, and no further tests are conducted in other systems. I hope your colleagues and predecessors will not give me any advice. Thank you! ※Vim indicates VI improved, which is backward compatible with vi99 %. Besides, VIM provides many functions not available in VI and has many built-in functions. Therefore, it is recommended that experienced VI users have some knowledge of vim and you will find that it is wise to switch to VIM. For more information about vim, see the http://www.vim.org Note: This article uses Vim 6.0 Author Profile YAN Shi, an engineer. You can contact him by email: iloveibm@163.com or yan-shi@sino-com.com. Appendix A: an online tutorial on using VI as a form Http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/linux-onlinecourse-bytitle/9F896668D7EB5CA948256A710030E157? OpenDocument Appendix B: VI command FAQs Http://www.linuxsir.com/bbs/showthread.php? S = & threadid = 23957. Appendix C: Command Line online tutorial: Run vimtutor to learn! |