Linux平台及应用
潘小玲 郑国华 丁敏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

文本编辑器

发布时间:2020-02-28 13:22   发布人:潘小玲   浏览次数:532

(1)vi的简介

Vi是Visual interface 的简称,可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的功能。

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

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

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

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

(2)进入vi

下表列出了进入vi文本编辑器的方式及说明。

进入Vi文本编辑器的方式

方 式

说 明

vi

进入Vi的默认模式

vi filename

打开新建文件filename,并将光标置于第一行首

vi n filename

打开文件flename,并将光标置于第n行首

vi filename

打开文件filename,并将光标置于最后一行首

vi /pattern filename

打开文件filename,并将光标置于第一个与pattern匹配的串处

vi -r filename

打开上次用Vi编排时发生系统崩溃的文件flename,并恢复它

(3)vi/vim的3种运行模式

Vi有3种基本工作模式:普通(normal)模式、插入(insert) 模式和命令行(command-line 或Cmdline)模式,如下图所示。

进入Vi之后,首先进入的就是普通模式。进入普通模式后Vi 等待编辑命令输入而不是文本输入,也就是说这时输入的字母都将作为命令来解释。在普通(normal)模式里,可以输入所有的普通编辑命令。普通模式亦称为命令(command) 模式。

进入普通模式后光标停在屏幕第一行首位上(用_表示),其余各行的行首均有一个“~”符号,表示该行为空行。最后一行是状态行,显示出当前正在编辑的文件名及其状态。如果是[New File], 则表示该文件是一个新建的文件。如果输入Vi之后带有文件名参数,文件已在系统中存在,则在屏幕上显示出该文件的内容,并且光标停在第一行的首 位,在状态行显示出该文件的文件名、行数和字符数。

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

在普通模式下,执行ex命令使用“:",查找使用“?”和“/”,调用Shell命令使用“!”。多数文件管理命令都是在此模式下执行的。末行命令执行完后,Vi 自动回到普通模式。

若在命令行模式下输入命令过程中改变了主意,可用<Back space>键将输入的命令全部删除,之后再按一下(Back space) 键,即可使Vi回到普通模式。

(4)普通模式下的操作

下面的各个表分别列出了普通模式下的几类命令。

普通模式下进入插入模式

命令

说 明

i

从光标所在位置前开始插入文本

I

将光标移到当前行的行首,然后在其前插入文本

a

用于在光标当前所在位置之后追加新文本

A

将光标挪到所在行的行尾,从那里开始插入新文本

o

将在光标所在行的下面新开一行,并将光标置于该行的行首,等待输入文本

O

在光标所在行的上而插入一行,并将光标竖于该行的行首,等待输入文本

 

普通模式下的光标定位

命令

说   明

命令

说  明

G

将光标移至最后一行行首

$

移动到光标所在行的行尾

nG

光标移至第n行首

^.

移动到光标所在行的第-一个字符(非空格)

n

光标下移n行

h,j,k,l

分别用于光标左移、下移、上移、右移一个字符

n-

光标上移n行

H

将光标移至当前屏幕首行的行首(即左上角)

n$

光标移至第n行尾

M

将光标移至屏幕显示文件的中间行的行首

0

移动到光标所在行的行首

L

将光标移至当前屏幕的最底行的行首

 

 

普通模式下的替换和删除

命令

说明

命令

说明

rc

用字符c替换光标所指向的当前字符

nrc

用字符c替换光标所指向的前n个字符

x

删除光标处的字符

nx

删除从光标位置开始向右的n个字符

dw

删除一个单词

ndw

删除n个指定的单词

db

删除光标所在位置之前的一个词

ndb

删除光标所在位置之前的n个词

dd

删除光标所在的整行

ndd

删除当前行及其后n-l行的内容

dG

删除光标位置到最后一行的所有内容

dIG

删除光标所在位置到第一行的所有内容

d$

删除光标位置到当前行的末尾的内容

d0

删除光标位置到当前行的开始的内容

 

 

普通模式下的复制和粘贴

命令

说明

yy

将当前行的内容复制到缓冲区

nyy

