Linux之vi介绍----完整入门及快捷键

2023-05-16

0.前言

自从我的学习linux笔记开始更新后,阅读量挺高,说明大家使用linux热情很高。在前边几篇博客中我未指明参考书籍,这里做下说明,将慢慢补充之前几篇的参考说明。
我的博客源于对以下书本学习中的笔记,大家如果有兴趣可以在网上购买学习。

《Linux命令行大全》 [美] William E. Shotts. Jr 著 郭光伟 郝记生 译, 人民邮电出版社

如有侵权,可联系博主删除。

1. 为什么要学习vi

  • vi总是可用的。包括没有图形界面,例如远程服务器等
  • vi是轻量级软件,运行速度快,且通过快捷键的组合,可以完全键盘操作
  • 用户不想被其它Linux和Unix用户蔑视(额,原书是这么写的,博主也深有同感)

当然,现在比较流行vim,是vi的一个扩展。
注意,在本节我使用的ubuntu系统为中文语言环境,英文对应下就好了.

2.启动和退出vi

$ vi

输出为

~                                           VIM - Vi IMproved
~
~                                             版本 7.4.1099
~                                        维护人 Bram Moolenaar 等
~                                      修改者 <bugzilla@redhat.com>
~                                    Vim 是可自由分发的开放源代码软件
~
~                                         帮助乌干达的可怜儿童!
~                             输入  :help iccf<Enter>       查看说明
~
~                             输入  :q<Enter>               退出
~                             输入  :help<Enter>  或  <F1>  查看在线帮助
~                             输入  :help version7<Enter>   查看版本信息

退出即输入

:q

注意,冒号也是命令的一部分
如果由于一些原因,vi不能够退出(通常是因为没有保存修改过的文件),可以通过在命令后添加感叹号的方式强制退出。

:q!

3.编辑模式

启动vi,向其传递一个存在的文件路径,即可打开已经存在的文件;若路径不存在,则新建一个文件

$ rm -f foo.txt
$ vi foo.txt

屏幕显示

~
~
~
~
~
~
~
"foo.txt" [新文件]                                                                      0,0-1        全部

其中,每行的波浪线代表此行没有任何内容.

4.1 进入插入模式

如果用户想向文件中添加一些内容,首先要按下I键(或者Insert)进入插入模式。插入模式下,屏幕底部会显示

-- 插入 --                                                                              0,1          全部

现在可以随便输入了

I like coding!!!!

要退出,按下ESC键退出插入模式并返回命令模式

4.2 保存工作

要保存用户修改过的文件,在命令模式下输入一条ex命令,也就是按“:”键。这样之后,一个冒号会出现在底部。要将文件写入磁盘,在冒号之后输入w.

:w

屏幕底部显示

"foo.txt" [新] 1L, 18C 已写入                                                           1,17         全部

注意,在vim中,命令模式被称为普通模式,使用ex命令则被称为命令模式。

4.3 移动光标

vi提供了很多移动光标的命令,一些与less是共用的
表1 光标移动快捷键

光标动作
L或右方向键右移一位
H或左方向键左移一位
J或下方向键下移一位
K或上方向键上移一位
数字0至本行开头
Shift+6(^)至本行第一个非空字符
Shift+4($)至本行末尾
W至下一个单词或标点的开头
Shift+W至下一个单词的开头,忽略标点
B至上一个单词或标点的开头
Shift+B至上一个单次或标点的开头,跳过标点
Ctrl+F或PgDn下翻一页
Ctrl+B或PgUp上翻一页
number+Shift+G至第number行
Shift+G至文件的最后一行

5.基本编辑

下面介绍插入、删除、剪切、复制等基本的文本编辑操作。并且vi支持有限的撤销操作。

5.1 添加文本

在命令模式下,光标移动到文本的末尾是不能跳出行末的,此时按下a,光标就会跳过文本的末尾,同时vi进入插入模式。这样用户就可以在行末添加文本了。

5.2 插入一行

当需要在文本中重开一行时,有以下两种方式
表2 插入一行功能键

命令开行
o当前行的上方
O当前行的下方

5.3 删除文本

首先,我们首先要知道,按u可以撤销命令,就像windows的Ctrl+Z一样,但是,vi只能取消一次操作,而vim可以取消多次操作.

表3 文本删除命令

命令删除内容
x当前字符
3x当前字符和之后2个字符
dd当前行
5dd当前行和之后的4行
dW当前字符到下一个单词的起始
d$当前字符到当前行的末尾
d0当前字符到当前行的起始
d^当前字符到当前行下一个非空字符
dG当前行到文件末尾
d20G当前行到文件第20行

5.4 剪切、复制和粘贴文本

