Linux中vi命令的用法(Linux 简单使用vi编辑器)

管理员 2024-09-22 10:08:44 0

vi很常用,这里记录一下简单的用法,以利于未来用到或忘记时快速查阅。

vi的模式命令模式(command mode): 执行vi命令后默认进入命令模式。插入模式(insert mode): 在命令模式按'i'键,进入插入模式。按ESC键退出插入模式返回到命令模式。末行模式(last line mode): 在命令模式按':'键,进入末行模式。退出末行模式返回命令模式有两种方法,方法1是按ESC键返回命令模式,方法2是输入末行命令按enter键执行,等末行命令执行结束,就自动返回命令模式。

每种模式都有各自的命令,命令模式有命令模式的命令,插入模式有插入模式的命令,末行模式有末行模式的命令。

保存文件(save; write)、退出vi编辑器(quit)

以下命令需在末行模式输入和执行

:w 保存文件,把文件内容写入到当前文件。:wq 先保存后退出vi::q 退出vi:q! 强制退出vi:r filename 把其他路径下的文件内容导入到当前文件光标所在行的下面。:w filename 把当前文件的内容写入到其他的文件里,就是“另存为”操作。执行这个命令时,当前文件内容的修改不会写入到当前文件(原始文件)。命令模式进入插入模式的方法按i键 从光标所在位置的左侧(前面),进入插入模式按a键 从光标所在位置的右侧(后面),插入插入模式按A键 把光标移动到光标所在行的尾部,进入插入模式按o键 在光标所在行的下面插入新行,把光标移动到新行的行首,进入插入模式按O键 在光标所在行的下面插入新行,把光标移动到新行的行首,进入插入模式移动光标

以下4个键在命令模式和插入模式都可以使用

按Home键可以把光标移动到光标所在行行首。按End键可以把光标移动到光标所在行行尾。按PgUp键可以往上翻页,实现光标往上快速移动。按PgDn键可以往下翻页,实现光标往下快速移动。

以下命令需在命令模式输入和执行

行内移动光标

0 功能与^相同。^ 把光标移动到光标所在行的行首。$ 把光标移动到光标所在行的行尾。N + <space> 把光标往后移动N个字符。(好像可以跨行)N + <backspace> 把光标往前移动N个字符。(好像可以跨行)b 把光标移动到当前光标所在位置的前一个单词的首字母。w 把光标移动到当前光标所在位置的后一个单词的首字母。e 把光标移动到当前光标所在位置的后一个单词的尾字母。5b 往前移动5个单词。5w 往后移动5个单词。5e 往后移动5个单词。Ctrl + 左后方向键

行间移动光标

gg 把光标移动到第一行。是1G的快捷方式。G 把光标移动到最后一行。NG 把光标移动到第N行。1G就是移动到第1行。N + <Enter> 从光标所在行开始把光标往后(下)移动N行。H (high) 把光标移动到屏幕上面M (middle) 把光标移动到屏幕中间L (low) 把光标移动到屏幕下面

其他移动光标命令

h 左移光标l 右移光标k 上移光标j 下移光标ctrl + f 光标向前翻整页ctrl + b 光标向后翻整页ctrl + d 光标向前翻半页ctrl + u 光标向后翻半页复制(copy)

以下命令需在命令模式输入和执行

yy命令复制光标所在行。y^命令复制光标所在位置至行首的全部字符。y$命令复制光标所在位置至行尾的全部字符。5yy命令 从光标所在行开始往下复制5行。yw命令复制光标所在位置至当前单词尾部的全部字符。

在末行模式输入以下命令执行

:s,ey 复制第s行至第e行之间的所有行,如:50,100y复制第50行至100行之间的所有行。粘贴(paste)

以下命令需在命令模式输入和执行

P命令 在光标所在位置前面粘贴p命令 在光标所在位置后面粘贴。5p命令 在光标所在位置往后粘贴5次删除(delete)

以下命令需在命令模式输入和执行

dd命令删除光标所在行d^命令删除光标所在位置至行首的全部字符。d$命令删除光标所在位置至行尾的全部字符。dw命令删除光标所在位置至当前单词尾部的全部字符(含单词尾部的空格)。de命令删除光标所在位置至当前单词尾部的全部字符(不含单词尾部的空格)x命令删除光标所在位置后面的单个字符。J(大写字母)命令删除光标所在行行尾的换行符,等同于合并当前行和下一行的内容。5dd命令 从光标所在行开始往下删除5行。5dw命令 删除当前光标所在位置后面的共5个单词(含尾部的空格)。5de命令 删除当前光标所在位置后面的共5个单词(不含尾部的空格)。5x命令 删除当前光标所在位置后面的共5个字符。5J命令 从光标所在行开始往下合并5行(通过删除每行行尾的换行符)。