将当前开始的n行内容复制到缓冲区

yG

将当前光标位置到最后--行的所有内容复制到缓冲区

yIG

将当前光标位置到第一行的所有内容复制到缓冲区

y$

将当前光标位置到当前行末尾的内容复制到缓冲区

y0

将当前光标位置到当前行开始的内容复制到缓冲区

P

将缓冲区的内容写出到光标所在的位置

 

 

普通模式下的字符串搜索

命令

说明

命令

说明

/str

往右移动到有str的地方

n

向相同的方向移动到有str的地方

?str

往左移动到有str的地方

N

向相反的方向移动到有str的地方

 

 

普通模式下的撤销和重复

命令

说   明

u

取消前一次的误操作或不合适的操作对文件造成的影响,使之恢复到这种误操作或不合适操作被执行之前的状态

.

再执行一次前面刚完成的某个命令

在普通模式下退出Vi

命令

说      明

命令

说     明

ZZ

存盘退出

ZQ

不保存退出

(5)命令模式下的操作

下列各表中列出了在命令模式下的常用命令。

在命令模式下跳行

命令

说 明

:n

直接输入要移动到的行号即可实现跳行

 

在命令模式下搜索和替换字符串

命 令

说 明

:/str/

从当前光标开始往右移动到有sr的地方

?str?

从当前光标开始往左移动到有str的地方

:/str/w file

将包含有str的行写到文件file中

:/str1/str2/w file

将从strl开始到st2结束的内容写入f.le文件中

:s/str1/str2

将找到的第1个str1替换为str2

:s/str1/str2/g

将找到的所有str1替换为str2

:n1,n2s/str1/st2g

将从n1行到n2行找到的所有的srl替换为str2

:1,s/str1/str2/g

将从第I行到当前位置的所有的srl替换为st2

:sSs/str1/str2/g

将从当前位置到结尾的所有的str1替换为stur2

:1,$s/str1/str2/gc

将从第1行到最后一行的所有的str1替换为stur2,并在替换前询问

 

在命令模式下复制、移动和删除文件行(块)

命 令

说 明

:nl,n2 co n3

将从n1开始到n2为止的所有内容复制到n3后面

:n1,n2 m n3

将从n1开始到n2为止的所有内容移动到n3后面

:d

删除当前行

:nd

删除从当前行开始的n行

:n1,n2d

删除从n1开始到n2为止的所有内容

:.,$d

删除从当前行到结尾的所有内容

:/str1/,/str2/d

删除从str1开始到str2为止的所有内容

 


在命令模式下的文件相关命令

命 令

说 明

:w

将当前编辑的内容存盘

:w file

将当前编辑的内容写到file文件中

:n1,n2w file

将从n1开始到n2结束的行写到file文件中

:nw file

将第n行写到file文件中

:1,.w file

将从第1行起到光标当前位置的所有内容写到file文件中

:.,$w file

将从光标当前位置起到文件结尾的所有内容写到file文件中

:r file

打开另一个文件file

:e file

新建file文件

:f file

把当前文件改名为file文件

 

在命令模式下执行Shell命令

命 令

说 明

:!Cmd

运行Shell命令Cmd

:n1,n2 w ! Cmd

将n1到n2行的内容作为Cmd命令的输入,如果不指定n1和n2,则将整个文件的内容作为命令Cmd的输入

:r! Cmd

将命令运行的结果写入当前行位置

 

在命令模式下设置Vi环境

命令

说 明

:set autoindent

缩进每一行,使之与前一行相同。常用于程序的编写

:set noautoindent

取消缩进

:set number

在编辑文件时显示行号

:set nonumber

不显示行号

:set ruler

在屏幕底部显示光标所在的行、列位置

:set noruler

不显示光标所在的行、列位置

:set tabsto=value

设置显示制表符的空格字符个数

set wrapmargin=value

设置显示器的右页边。当输入进入所设置的页边时,编辑器自动回车换行

:set

显示设置的所有选项

:set all

显示所有可以设置的选项

 

在命令模式下退出Vi

命 令

说 明

:q

退出Vi

:wq

保存退出Vi

:q!

不保存退出Vi