命令d不只是删除文本,而是在“剪切”文本,其作用类似于剪切板。然后用户可以使用p命令将缓存中的内容粘贴到光标之后或者使用P命令将内容粘贴到光标之前.
而命令y会复制文本。
表4 复制命令

命令复制内容
yy当前行
5yy当前行和之后的4行
yW当前字符到下个单词的起始
y$当前字符到行的末尾
y0当前字符到行的起始
y^当前字符到下一个非空字符
yG当前行到文件末尾
y20G当前行到第20行

5.5 合并行

vi提供了J命令来合并行.
可以将光标移动到行的开头和结尾测试。

6.查找和替换

vi提供了在一行或者整个文件中,根据搜索条件将光标移动至指定位置的功能。vi也可以执行文本替换工作,用户可以指定替换时是否需要用户确认。

6.1行内搜索

命令f在行内进行搜索,将光标移至搜索到下一个指定字符,例如fa会将光标移动到下一行出现字符a的地方。在执行过一次行内搜索之后输入分号可以使vi重复上一次搜索.

6.2搜索整个文件

命令“/”可以完成对单词或短于的搜索,当用户使用“/”命令后,一个“/”符号会出现在屏幕的底部。接下来,输入需要搜索的单次或短语,以Enter键结束,光标会移动到下一处包含被搜索字符串的地方,使用n命令可以重复此搜索

6.3全局搜索和替换

vi使用ex命令来执行几行或者整个文件中的搜索和替换操作。输入以下命令可将文件的like替换为love

:%s/like/love/g

表5 全局搜索和替换语法范例

组成含义
:分号用于启动一条ex命令
%确定了操作作用的范围。%简介地代表了从文件的第一行到最后一行。本命令的范围还可以表示为1,5(从第1行到第5行)或者1,$,意思是从第1行到文件的最后一行。如果不给出范围,那么仅在当前行生效。
s指定了具体的操作——本次是替换操作(搜索和替换)
/like/love搜索和替换的文本
g代指global(全局),也就是说对搜索到的每一行和每一个实例进行替换。如果g缺失,则只替换每一行第一个符合条件的实例。

如果在命令末尾添加c,则命令在每次替换之前都会请求用户确认。

:%s/like/love/gc

显示器最下面会出现

替换为 love (y/n/a/q/l/^E/^Y)?

含义如下
表6 替换确认功能键

功能键行为
y执行替换
n跳过本次替换
a执行此替换和之后的所有替换
q或者ESC停止替换
l执行此次替换并退出替换,是last的缩写
Ctrl+E,Ctrl+Y分别为向下滚动和向上滚动,能用于查看替换处的上下文

7.编辑多个文件

用户会遇到同时编辑多个文件,例如从文件A拷贝内容到文件B。用户可以在命令行通过制定多个文件方式打开多个文件。
语法为

vi file1 file2

现在,我们创建一个新的文件,并与之前的foo.txt同时打开

$  ls -l /usr/bin | ls-output.txt
$  vi foo.txt ls-output.txt

7.1 切换文件

使用以下ex命令来从一个文件切换到下一个文件

:n

切换回上一个文件

:N

当用户从一个文件切换到另一个的时候,vi要求用户必须先保存对当前文件作出的修改才能切换到其它文件。若要放弃对文件的修改并使vi强制切换到另一个文件,可在命令后添加感叹号(!)。
除了切换文件之后,还有其它命令来帮助用户编辑文档。
例如:buffers命令来查看正在编辑的文件列表。

:buffers
  1 %a   "foo.txt"                      第 1 行
  2 #    "ls-output.txt"                第 1 行

输入:buffer加文件(buffer)编号可以切换到另一个文件(buffer)。例如要切换到ls-output.txt可以使用

:buffer 2

7.2 载入更多的文件

可以在现有的编辑会话中载入更多文件,使用ex命名:e(edit的缩写)+文件名可以载入另一个文件。

7.3 文件之间内容的复制

有时需要将一个文件中的一部分复制到另一个文件中。可以使用之前讲过的复制粘贴,并切换文件实现。
首先,在载入的两个文件中,切换到文件1(foo.txt)

:buffer 1

然后,将光标移动到文件的第一行并输入yy命令来复制第1行
再切换到文件2
将光标移动到第一行并使用p命令将文件1复制的内容粘贴到本文件

7.4 插入整个文件

用户还可以将一个文件完全插入正在编辑的文件中。
先结束7.3的会话并重启vi的同时只打开一个文件

$ vi ls-output.txt

光标移动到需要插入的行,例如第3行,并输入如下ex命令:

:r foo.txt

命令:r(read的缩写)将制定的文件内容插入到光标位置之前。

8.保存工作

  • 方法1: ex命令:w
  • 方法2:在命令模式下输入ZZ将保存当前文档并退出vi.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux之vi介绍----完整入门及快捷键 的相关文章

随机推荐