在末行模式输入以下命令执行

:d 删除光标所在行。:s,ed 删除第s行至第e行之间的全部行。:1,.d 删除第一行至光标所在行的全部行。:.,$d 删除光标所在行至最后一行的全部行。:1,$d 删除第一行至最后一行的全部行。慎用。:g/^.*$/d 删除第一行至最后一行的全部行。与上面的:1,$d功能相同。慎用。:g/^$/d 删除全部空白行。这个命令非常有用,删除文件空白行是使用频率较高的操作,使用tr命令和sed命令也可以实现。Linux 简单使用vi编辑器

删除文件空白行 - 执行:g/^$/d前

Linux 简单使用vi编辑器

删除文件空白行 - 执行:g/^$/d后

查找(find; search)

以下命令需在命令模式输入和执行

/待找字符串 往下查找,按n查找下一个,按N查找上一个。?待找字符串 往上查找,按n查找下一个,按N查找上一个。替换(replace; substitute)

查找和替换的命令语法 :[range]s/old/new/gc。

查找和替换的范围有: 行内(单行)查找和替换,行间(多行)查找和替换,整个文件内(从第一行到最后一行的全部行)查找和替换。range,指范围,指在哪一行或哪几行进行查找和替换。range是可以缺少的。缺少range时,会在光标所在行进行查找和替换操作。g指global,指全局查找和替换,找到目标字符串在每一行的每一个位置,进行替换。c指comfirm,指确认是否执行查找和替换操作。

行内(单行)查找和替换

:s/old/new 在光标所在行执行一次查找和替换。何为行内一次查找和替换?从行首开始查找目标字符串,找到了它第一次出现的位置,执行替换操作,然后结束,不再往下进行查找和替换。:s/old/new/g 在光标所在行执行全部(全局)查找和替换。

行间(多行)查找和替换

:<start_line>,<end_line>s/old/new 在行间的每一行执行一次查找和替换。:<start_line>,<end_line>s/old/new/g(c) 在行间的每一行执行全部(全局)查找和替换。:.,$s/old/new/ 在光标所在行与最后一行之间的每一行执行一次查找和替换。:.,$s/old/new/g 在光标所在行与最后一行之间的每一行执行全部(全局)查找和替换。

在整个文件内(第一行与最后一行之间)进行查找和替换

:%s/old/new/ 在第一行和最后一行之间的每一行执行一次查找和替换。:%s/old/new/g(c) 在第一行和最后一行之间的每一行执行全部(全局)查找和替换。%指百分百,就是指查找和替换的范围为整个文件,为第一行到最后一行的全部行。

查找和替换的例子

:%s/^\(.*\)$/thinkdecideact: \1/g 在每行行首插入'thinkdecideact: '这个字符串。其中,'^(.*)$'匹配整行,\1是反向引用(back reference),指前面正则里第一个分组匹配到的内容,即一整行数据。:%s/^\(.*\)$/\1(thinkdecideact)/g 在每行行尾插入'(thinkdecideact)'这个字符串。:%s/^\(life\)/Good quote: \1/g 在以life开头的每一行行首添加'Good qutoe: '这个字符串。:%s/best/&/gn 统计整个文件里best这个字符串在整个文件中出现的次数。Linux 简单使用vi编辑器

查找和替换例子 - 原始文件内容

Linux 简单使用vi编辑器

查找和替换例子 - 在每行行首添加一个字符串

Linux 简单使用vi编辑器

查找和替换例子 - 在每行行尾添加一个字符串

Linux 简单使用vi编辑器

查找和替换例子 - 在以life开头的每一行添加一个字符串

取消(undo; cancel)

命令模式下输入以下命令执行

u命令取消最近一次操作,并恢复操作结果;可以多次使用u命令,不断往后取消恢复之前的结果(往后移动)。U命令取消对光标所在行进行的全部操作。Ctrl + R组合键恢复u命令取消的操作(往前移动)。(R是recover, restore之意)什么是当前行?什么是当前单词?

光标所在行就是当前行。光标所在的单词就是当前单词。

相关文章