vi指令详解

weiwei-python weiwei-python     2023-01-07     476

关键词:

★ vi的模式(命令模式、插入模式、ex模式)

1)命令模式:

  在我们刚刚通过vi新建或打开一个已经存在的文件时,首先默认被读取的模式就是“命令模式”,命令模式的特征就是,在编辑器窗口左下角的位置上没有任何的提示标语。

 

  在这个模式下,如果不通过相应的命令,我们无法输入新的文本到这个文件中。这里建议新接触刚刚接触vi的朋友在用vi打开一个文件时不要处于心切而乱 按键盘试图输入一些文本到文件中,因为命令模式所谓的“命令”,并不是我们在命令行提时下输入的过程诸如“ls -> 回车”等等形式的命令。确切说vi命令模式下的命令,只是计算机键盘上的某个按键或某些按键的组合,当我们在命令模式下敲下键盘一个按键的时候,相应命令就已经被执行。

   在这里,首先介绍移动光标的命令。通常光标的移动可以通过键盘右边的方向键,但是由于每次移动光标,手都要大幅度的移动到键盘右边,这样使用vi是体现不出效率的,所以建议使用vi固有的命令(键)来控制光标的移动。

  光标的移动命令如下所示:

  向右移动 --> l
  向左移动 --> h
  向下移动 --> j
  向上移动 --> k
  如上所示,例如要向右移动光标8个字符的距离,只要在键盘上敲 l 键8次即可;向下移动3行的距离,只要在键盘上敲 j 键3次即可……也就是说,在vi命令模式中通过这几个键(命令)来控制光标的移动。
  其次就是文本删除的命令。在Windows下大多数编辑器在删除文本时只要连续按[Backspace]键即可。但由于在vi中,插入模式和命令模式是分离开来的,所以在命令模式下需要通过命令(按键)来删除文本,而不是直接按[Backspace]键。

  文本删除的命令如下所示:

  删除光标所在位置的字符 --> x
  删除光标所在的行 --> dd(敲 d 两次)
  如上所示,例如要删除从光标位置起向右的3个字符,只要在键盘上敲 x 键3次即可;要删除光标所在的行,只要敲 dd (连续敲d键两次),光标所在行的所有字符以及行将会被删除。
  再次,当编辑完了一个文档,想要保存后退出的时候的命令为“ZZ”(大写、连续敲2次)。

  保存并退出文档:

  保存当前修改并退出 --> ZZ
  另外,vi还有一些编辑性质的命令,一并总结如下

  具有编辑性质的有用的命令:

  撤销上一步操作 --> u
  移动光标到行首 --> 0 (数字0)
  移动光标到行末 --> $
  移动光标到当前页最顶行 --> H
  移动光标到当前页最底行 --> L
  向前翻一页(Page Up) --> Ctrl + f
  向后翻一页(Page Down) --> Ctrl + b
  还有在服务器配置中使用vi时,频繁用到的就是vi的搜索功能。在vi命令行的状态下,键入“/”(斜 线)后,vi底部出现“/”,并处于输入等待状态,这时候输入要查找的文字或文字列,然后按回车就可以找到相应的文字或文字列。当有多个对象存在时,敲 “n”(小写)键为查找下一个目标,敲“N”为查找上一个目标。

vi是所有UNIX系统都会提供的屏幕编辑器,它提供了一个视窗设备,通过它可以编辑文件。当然,对UNIX系统略有所知的人,或多或少都觉得vi超级难用,但vi是最基本的编辑器,学好了vi,以后在UNIX世界里必将畅行无阻、游刃有余,因为其他几种文本处理器并非UNIX标准配备。若其它的Linux机器里没有安装joe或pico,如果不会使用vi,那可能就真的没辄了。

vi编辑器有3种模式:命令模式、输入模式、末行模式。掌握这三种模式十分重要:

