linux vi命令详解:屏幕文本编辑器Vi

系统 Linux
本章将详细介绍linux vi命令。Vi是所有计算机系统中最常使用的一种工具。用户在使用计算机的时候,往往需要建立自己的文件,无论是一般的文本文件、数据文件,还是编写的源程序文件,这些工作都离不开linux vi命令。

本章将详细介绍linux vi命令。文本编辑器是所有计算机系统中最常使用的一种工具。用户在使用计算机的时候,往往需要建立自己的文件,无论是一般的文本文件、数据文件,还是编写的源程序文件,这些工作都离不开linux vi命令。

Linux系统提供了一个完整的编辑器家族系列,如Ed、Ex、Vi和Emacs等,按功能它们可以分为两大类:行编辑器(Ed、Ex)和全屏幕编辑器(Vi、Emacs)。行编辑器每次只能对一行进行操作,使用起来很不方便。而全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,修改的结果可以立即看出来,克服了行编辑的那种不直观的操作方式,便于用户学习和使用,具有强大的功能。

linux vi命令是Linux系统的***个全屏幕交互式编辑程序,它从诞生至今一直得到广大用户的青睐,历经数十年仍然是人们主要使用的文本编辑工具,足见其生命力之强,而强大的生命力是其强大的功能带来的。

本章中,我们将循序渐进地介绍如何使用linux vi命令来建立、编辑、显示以及处理文件。(注:文中的大写字母为[shift]键+相应的小写字母的组合)

linux vi命令简介

linux vi命令是“Visual interface”的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。

linux vi命令不是一个排版程序,它不象Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。

linux vi命令没有菜单,只有命令,且命令繁多。Vi有三种基本工作模式:命令行模式、文本输入模式和末行模式。

命令行模式

任何时候,不管用户处于何种模式,只要按一下键,即可使linux vi命令行模式;我们在shell环境(提示符为$)下输入启动linux vi命令,进入编辑器时,也是处于该模式下。

在该模式下,用户可以输入各种合法的linux vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的linux vi命令,则linux vi命令在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。

文本输入模式

在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键即可。

末行模式

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

