title: vi与vim编辑器date: 2021-05-05 00:31:02.134

updated: 2021-06-04 15:03:17.575
url: /?p=138
categories: Linux
tags: Linux

vi和vim编辑器

Vi 编辑器是 Unix 系统最初的编辑器。它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行、在文件中移动、插入、编辑和替换文本。

尽管 Vi 可能是世界上复杂的编辑器(讨厌它的人是这么认为的),但其拥有的大量特性使其成为 Unix 管理员多年来的支柱性工具。

在 GNU 项目中,程序员在将 Vi 编辑器移植到开源世界的同时,决定对其作一些改进。由于改进后的 Vi 不再是以前 Unix 中的那个原始的 Vi 编辑器了,开发人员也就将它重命名为“Vi improved”,也就是 Vim。

所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。

但是目前我们使用比较多的是 vim 编辑器。

vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。

连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。

vi/vim三种使用模式

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)末行模式(Last line mode)

命令模式

该模式是进入 vi 编辑器后的默认模式。

任何时候,不管用户处于何种模式,按下Esc键即可进入命令模式。

所输入的命令并不回显在屏幕上。若输入的字符不是 vi 的合法命令,vi 会响铃报警。

输入模式

在命令模式下输入插入命令i、附加命令a、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。

在该模式下,用户输入的任何字符都被 vi 当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按下Esc键即可。

末行模式

末行模式也称 ex 转义模式。

在命令模式下,用户按:键即可进入末行模式下,此时 vi 会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个:作为末行模式的说明符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。

末行命令执行完后,vi 自动回到命令模式。

进入vi编辑器(vi打开文件)

进入编辑器的方法有以下:

  1. vi命令+文件名:vi filename
  2. vi命令不加文件名:vi。不过编辑的文件是没有文件名的,所以在退出 vi 时,需要在退出命令后输入文件名,这样才能保证该文件被保存在磁盘中。
  3. 在进入 vi 后,光标处于文件中特定的某行上:vi +行号 文件名
  4. 在进入 vi 之后光标处于文件最末行,则只需去掉命令中+后面的数字 n 即可:vi + 文件名
  5. vi 编辑器支持模式匹配,也就是说用户可以在命令中指定一个模式串。之后进入 vi 后,光标就处于文件中第一个与指定模式串相匹配的那行上:vi +/模式字符串 文件名
  6. 使用 vi 可以同时编辑多个文件,只要在进入 vi 的命令中写入所要操作的文件即可,还可以使用通配符,其格式如下:vi 需要打开文件的通配符,比如vi *.c