命令模式:vi启动后默认进入的是命令模式,从这个模式使用命令可以切换到另外两种模式,同时无论在任何模式下只要按一下[Esc]键都可以返回命令模式。在命令模式中输入字母i或o或a,就可以进入vi的输入模式编辑文件。

输入模式:在这个模式中我们可以编辑、修改、输入等编辑工作,在编辑器最后一行显示一个“--INSERT--”标志着vi进入了输入模式。当我们完成修改输入等操作的时候我们需要保存文件,这时我们需要先返回命令模式,在进入末行模式保存。

末行模式:在命令模式输入“:”即可进入该模式,在末行模式中有好多好用的命令。

下面介绍vi常用的命令操作

进入输入模式命令

i 在光标 左侧输入正文[常用]
a 在光标 右侧输入正文[常用]
o 小写字符o, 在光标所在行的 下一行增添新行
O 大写字符O, 在光标所在行的 上一行增添新行
I 在光标 所在行的开头输入正文
A 在光标 所在行的末尾输入正文
上面介绍了几种切换到插入模式的简单方法。另外还有一些命令,它们允许在进入插入模式之前首先删去一段
正文,从而实现正文的替换。这些命令包括:
s 用输入的正文替换光标所指向的字符[常用]
ns 用输入的正文替换光标右侧n 个字符
cw 用输入的正文替换光标右侧的字 [常用]
ncw 用输入的正文替换光标右侧的n 个字
cb 用输入的正文替换光标左侧的字 [常用]
ncb 用输入的正文替换光标左侧的 n 个字
cd 用输入的正文替换光标的所在行[常用]
ncd 用输入的正文替换光标下面的n 行
c$ 用输入的正文替换从光标开始到本行末尾的所有字符[常用]
c0 用输入的正文替换从本行开头到光标的所有字符[常用]

r 取代光标所在处的字符, 比如c3 表示将光标所在处的字符替换为字符3 [常用]

R 取代字符直至按【ESC】为止