linux vi命令和Ex编辑器的功能是相同的,二者主要区别是用户界面。在Vi中,命令通常是单个键,例如i、a、o等;而在Ex中,命令是以按回车键结束的正文行。linux vi命令有一个专门的“转义”命令,可访问很多面向行的Ex命令。在命令模式下,用户按“:”键即可进入末行模式下,此时linux vi命令会在显示窗口的***一行(通常也是屏幕的***一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,linux vi命令自动回到命令模式。例如:

:1,$s / A / a / g

则从文件***行至文件尾将大写A全部替换成小写a。

若在末行模式下输入命令过程中改变了主意,可按键,或用退格键将输入的命令全部删除之后,再按一下退格键,即可使linux vi命令回到命令模式下。

如果要从命令模式转换到编辑模式,可以键入命令a或者i;如果需要从文本模式返回,则按Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。

#p#

linux vi命令的进入与退出

linux vi命令的进入

用户登录到系统中之后,系统给出提示符“$”。在提示符后键入Vi和想要编辑(或建立)的文件名,便可进入Vi。

[例1] 键入命令:

$ vi example.c

屏幕显示如下:
~
~
~
~
~
~
~
~
~
~
~
~
~
“ example.c” [New File]

如果只键入Vi,而不带文件名,也可以进入Vi。之后在光标处键入文件内容,退出Vi时,只需在退出命令后输入文件名即可。
进入Vi之后,首先进入的就是命令模式,也就是说等待命令输入而不是文本输入。这时输入的字母都将作为命令来解释。光标停在屏幕***行首位上(用表示),其余各行行首均有一个“~”符号,表示该行为空行。***一行也称状态行,显示出当前正在编辑的文件名以及其状态。如本例是[New File],表示example.c是一个新建的文件。如果example.c文件已在系统中存在,那么输入上述命令后,则在屏幕上显示出该文件的内容,并且光标停在***行的首位,在状态行显示出该文件的文件名、行数和字符数。

[例2] 键入命令:

$ vi example.c

然后键入:

#include
main ( )
{ int k ;
for ( k=0 ; k<3 ; k++) add( );
}
add( )
{ static int x=0;
x++ ;
printf(“x = %d\n”, x);
}
~
~
~
~
“ example.c” [ New File]

注意,在这里我们为了节省篇幅起见,屏幕只显示15行。事实上,初始的显示行数与用户所用终端有关,一般的CRT终端可显示25行。在窗口系统中,显示行数与运行linux vi命令的那个窗口有关。然而我们可以对显示行数进行设置。例如,在能显示25行的CRT终端上,让Vi只显示15行。设置的方法将在本节后面介绍。

当用linux vi命令建立一个新文件时,在进入linux vi命令中也可以不给出文件名,当编辑完文件需要保存数据时,再由用户指定文件名。

进入linux vi命令时,用户不仅可以指定一个待编辑的文件名,而且还有许多附加操作。

如果希望在进入linux vi命令之后,光标处于文件中特定的某行上,可在linux vi命令后加上任选项+n,其中n为指定的行数。

[例3] 键入命令:

$ vi +5 example1.c

后,屏幕显示如下:

#include
main ( )
{ int k ;
for ( k=0 ; k<3 ; k++) add( );
}
add( )
{ static int x=0;
x++ ;
printf(“x = %d\n”, x);
}
~
~
~
~
~
“ example.c” 12 lines, 125 characters

光标将位于文件example1.c中的第5行上。

#p#

如果希望在进入linux vi命令之后光标处于文件最末行,则只需把命令中附加项“+”后面的数字n省略掉即可。

在进入linux vi命令时,除了可以指定一个光标起始行号之外,还可以在命令中指定一个模式串,此时在进入linux vi命令后,光标就处于文件中***个与指定模式串相匹配的那行上。

[例4] 键入命令:

$ vi +/int example1.c

屏幕显示如下:

#include
main ( )
{ int k ;
for ( k=0 ; k<3 ; k++) add( );
}
add( )
{ static int x=0;
x++ ;
printf(“x = %d\n”, x);
}
~
~
~
~
~
“ example.c” 12 lines, 125 characters

光标将位于文件example1.c中的第3行上。

使用linux vi命令可以同时编辑多个文件,只要在进入linux vi命令的命令中写入所要操作的文件即可,还可以使用通配符。

[例5] 键入命令:

$ vi *.cat

就可以编辑所有后缀为cat的文件了。当然,您还可以使用shell中内置的模式匹配来装载文件,这样会更富技巧性。一旦您在命令行中包含了所有的待编辑文件名,就可以在linux vi命令中方便地移来移去。

退出Vi

当编辑完文件,准备退出Vi返回到shell时,可以使用以下几种方法之一。

在命令模式中,连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出,返回到shell;若当前编辑的文件没被修改过,则Vi直接退出, 返回到shell。

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

linux vi命令保存当前编辑文件,但并不退出,而是继续等待用户输入命令。在使用w命令时,可以再给编辑文件起一个新的文件名。

[例6]

:w newfile
此时Vi将把当前文件的内容保存到指定的newfile中,而原有文件保持不变。若newfile是一个已存在的文件,则Vi在显示窗口的状态行给出提示信息:

File exists (use ! to override)

此时,若用户真的希望用文件的当前内容替换newfile中原有内容,可使用命令

:w! newfile

否则可选择另外的文件名来保存当前文件。

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

系统退出linux vi命令返回到shell。若在用此命令退出Vi时,编辑文件没有被保存,则Vi在显示窗口的最末行显示如下信息:

No write since last change (use ! to overrides)

提示用户该文件被修改后没有保存,然后linux vi命令并不退出,继续等待用户命令。若用户就是不想保存被修改后的文件而要强行退出linux vi命令时,可使用命令:q!

linux vi命令放弃所作修改而直接退到shell下。

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

linux vi命令将先保存文件,然后退出linux vi命令返回到shell。

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

该命令的功能同命令模式下的ZZ命令功能相同。

linux vi命令中的行号

linux vi命令中的许多命令都要用到行号及行数等数值。若编辑的文件较大时,自己去数是非常不方便的。为此linux vi命令提供了给文本加行号的功能。这些行号显示在屏幕的左边,而相应行的内容则显示在行号之后。

使用的命令为:在末行方式下输入命令:

:set number

需要说明的是,这里加的行号只是显示给用户看的,它们并不是文件内容的一部分。

【编辑推荐】

  1. 使用CDPATH为linux cd命令定义基础目录
  2. 使用linux cd命令来改变所在目录
  3. linux cd命令详解及该命令的技巧总结
责任编辑:赵宁宁 来源: 中国IT实验室
相关推荐

2020-12-23 22:25:11

Vi文本编辑器Unix

2010-03-24 09:20:07

CentOS vi编辑

2009-12-23 10:27:22

vi编辑器

2009-10-27 16:47:58

linux vi编辑器

2009-12-25 13:00:47

Linux编辑器Vi

2009-10-27 12:43:41

linux vi编辑器

2009-10-26 10:47:57

linux vi编辑器

2010-01-20 10:18:13

Linux VI编辑命令

2009-07-08 09:21:09

Linux安装JDK

2009-12-25 14:03:46

Linux vi

2018-01-25 18:30:05

编辑器ViVim

2018-02-09 09:58:41

Linux编辑器Vi

2010-11-16 13:21:08

Oracle命令行

2016-08-22 11:01:47

Linux命令行文本编辑器

2024-02-28 16:26:14

Linuxvi编辑器

2022-05-13 15:32:11

GNOME文本编辑器

2021-01-07 11:00:59

Sed文本编辑器Linux

2021-06-17 16:20:05

LinuxHelix文本编辑器

2011-03-03 09:53:15

Linux文本编辑器

2017-02-14 10:00:57

点赞
收藏

51CTO技术栈公众号