vi编辑器是unix系统最初的非图形化编辑器。它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行、在文件中移动、插入、编辑和替换文本。其中vim(vi improved)是vi的增强版。
vim编辑器在内存缓冲区中处理数据。只要键入vim命令(或vi,如果这个别名或者链接文件存在的话)和要编辑的文件的名字就可以启动vim编辑器,如图所示:
通常认为,vi有3种使用模式,分别为一般模式、编辑模式和命令模式。在每种模式下面,用户都可以分别执行不同的操作。例如,在一般模式下,用户可以进行光标位置的移动、删除字符,以及复制等;在编辑模式下,用户可以插入字符或者删除字符等;在命令模式下,用户可以保存文件或者退出编辑器等。下面将分别介绍这3种模式的使用方法。
1. 一般模式
当用户刚刚进入vi编辑器的时候,当前的模式就是一般模式。一般模式是3个模式中功能最为负责的模式,一般的操作都在该模式下完成。vi提供了许多关于光标移动的功能键,如表所示:
光标移动快捷键
操作 | 快捷键 | 说明 |
向下移动光标 | 向下方向键、j键或者空格键 | 每按1次键,光标向正下方移动1行 |
向上移动光标 | 向上方向键,k键或者backspace键 | 每按1次键,光标向正上方移动1行 |
向左移动光标 | 向左方向键或者h键 | 每按1次键,光标向左移动1个字符 |
向右移动光标 | 向右方向键或者l键 | 每按1次键,光标向右移动1个字符 |
移至下1行行首 | 回车键 | 每按1次键,光标会移动到下1行行首 |
移至上1行行首 | -键 | 每按1次键,光标会移动到上1行行首 |
移至文件最后1行 | G键 | 将光标移动到文件最后1行行首 |
文本操作快捷键
操作 | 快捷键 | 说明 |
右插入 | a | 在当前光标所处位置的右边插入文本 |
左插入 | i | 在当前光标所处位置的左边插入文本 |
行尾追加 | A | 在当前行的末尾追加文本 |
行首插入 | I | 在当前行的开始插入文本 |
插入行 | O或者o | O键在当行的上面插入1个新行,o键将在当前行的下面插入1个新行 |
覆盖文本 | R | 覆盖当前光标所在的位置以及后面的若干文本 |
合并行 | J | 将当前光标所在的行与下面的1行合并为1行 |
注意:除了J键之外,其他的所有快捷键都会导致vi编辑器从一般模式切换到编辑模式,I键的功能是在当前行的开始位置插入文本,不包括空白字符。
使用文本快捷键进入的编辑模式后,可以通过Esc键返回到一般模式。
文本复制和粘贴快捷键
操作 | 快捷键 | 说明 |
复制行 | yy | 将当前行复制到缓冲区,如果想定义多个缓冲区,可以使用ayy、byy以及cyy语法。其中yy前面的字符表示缓冲区的名称,可以是任意单个字母。这样的话,可以将多个单独的行复制到多个缓冲区,各个缓冲区相互之间不受影响 |
复制多行 | nyy | 将当前行以及下面的n行复制到缓冲区,其中n表示一个整数。与yy命令相似,用户也可以使用anyy或者bnyy等语法来命名缓冲区。 |
复制单词 | yw | 复制从光标当前位置到当前单词词尾的字符 |
复制多个单词 | nyw | 其中n是一个整数,表示从光标当前位置开始,复制后面的n个单词 |
复制光标到行首 | y^ | 从当前光标所处的位置开始,复制到当前行的行首 |
复制光标到行尾 | y$ | 从当前光标所处的位置开始,复制到当前行的行尾 |
粘贴到光标后面的位置 | p | 将缓冲区的字符串插入点当前光标所处位置的后面。如果定义了多个缓冲区,则使用ap方式来粘贴,其中字母a表示缓冲区的名称 |
粘贴到光标前面的位置 | P | 将缓冲区的字符串插入点当前光标所处位置的前面。如果定义了多个缓冲区,则使用aP方式来粘贴,其中字母a表示缓冲区的名称 |
删除文本快捷键
操作 | 快捷键 | 说明 |
删除当前字符 | x | 删除光标所在的位置的字符 |
删除多个字符 | nx | 删除从光标所在位置开始,后面的n个字符 |
删除当前行 | dd | 删除光标所处的整个行 |
删除多个行 | ndd | 删除包括当前行在内的n行 |
撤销上一步操作 | u | 撤销刚刚执行的操作 |
撤销多个操作 | U | 撤销针对当前行的所有操作 |
2. 编辑模式
从一般模式进入编辑模式需要按字母i就可以,退出编辑模式按esc键即可,在编辑模式下,用户可以使用上、下、左、右4个方向键移动光标,使用backspace键和del来删除光标前面的字符,还可以在光标所在的位置插入字符。在编辑模式下,用户不能使用h、j、k和l这4个键移动光标,也不能使用x键删除字符。因为在编辑模式下,这些字母都被当做是正常的字母。
3. 命令模式
在命令模式下,用户主要完成文件的打开、保存、将光标跳转到某行,以及显示行号等操作。vi命令模式需要从一般模式进入,当前用户在一般模式下,按冒号键“:”之后,会在vi界面编辑的底部出现命令提示符,如图所示:
当出现如上图所示的命令提示符之后,用户就可以输入vi命令,例如保存文件等,如下表所示:
常用的vi命令
操作 | 命令 | 说明 |
打开文件 | :e | 打开另一个文件,将文件名作为参数 |
保存文件 | :w | 保存文件,即将文件的改动写入磁盘。如果将文件另存为其他文件名,则可以将新的文件名作为参数 |
退出编辑器 | :q | 退出vi编辑器 |
直接退出编辑器 | :q! | 不保存修改,直接退出vi编辑器 |
退出并保存文件 | :wq | 将文件保存后退出vi编辑器 |
跳至指定行 | :n、:n+或者:n- | :n表示跳到行号为n的行,:n+表示向下跳n行,:n-表示向上跳n行 |
显示或者隐藏行号 | :set nu或者:set nonu | :set nu表示在每行的前面显示行号;:set nonu表示隐藏行号 |
替换字符串 | :s/old/new、:s/old/new/g 、:n,m s/old/new/g或者:%s/old/new/g | :s/old/new表示用字符串new替换当前行中首次出现的字符串old;:s/old/new/g表示用字符串new替换当前行中所有的字符串old;:n,m s/old/new/g表示用字符串new替换从n行到m行所有的字符串old;:%s/old/new/g表示用字符串new替换当前文件中所有的字符串old |
设置文件格式 | :set fileformat=unix | 将文件修改为unix格式,如win下面的文本文件在linux下会出现^M。其中fileformat可以取unix或者dos等值 |
注意:进入命令模式后,只用:e命令打开另外一个文件。由于vi只能同时编辑一个文件,所以在打开另外一个文件的同时,当前打开的文件将被关闭。
4. 文本的搜索
vi的文本搜索是在一般模式下进行的,但是它的使用方法与其他一般模式下的功能有所区别,甚至可以将该项功能单独成为搜索模式,用户可以在一般模式下使用反斜线“/”快捷键进入文本搜索模式,如图所示:
当进入搜索模式后,用户可以在提示符后面输入要搜索的字符串,然后按回车键。如果要搜索的文本出现了很多次,可以使用斜线键,然后按回车键,或者使用n键(表示下一个next)继续向下搜索下一个出现的位置;使用N键向上搜素前一个出现的位置。