按【Esc】键或组合键【ctrl】+[ 退出输入模式

末行模式

w 保存文件 [常用]

w file 将当前文件的内容保存到file文件

wq 保存文件并退出vi编辑器[常用]

wq file 将 当前文件的内容写入file 文件,并保持原有文件的内容不变,然后退出vi编辑器(假如当前文件内容有变动但未执行保存操作,那么执行该命令后不会退出vi编辑器)

r file 读取file 文件的内容,插入当前光标所在行的后面
e file 关闭当前文件,并打开新文件file (如果当前文件内容有变动但未保存,则该命令不会被执行)[常用]
f file 将当前文件重命名为file [常用]
f 打印当前文件名称和状态,如文件的行数、光标所在的行号等

q 退出vi编辑器(如果当前文件有改动,则无法退出) [常用]

q! 强制退出vi编辑器(不保存修改)[常用]

# 将光标移到第#行[常用]

PS: 关于行号使用的一些技巧:

一般用数值来指定绝对行号;字符“.”表示光标所在行的行号;字符“$”表示文件最后一行的行号,例如:

.+5 将光标从当前行往下移动5 行

$ 将光标移到文件的最后一行

1 将光标移到文件的第一行

23w file 将文件的第23行写入file文件

3,5w file 将第3 行至第5 行写入file 文件
1,.w file 将第1 行至当前行写入file 文件
.,$w file 将当前行至最后一行写入file 文件
.,.+5w file 从当前行开始将6 行内容写入file 文件
1,$w file 将所有内容写入file 文件,相当于:w file 命令

移动光标的操作

【Home】 光标到行首
【End】 光标到行尾
【Page Up】 向上翻页

【Page Down】 向下翻页

【Delect】 删除光标位置的字符
【Ctrl】+ f 向前移动一页

【Ctrl】+ b 向后移动一页

h 光标向左移动一个字符 [常用]
j 光标向下移动一个字符 [常用]
k 光标向上移动一个字符 [常用]
l 光标向右移动一个字符 [常用]
数字0 把光标移到行尾 [ 常用]
$ 把光标移到行首 [ 常用]
G 把光标移到文件的末尾 [ 常用]
gg 把光标移到文件的开头 [ 常用]
w 把光标移到下一个单词的开头 [ 常用]
e 把光标移到当前或下一个单词的字尾 [ 常用]
b 把光标移到当前或下一个单词的开头 [ 常用]
^ 把光标移到该行的第一个非空白字符(tab,space) [ 常用]
:# 把光标移到该行的第#个位置,例如:3, :10 [ 常用]
) 光标移到句尾
( 光标移到句首
注: 句子用半角句号后加一个空格(. )分割
光标移到段落结尾
光标移到段落开头
注: 段落以空行分割
nG 将光标定位到第n行的开头 [ 常用]

n+ 将光标下移n行

n- 将光标上移n行

n$ 将光标下移n行,并置于行尾

H 将光标置于当前屏幕的顶行

M 将光标置于当前屏幕的中间行

L 将光标置于屏幕的最后行

~ 改变当前字符的大小写 [ 常用]

>> 把当前行往右移动8个字符(相当于【tab】键) [ 常用]

<< 把当前行往左移动8个字符(相当于【Shift】+【tab】) [ 常用]

nz: 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

撤销操作

u 命令撤销最近一次的操作,可以使用多次来恢复原有的操作 [ 常用]
U 撤销所有操作
. 可以恢复对使用u命令的操作 [ 常用]

复制/删除/粘贴操作

x 删除光标处的单个字符,并把删除后的字符放到缓存区( 实际上删除相当于剪切 ) [ 常用]
nx 删除三个字符。 例如, 3x删除光标处向右的三个字符
"bnx 把删除的字符放到缓存区b

dw 删除当前字符到单词尾(包括空格)的所有字符 [ 常用]

dd 删除光标所在行 [常用] [ 常用]
ndd 删除n行。 例如, 3dd从当前行开始向下删除三行文本 [ 常用]

"bndd 把删除的内容放到缓存区b

PS: 如果要删除第m至第n行的内容,可以在末行模式中输入m,nd。比如3,5d表示删除第3~5行 [ 常用]

yy 复制当前光标所在行的内容到vi缓冲区 [ 常用]
nyy 复制n行。例如:5yy就是从当前光标所处的行向下复制5行,把复制的内容放到vi缓存区 [常用]
"bnyy 将复制的内容放到缓存区b . 比如,b3yy 将三行数据存入缓存区b [ 常用]

PS: 如果要复制第m行到第n行之间的内容,可以在末行模式中输入m,ny例如:3,5y复制第三行到第五行内容到缓存区 [ 常用]

yw 复制当前光标所在位置到单词尾字符 (不包括空格) 的内容到vi缓存区,相当于复制一个单词 [常用]
nyw 复制n个单词例如:2yw就是复制两个单词
"bnyw 例如, 复制n个单词到缓存区b

y$ 复制光标所在位置到行尾内容到缓存区
y^ 复制光标所在位置到行首内容到缓存区
p 小写p, 将缓存区的内容粘贴到当前行的下方(与yy配合) ,或插入到当前光标的下一个位置(与dw, x, y$ , y^ 配合)[常用]

P 大写P,与小写p的作用类似,但粘贴都方向相反

查找与替换

vi的查找与替换功能要再末行模式下完成。

/关键字 自上而下查找,比如/work,表示从当前光标处往下查找关键字为work的内容[ 常用]

?关键字 自下而上查找 , 比如/work,表示从当前光标处往上查找关键字为work的内容 [ 常用]

PS: 当找到匹配项时,光标会定位在关键词都字符开头。要继续查找下一个匹配项,只需敲入字符n; 要往回查找,敲入N. 可以输入2n往下查找下下一个匹配项

s/old_string/new_string 用new_string替换光标所在行中首次出现的old_string

s/old_string/new_string/g 用new_string替换光标所在行中的所有old_string

m,ns/old_string/new_string/g 用new_string替换第m行至第n行的所有old_string [ 常用]

%s/old_string/new_string/g 用new_string替换所有的old_string [ 常用]

/pattern_address/s/old_string/new_string/g 从当前光标处往下查找与pattern_address匹配的行,然后在该行上用new_string替换掉所有的old_string(实际上,这个命令是由/pattern_address 和/s/old_string/new_string/g组合而成)

g/pattern_address/s/old_string/new_string/g 找出所有与pattern_address匹配的行, 并用new_string替换掉每一行所有的old_string( 注意: 前后两个g的含义是不一样的,前面的g表示对整个文本搜索与pattern_address匹配的行, 后面的g表示针对每一个与pattern_address匹配的行都用new_string替换掉old_string)

如果pattern_address和old_string一样,可以简写为g/pattern_address/s//new_string

可以在所有的命令尾加一个c命令,强制每个替换需要用户进行确认,例如:s/old/new/c 或s/old/new/gc [ 常用]

PS: 查找的一些技巧

/str/w file 正向搜索,并将第一个包含字符串str 的行写入file 文件
/str1/,/str2/w file 正向搜索,并将包含字符串str1 的行至包含字符串str2 的行写入file 文件

恢复文件
vi在编辑某一个文件时,会生成一个临时文件,这个文件以. 开头并以.swp结尾。正常退出该文件自动删除,如果意外退出例如忽然断电,该文件不会删除,我们在下次编辑时可以选择一下命令处理:

O 只读打开,不改变文件内容
E 继续编辑文件,不恢复.swp文件保存的内容
R 将恢复上次编辑以后未保存文件内容
Q 退出vi
D 删除.swp文件

或者使用vi -r 文件名来恢复未保存的内容

















































































































































































































linux——文本编辑器(vi)详解介绍(代码片段)

Linux——文本编辑器(Vi)详解介绍1.Vi的简介Vi是Visualinterface的简称,可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户根据自己的需要对其进行制定,这是vi的魅力所在。Vi不是一个编排程... 查看详情

linux——文本编辑器(vi)详解介绍(代码片段)

Linux——文本编辑器(Vi)详解介绍1.Vi的简介Vi是Visualinterface的简称,可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户根据自己的需要对其进行制定,这是vi的魅力所在。Vi不是一个编排程... 查看详情

vi与vim

 1:Vi的三种模式一般指令模式:Vi打开(创建)一个文件时默认处于一般指令模式,此时可以上下左右移动光标、使用快捷键来复制粘贴、删除整行整列。编辑模式:在一般指令模式下,按下“i、I,a、A,r、R,o、O”任意一个... 查看详情

labviewvi可重入详解

什么是VI可重入?用来设置当前VI是否可以进行多实例并行执行的VI属性,VI的默认设置为不可重入。打开VI->Property->Execution如图下图,可以设置相应的配置。Non-reentrantexecution 不可重入:多个调用者调用此VI时,是按照顺序逐... 查看详情

rd基本功——vi基础与最常用指令

...练的;本篇文章就记录了一些日常工作中最常用的的指令,希望能和大家共同学习共同进步;一、vi与vim的区别vim是vi的升级版本,它兼容vi的所有指令,并提供一些新特性,如以不同颜色标识语法等&#x 查看详情

tarjan详解(代码片段)

“tarjan陪伴强联通分量生成树完成后思路才闪光欧拉跑过的七桥古塘让你心驰神往”----《膜你抄》一、tarjan求强连通分量什么是强连通分量?引用来自度娘的一句话:“有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi... 查看详情

dockerfile详解文件指令详解(代码片段)

目录一、环境介绍二、指令介绍2.1、FROM指令2.1.1、概述2.1.2、语法2.2、MAINTAINER指令2.2.1、概述2.2.2、语法2.3、LABEL指令2.3.1、概述2.3.2、语法2.4、ADD指令2.4.1、概述2.4.2、语法2.4.3、语法解释2.4.4、注意事项2.5、COPY指令2.5.1、概述2.5.2... 查看详情

vi和vim

...,再以颜色显示程序代码与一般信息。vi分为三种模式:指令模式,编辑模式,指令列模式指令模式:使用vi+文档名打开文档后默认进入的模式可以使用的命令如下:h:光标向左移动一个字符j:光标向下移动一个字符k:光标向 查看详情

vim操作常用指令(转)

vim是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim)。vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率。vi是“visualinterface”的缩写,vim是viIMproved(增强版的vi)。在一般的系统管理维护中vi就够用,如果想使用... 查看详情

