进入vi编辑器(vi打开文件)
vi filename
下面实例演示了进入 vi 编辑器编辑一个名为 test.c 的文件。
$ vi test.c
屏幕显示如下:
~
~
~
~
~
~
~
~
~
~
~
~
"test.c" [New File]
表示光标。如果只输入 vi,而不带文件名,也可以进入 vi。这时编辑的文件是没有文件名的,所以在退出 vi 时,需要在退出命令后输入文件名,这样才能保证该文件被保存在磁盘中。
进入 vi 之后,首先进入的就是命令模式,也就是说等待命令输入而不是文本输入。这时输入的字母都将作为命令来解释。
光标表示 vi 编辑器的当前编辑位置停留在屏幕第 1 行首位上。其余各行行首均有一个
~
符号,表示该行为空行。最后一行也称状态行,显示当前正在编辑的文件名及其状态。如本例是 [New File],表示 test.c 是一个新建的文件,其中还没有任何内容。如果 test.c 文件已在系统中存在,那么输入上述命令后,则在屏幕上显示出该文件的内容,并且光标停在第 1 行的首位,在状态行显示出该文件的文件名、行数和字符数。
如果希望在进入 vi 后,光标处于文件中特定的某行上,可在 vi 命令上加上行号和文件名,其格式如下:
vi +行号 文件名
下例演示了打开一个文件并进行定位,在 shell 终端中输入打开 vi 编辑器的命令如下:$ vi +5 test.c
屏幕显示如下:
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int main(void)
{
int i, sum;
for (i = 0; i < 3; i++) {
sum = add(i, i + 1);
printf("%d\n", sum);
}
}
"test.c" 13L, 175C
return a + b;
的行首。如果希望在进入 vi 之后光标处于文件最末行,则只需去掉命令中+
后面的数字 n 即可,如下所示。
$ vi + test.c
这时光标会停留在最后一行的}
字符。vi 编辑器支持模式匹配,也就是说用户可以在命令中指定一个模式串。之后进入 vi 后,光标就处于文件中第一个与指定模式串相匹配的那行上。其格式如下:
vi +/模式字符串 文件名
下面实例演示查找 test.c 中的 main() 函数,并对其进行以下编辑:$ vi +/main test.c
光标将停留在文件 test.c 中第 6 行的开头,如下所示。
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int main(void)
{
int i, sum;
for (i = 0; i < 3; i++) {
sum = add(i, i + 1);
printf("%d\n", sum);
}
}
"test.c" 13L, 175C
:set nohlsearch
使用 vi 可以同时编辑多个文件,只要在进入 vi 的命令中写入所要操作的文件即可,还可以使用通配符,其格式如下:vi 需要打开文件的通配符
如果需要打开当前目录下所有的C语言源文件,则可以使用以下命令:$ vi *.c
如果在一个C语言的工程中需要快速定位某函数并且对其进行编辑,则可以同时使用打开文件的通配符和模式匹配字符串。下例演示了如何在一个完整的工程中快速定位某个函数并且对其进行编辑。1) 在 vi 编辑器中编辑 common.h 程序如下:
#include <stdio.h> #include <stdlib.h> extern void swap(int *a, int *b);
2) 在 vi 编辑器中编辑 swap.c 程序如下。
#include "common.h" void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; }
3) 在 vi 编辑器中编辑 main.c 程序如下。
#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() 函数上。
$vi +/main *.c *.h
一个C程序的源文件一般只包括两种,即头文件(.h
文件)和源文件(.c
文件)。因此该命令执行后,将打开目录内所有的.h
文件和.c
文件,并且将当前编辑文件设置为 main.c 文件,光标置于 main.c 文件的第 3 行。