如果在一个C语言的工程中需要快速定位某函数并且对其进行编辑,则可以同时使用打开文件的通配符和模式匹配字符串。下例演示了如何在一个完整的工程中快速定位某个函数并且对其进行编辑。

  1. 在 vi 编辑器中编辑 common.h 程序如下:

    1
    2
    3
    #include <stdio.h>
    #include <stdlib.h>
    extern void swap(int *a, int *b);
  2. 在 vi 编辑器中编辑 swap.c 程序如下。

    1
    2
    3
    4
    5
    6
    7
    8
    #include "common.h"
    void swap(int *a, int *b)
    {
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
    }
  3. 在 vi 编辑器中编辑 main.c 程序如下。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include "common.h"
    int main(void)
    {
    int a, b;
    sacnf("%d %d", &a, &b);
    swap(a, b);
    printf("%d, %d\n", a, b);
    return 0;
    }

    4. 保存并且退出 vi 编辑器。

    5. 打开该程序中的所有源文件,并且将显示位置定位在 main() 函数上。
    ```C++
    $vi +/main *.c *.h

vi修改文件内容(文本修改命令)

  1. 插入文本命令:iI,即insert首字母大小写。i命令在光标前插入。输入 I 命令后,光标自动移到该行的行首插入。

  2. 追加文本命令:a 和 A,即append首字母大小写。a在光标后插入。A 命令会将新文本追加到所在行的行尾。

  3. 空行插入命令:o 和 O,我觉得是open首字母大小写。若用户希望在某行之前或某行之后插入一些新行,则应使用 o 命令。

    • o 命令将在光标所在行的下面插入一个空行,并将光标置于该行的行首。
    • O 命令在光标所在行的上面插入一个空行,并将光标置于该行的行首。

4.取代命令(Replace mode):r 和 R。r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)

上面这些按键中,在 vi 画面的左下角处会出现『–INSERT–』或『–REPLACE–』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔!

vi文本删除命令(删除文件内容)

vi 编辑器可以在编辑模式和命令模式下删除文本:

-
编辑模式:使用退格键或 Del 键删除文本。

-
命令模式:vi 提供了许多删除命令。常用命令下表所示。

文本删除命令 命令的意义 文本删除命令 命令的意义
x 删除光标处的字符 d( 删除到上一句开始的所有字符
X 删除光标前面的字符 d) 删除到下一句开始的所有字符
dd 删除光标所在的整行 d{ 删除到上一段开始的所有字符
D 或 d$ 删除从光标所在处开始到行尾 的内容 d} 删除到下一段开始的所有字符
d0 删除从光标前一个字符开始到 行首的内容 d 删除包括当前行在内的两行字符
dw 删除一个单词

删除文本的命令可以分为删除单个字符和删除多个字符两类。其中,删除单个字符的命令包括下面两种情况。

  • x 命令:删除光标处的字符。若在 x 之前加上一个数字 n,则删除从光标所在位置开始向右的 n 个字符。
  • X 命令:删除光标前面的字符。若在 X 之前加上一个数字 n,则删除从光标前面那个字符开始向左的 n 个字符。

删除多个字符的命令包括下面几种情况。

  • dd 命令:该命令删除光标所在的整行。在 dd 前可加上一个数字 n,表示删除当前行及其后 n-1 行的内容。
  • D 命令或 d$ 命令:两个命令功能一样,都是删除从光标所在处开始到行尾的内容。
  • d0 命令:该命令删除从光标前一个字符开始到行首的内容。
  • dw 命令:该命令删除一个单词。若光标处在某个词的中间,则从光标所在位置开始删至词尾。同 dd 命令一样,可在 dw 之前加一个数字n,表示删除 n 个指定的单词。
  • d( 命令:该命令删除到上一句开始的所有字符。
  • d) 命令:该命令删除到下一句开始的所有字符。
  • d} 命令:该命令删除到上一段开始的所有字符。
  • d{ 命令:该命令删除到下一段开始的所有字符。
  • d 命令:该命令(表示回车)删除包括当前行在内的两行字符。

vi文本复制命令(复制文件内容)

vi 编辑器可以在编辑模式和命令模式下复制文本。常用的复制文本的命令如表所示。

文本复制命令 命令的意义 文本复制命令 命令的意义
yy 复制光标所在的整行 y{ 复制到上一段的开始
Y 或 y$ 复制从光标所在处开始到行尾的内容 y} 复制到下一段的开始
y0 复制从光标前一个字符开始到行首的内容 y 复制包括当前行在内的两行内容
y( 复制到上一句的开始 yw 复制一个单词
y) 复制到下一句的开始
  • yy 命令:复制光标所在的整行。在 yy 前可加一个数字 n,表示复制当前行及其后 n-1 行的内容。
  • Y 或 y$ 命令:两命令功能一样,都是复制从光标所在处开始到行尾的内容。
  • yw 命令:复制一个单词。若光标处在某个词的中间,则从光标所在位置开始复制至词尾。同 yy 命令一样,可在 yw 之前加一个数字 n,表示复制 n 个指定的单词。
  • y) 命令:复制到下一句幵始的所有字符。
  • y} 命令:复制到下一段开始的所有字符。
  • y 命令( 表示回车):复制包括当前行在内的两行内容。

与文本复制有关的命令分为两类。

1.
文本粘贴命令

p 命令,即put(放下):粘贴命令,粘贴当前缓冲区中的内容。

2.
文本选择命令,v进入视图(visual)模式,选择区域,然后按y进行复制,再按p进行粘贴。

  • v 命令:在命令模式下进行文本选择。在需要选择的文本的起始处按下 v 键进入块选择模式,然后移动光标到块尾处。这之间的部分被高亮显示,表示被选中。
  • V 命令 visual line 模式:在命令模式下按行进行文本选择。在需要选择的文本的第一行按下 V 键,然后移动光标到块的最后一行。这之间的所有行被高亮显示,表示被选中。
  • 按 ctrl + v 进入 visual block 模式,此时选中的区域是一个矩形。

vi撤销命令(u和U),撤销上一次的操作

撤销命令是非常有用的,它可以撤销前一次的误操作或不合适的操作对文件造成的影响。撤销命令分为以下两种。

  • u 命令:该命令撤销上一次所做的操作。多次使用 u 命令会一步一步依次撤销之前做过的操作(在一次切换到文本输入模式中输入的所有文本算一次操作)。
  • U 命令:该命令会一次性撤销自上次移动到当前行以来做过的所有操作,再使用一次 U 命令则撤销之前的 U 命令所做的操作,恢复被撤销的内容。

vi重复命令(重复上次操作)

当用户在文本编辑中碰到需要机械地重复一些操作的时候,重复命令就派上了用场。它可以让用户方便地再执行一次前面刚完成的某个复杂的命令。重复命令只能在命令模式下工作,在该模式下按下.键即可。下面实例演示了使用重复命令。

vi退出命令

在末行模式下:

1.
命令q

当用户不清楚自己当前编译的文件是否被修改时,可以使用该命令进行测试,而不必担心因为误操作导致文件数据丢失。

2.
命令q!

该命令不论文件是否改变都会强行退出 vi 编辑器,对于此命令用户应当慎用。

3.
命令 w

在末行模式下,输入命令如下:

1
:w  新文件名

vi 保存当前编辑文件,但并不退出,而是继续等待用户输入命令。在使用 w 命令时,可以再给当前编辑文件起一个新的文件名。下面实例演示了将 main.c 文件另存为 test.c 文件。

1
2
3
4
5
6
7
8
9
10
#include "common.h"
int main(void)
{
int a, b;
sacnf("%d %d", &af &b);
swap (a, b);
printf ("%d, %d\n", a, b);
return 0;
}
:w test.c

保存之后使用:q命令退出 vi 编辑器,使用 ls 命令查看当前目录下的文件时,会发现多了一个 test.c 文件,该文件的内容和 main.c 一致。可以使用 cat 命令查看该文件的内容,main.c 文件的内容不受影响。若指定的新文件是一个已存在的文件,则 vi 在显示窗口的状态行给出如下说明信息:

1
File exists (use! to override)

说明:这样做同样可以防止因误操作覆盖已经存在的文件,用户可以选择另外的文件名来保存当前文件。

4.
命令 w!

在末行模式下,输入命令如下:

:w! 新文件名

说明:该命令与:w命令相同,所不同的是,即使指定的新文件存在,vi 编辑器也会用当前编辑文件对其进行替换,而不再询问用户。因此,此命令同样要慎用。

5.
命令 wq

在末行模式下,输入命令如下:

:wq

vi 将先保存文件,然后退出 vi 返回到 shell。如果当前文件尚未取名,则需要现指定一个文件名。

6.
命令 x

在末行模式下,输入命令如下:

:x

说明:若当前编辑文件曾被修改过,则 vi 会保存该文件。否则 vi 直接退出,不保存该文件。

移动光标

vi光标移动命令

  1. h 光标左移一个字符
  2. k 光标上移一行
  3. j 光标下移一行
  4. l 光标右移一个字符

vi按行移动光标

1.
H 命令

H 命令将光标移至当前屏幕的第 1 行,而不是整个文件的第 1 行。若在 H 命令之前加 上数字 n,则将光标移至第 n 行的行首。

2.
M 命令

M 命令将光标移至屏幕显示文件的中间行的行首。即如果当前屏幕已经充满,则移动到整个屏幕的中间行;否则,移动到显示文本的那些行的中间行。

利用此命令可以快速地将光标从屏幕的任意位置移至屏幕显示文件的中间行的行首。

3.
L 命令

L 命令将光标移至屏幕显示文件的最底行的行首。即如果文件内容需要超过一个屏幕显示时,该命令将光标移至屏幕上最底行的行首;否则该命令将光标移至文件最后一行的行首。可见,利用此命令可以快速准确地将光标移至屏幕底部或文件的最后一行。

若在 L 命令之前加上数字 n,则将光标移至从屏幕底部算起第 n 行的行首。

4.
G 命令

在全文的范围内移动光标,此时的光标移动范围不再受屏幕的限制。例如,在上例中,在命令模式下输入命令 5G 之后光标将移到第 5 行的行首。

vi按字移动光标命令

1.
w 和 W 命令

w 和 W 命令将光标右移至下一个字的字首。这两个命令的区别在于:

w 命令所指的字是指英文单词、标点符号和非字母字符;

W 命令所指的字是指两个空格之间的任何内容。

2.
e 和 E 命令

如果光标起始位置处于字内,则 e 和 E 命令将把光标移到本字字尾;如果光标起始位置处于字尾,则 e 和 E 命令将把光标移动到下一个字的字尾。

e 和 E 命令的区别在于:

  • e 命令所指的字是指英文单词、标点符号和非字母字符;
  • E 命令所指的字是指两个空格之间的任何内容。

3.
b 和 B 命令

如果光标处于所在字内,则 b 和 B 命令将把光标移至本字字首;如果光标处于所在字字首,则 b 和 B 命令将把光标移到上一个字的字首。两个命令的区别在于:

  • b 命令所指的字是指英文单词、标点符号和非字母字符;
  • B 命令所指的字是指两个空格之间的任何内容。

vi按段落移动光标

在 vi 编辑器中,一个段落被定义为是以一个空白行开始和结束的片段。按段落移动光标的命令有以下两种。

  • {命令:该命令将光标向前移至上一个段落的开头。
  • }命令:该命令将光标向后移至下一个段落的开头。

文本移动

vi文本移动命令(文本行移动)

1.
> 命令

>命令将指定的正文行向右移动,通常是右移 8 个空格。移动正文行的范围由光标所在行和随后输入的光标移动命令所限定。

> 命令的使用格式如下:

>n

n 表示光标所在位置后面的文本行数。也可以不写 n,此时默认为 1;换句话说,只使用>命令将会移动光标所在的文本行,以及下一个文本行。

如果只想移动光标所在的文本行,可以写>0。

需要注意的是,指定的数字是需要移动的行的数目,并不是要右移的空格数。

2.
< 命令

<命令将指定的正文行向左移动。其使用方式与命令相同,但是方向相反。

3.
>> 命令

>>该命令将光标所在行右移 8 个空格。如果在>>命令之前给出一个数字 n,例如 4,则表示光标当前行及其下面的 3 行(共4行)都右移 8 个空格。下面实例演示了使用>>命令移动文本。

4.
<< 命令

<<命令将光标所在行左移 8 个空格。其使用与>>命令相同,但是移动方向相反。

vi文本跨行移动(m命令)

vi 编辑器提供文本的跨行移动。这个操作允许用户将某一行的文本内容移动到指定位置。

vi 编辑器使用 m 命令实现文本的跨行移动。该命令的使用方法为:

imj

表示把第 i 行移至第 j 行的下方。

1.
在 vi 编辑器中编辑以下代码:

1
2
3
4
5
6
#include <stdio.h>
int main(void)
{
printf("hello world\n");
return 0;
}

2.
在末行模式下输入命令5m2,将第 5 行的 printf() 函数调用移动到第 2 行的下方,显示如下:

1
2
3
4
5
6
#include <stdio.h>
int main(void)
return 0;
{
printf("hello world\n");
}

vi屏幕滚动命令(滚屏命令)

如果文件太大,一个屏幕不能将其内容完全显示出来,vi 编辑器会采用分屏显示的方法。使用屏幕命令可以以屏幕为单位移动光标,方便地完成文件的滚屏和分页。

需要注意的是,屏幕命令不是光标移动命令,不能作为文本限定符用于删除命令中。在命令模式下和文本输入模式下均可以使用滚屏和分页命令。滚屏和分页命令如下表所示。

滚屏和分页命令 命令意义
Ctrl+u 将屏幕向前(文件头方向)翻滚半屏
Ctrl+d 将屏幕向后(文件尾方向)翻滚半屏
Ctrl+f 将屏幕向文件尾方向翻滚一整屏
Ctrl+b 将屏幕向文件首方向翻滚一整屏

可以在滚屏和分页命令之前加上一个数字 n,表示屏幕向前或向后翻滚 n 行,或者屏幕向前或向后移动 n 页。这些设置会被 vi 编辑器记住,下次用户在使用滚屏和分页命令时,还会滚动和上次设置相同的行数或者页数。

vi字符串检索(查找)命令

vi 编辑器提供简单的字符串检索功能。在末行模式下,用户可以使用不同的命令对需要的字符串进行查找。查找命令有 5 种。

1.
/ 命令

/命令的格式为:

/string

/命令从光标处开始向后寻找字符串 string。

2.
? 命令

? 命令的格式为:

?string

? 命令从光标处开始向前寻找字符串 string。

3.
n 命令

n 命令重复上一条检索命令。

4.
N 命令

N 命令重复上一条检索命令,但检索方向改变。例如上次的检索命令是向前检索,那么此次检索的方向是向后;如果上次的检索命令是向后检索,那么此次检索的方向是向前。

5.
g/ 命令

g/ 命令的格式是为:

g/string

检索 string。g/命令使光标停止在第一个检索到的 string 串的行首。下面实例演示了g/命令的用法。

vi字符串替换命令

vi 编辑器提供简单的字符串替换命令,在末行模式下可以使用替换命令,其命令格式如下:

[range]s/s1/s2/ [option]

  • [range] 表示检索范围,省略时表示当前行。下面是一些检索范围的例子。

    • 1,10表示从第 1 行到 10 行。
    • %表示整个文件,同1, $。
    • . ,$从当前行到文件尾。
  • s 为替换命令。

  • s1 要被替换的串,s2 为替换的串。

  • option 表示选项:

    • /g表示在全局文件中进行替换。
    • /c表示在每次替换之前需要用户进行确认。
    • 省略时仅对每行第一个匹配串进行替换。

vi窗口切分命令(split命令)

在末行模式中,输入 split 命令即可实现窗口的切分,其命令格式如下:

: split文件名

split 也可简写为 sp。这时窗口切分为上下两部分,下半部分对应原来的文件,上半部分对应新打开的文件。

有时用户需要在多窗口之间进行切换,vi 编辑器提供一组命令支持用户切换多个窗口,其命令如下表所示。

切换命令 命令的意义
Ctrl+w,然后 j 移动光标到下面的一个窗口
Ctrl+w,然后 k 移动光标到上面的一个窗口
Ctrl+w,然后 q 关闭当前窗口
Ctrl+w,然后 w 移动光标到另一个窗口

其它情况:

  • :vsp 【左右两个屏幕】
  • wqall 【退出全部屏幕】

vi属性设置命令

vi 编辑器提供可以设置其环境属性的命令,这些命令如下所示。

行号设置命令

:set nu (nonu)

该命令显示行号(或者不显示行号)。

显示设置命令

:set hlsearch (nohlsearch)

该命令设定搜寻字符串反白显示(或者不反白显示)。

语法缩进命令

:set autoindent

该命令显示程序语法自动缩进。

文件存储命令

:set backup(nobackup)

该命令自动储存备份文件(或者不自动备份文件)。

显示选项命令

:set all

该命令显示所有的选项。

语法高亮命令

:syntax on (off)

该命令实现程序语法高亮显示(或者不高亮显示)。

大小写区分命令

:set ignorecase(noignorecase)

该命令忽略大小写(或者区分大小写)。

注意:所有的命令都需要在末行模式下输入。

Vim批量注释和自定义注释快捷键

使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符”#”再退回命令模式,非常麻烦。

连续行的注释其实可以用替换命令来完成。换句话说,在指定范围行加”#”注释,可以使用 “:起始行,终止行 s/^/#/g”,例如:

1
:1,10s/^/#/g

表示在第 1~10 行行首加”#”注释。”^”意为行首;”g”表示执行替换时不询问确认。如果希望每行交互询问是否执行,则可将 “g” 改为 “c”。

取消连续行注释,则可以使用 “:起始行,终止行s/^#//g”,例如:

1
:1,10s/^#//g

意为将行首的”#”替换为空,即删除。

当然,使用语言不同,注释符号或想替换的内容不同,都可以采用此方法,灵活运用即可。

添加”//“注释要稍微麻烦一些,命令格式为 “:起始行,终止行 s/^////g”。例如:

1
:1,5s/^/\/\//g

表示在第 1~5 行行首加”//“注释,因为 “/“ 前面需要加转义字符 “”,所以写出来比较奇特。

以上方法可以解决连续行的注释问题,如果是非连续的多行就不灵了,这时我们可以定义快捷键简化操作。格式如下:

1
:map 快捷键 执行命令

如定义快捷键 “Ctrl+P” 为在行首添加 “#” 注释,可以执行 “:map^P l#”。其中 “^P” 为定义快捷键 “Ctrl+P”。注意:必须同时按 “Ctrl+V+P” 快捷键生成 “^P” 方可有效,或先按 “Ctrl+V” 再按 “Ctrl+P” 也可以,直接输入 “^P” 是无效的。

“l#” 就是此快捷键要触发的动作,”l” 为在光标所在行行首插入,”#” 为要输入的字符,”” 表示退回命令模式。”” 要逐个字符输入,不可直接按键盘上的 Esc 键。

设置成功后,直接在任意需要注释的行上按 “Ctrl+P” 快捷键,就会自动在行首加上 “#” 注释。取消此快捷键定义,输入 “:unmap^P” 即可。

我们可以延伸一下,如果想取消文件行首的快捷键,则可以设置 “:map^B 0x”,快捷键为 “Ctrl+B”, “0” 表示跳到行首,”x” 表示删除光标所在处字符。

再如,有时我们写完脚本等文件,需要在末尾注释中加入自己的邮箱,则可以直接定义每次按快捷键 “Ctrl+E” 实现插入邮箱,定义方法为 “:map^E asamlee@itxdl.net“。其中 “a” 表示在当前字符后插入,”samlee@itxdl.net“ 为插入的邮箱,”” 表示插入后返回命令模式。

所以,通过定义快捷键,我们可以把前面讲到的命令组合起来使用。

将快捷键对应的命令保存在 .vimrc 文件中,即可在每次使用 Vim 时自动调用,非常方便。

Vim配置文件(.vimrc)

Vim 启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim。

Vim 配置文件分为系统配置文件和用户配置文件:

  • 系统配置文件位于 Vim 的安装目录(默认路径为 /etc/.vimrc);
  • 用户配置文件位于主目录 ~/.vimrc,即通过执行 vim ~/.vimrc 命令即可对此配置文件进行合理修改。通常情况下,Vim 用户配置文件需要自己手动创建。

注意,Vim 用户配置文件比系统配置文件的优先级高,换句话说,Vim 启动时,会优先读取 Vim 用户配置文件(位于主目录中的),所以我们只需要修改用户配置文件即可(不建议直接修改系统配置文件)。

Vim 提供的环境配置参数有很多,本节不一一列举,大家可以在 Vim 中输入“:set all”指令来查询,本节仅对常用的几个功能设置做详细介绍。

设置参数 功能描述
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
            set termencoding=utf-8
            set encoding=utf-8 | 				设置编码格式,encoding 选项用于缓存的文本、寄存器、Vim 脚本文件等;fileencoding 选项是 Vim 写入文件时采用的编码类型;termencoding 选项表示输出到终端时采用的编码类型。 |

| set nu
set number | nu 是 number 的缩写,所以上面两个配置命令是完全等效的,二选一即可。取消行号可使用 set nonu。 |
| set cursorline | 突出显示当前行。 |
| set mouse=a
set selection=exclusive
set selectmode=mouse,key | Vim 编辑器里默认是不启用鼠标的,通过此设置即可启动鼠标。 |
| set autoindent | 设置自动缩进,即每行的缩进同上一节相同。 |
| set tabstop=4 | 设置 Tab 键宽度为 4 个空格。 |

注意,表中各配置参数前面可以添加冒号(:),也可以省略,两种写法都可以。

通过以上方式,可以对用户配置文件(.vimrc)进行编辑,进而实现对 Vim 的永久自定义。

在 Vim 编辑模式中,通过 “:set nu” 命令也可以让 Vim 显示行号,但只是临时有效,下次使用 Vim 编辑文件还是不显示行号。而本节介绍的编辑配置文件设置 Vim 的方式,对 Vim 的设置是永久的。

在Vim中执行Linux命令

由于 Vim 编辑器中支持直接执行 Linux 命令,从而可以方便快捷地对文件完成以下操作:

  1. 将一个命令的输出结果存入正在编辑的文件;
  2. 将正在编辑的文件中的一些数据作为某个指定 Linux 命令的输入。
    格式 功能
    :!命令 直接运行一个 Linux 命令,运行完毕之后,即可返回到 Vim 中。
    :w!命令 将 Vim 中所有的文本内容作为指定命令的输入。但命令的执行结果不会写入到当前文件中。
    :r!命令 将命令执行的结果写入到当前 Vim 中,例如 :!ls 表示将 ls 的执行结果输入到 Vim 中。
    :nr!命令 其中 n 为数字,表示将命令的执行结果写入到 Vim 第 n 行的位置。例如,:3r!date 表示将 date 命令的执行结果写入到第 3 行文本处。
    :n,m!命令 其中 n 表示起始行号,m为结束行号,功能是将 Vim 中指定的部分文本作为某个命令的输入,同时将命令的输出也插入到当前指定的位置。
    :n,m w!命令 其中 n 表示起始行号,m为结束行号,其功能是 Vim 中指定的部分文本作为某个命令的输入,但命令的执行结果不会写入到文件中。
    !!date 向 Vim 中插入当前时间。

Vim快捷键键位图

经典版

不同编辑模式下的键位图。