vi编辑器的使用

...器,工作在字符模式下。1、vi的状态vi有三种工作模式,指令模式,文本输入模式,行末模式。三者的相互关系如下:指令模式(CommandMode)输入a、i、o进入文本输入模式(InputMode)。文本输入模式(InputMode)下按ESC进入指令模式(CommandMod... 查看详情

2017.11.09vi编辑器指令

1.命令模式与编辑模式切换  a:光标向后移动一位进入编辑模式  i:光标和内容没有变化进入编辑模式  o:新起一行进入编辑模式  s:删除光标所在字符进入编辑模式2.尾行模式操作  :w//对编辑后的文档进行保存  :q//... 查看详情

vi分屏指令

命令模式下::new,新建文件并分屏,快捷键,Ctrl+W,然后马上按n键:spilt水平分屏,将当前屏分为两个,水平的。  Ctrl+w,s:vsplit垂直分屏,将当前屏分为两个,垂直的。 Ctrl+w,v:only取消分屏,取消当前的屏,当前屏指的... 查看详情

linux系统中vi的3种模式是啥

参考技术AVi有三种基本的工作模式:指令行模式、文本输入模式、行末模式。他们的相互关系如所示。指令模式(CommandMode)下输入a、i、o进入文本输入模式(InputMode)文本输入模式(InputMode)下按ESC进入指令模式(CommandMode)指令模式... 查看详情

linux基础命令,目录文件操作,vi编辑器详解(代码片段)

一、linux基础命令linux命令的执行必须依赖于shell命令解释器。shell实际上是在linux系统中运行的一种特殊程序,它位于操作系统内核与用户之间,负责接收用户输入的命令并进行解释,将需要执行的操作传递给系统内核执行,shell... 查看详情

文本编辑器vim/vi——命令模式

一个完整的指令的标准格式:Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象]一个指令可以包含多个选项,操作对象也可以是多个。vim指令:指令:vim  (vim是一款文本编辑器)语法:#vim... 查看详情

angularjs指令详解

一、指令定义对于指令,可以把它简单的理解成在特定DOM元素上运行的函数,指令可以扩展这个元素的功能。首先来看个完整的参数示例再来详细的介绍各个参数的作用及用法:<divmy-directive></div>angular.module(‘myApp‘,[]).... 查看详情

angularjs自定义指令详解

....csdn.net/qq_27626333/article/details/52261409除了AngularJS内置的63个指令外,我们还可以创建自定义指令。你可以使用.directive函数来添加自定义的指令。要调用自定义指令,HTML元素上需要添加自定义指令名。使用驼峰法来命名一个指令,r... 查看详情

dockerfile详解文件指令详解(代码片段)

目录一、环境介绍二、指令介绍2.1、FROM指令2.1.1、概述2.1.2、语法2.2、MAINTAINER指令2.2.1、概述2.2.2、语法2.3、LABEL指令2.3.1、概述2.3.2、语法2.4、ADD指令2.4.1、概述2.4.2、语法2.4.3、语法解释2.4.4、注意事项2.5、COPY指令2.5.1、概述2.5.2... 查看详情