为什么要学习vi

• vi 很多系统都预装。POSIX,这套 Unix 系统中程序兼容的标准,就要求系统要预装 vi。

• vi 是轻量级且执行快速的编辑器。对于许多任务来说,启动 vi 比起在菜单中找到一个图形化文本编辑器, 再等待编辑器数倍兆字节的数据加载而言,要容易的多。另外,vi 是为了加快输入速度而设计的。 当一名熟练的 vi 用户在编辑文件时,他或她的手从不需要移开键盘。

• 我们不希望其他 Linux 和 Unix 用户把我们看作胆小鬼(不能被鄙视了啊)。

好吧,可能只有两个充分的理由。


vi目前情况介绍

大多数 Linux 发行版不包含真正的 vi,而是自带一款高级替代版本,叫做 vim(它是“vi improved”的简写)由 Bram Moolenaar 开发的。
vim 相对于传统的 Unix vi 来说,取得了实质性进步。

通常,vim 在 Linux 系统中是“vi”的符号链接(或别名)。
在随后的讨论中,我们将会假定我们有一个叫做“vi”的程序,但它其实是 vim。


启动和停止 vi

启动 vi:

[me@linuxbox ~]$ vi

一个像这样的屏幕应该出现:

VIM - Vi Improved
....

退出 vi:

:q

shell 提示符应该返回。
如果由于某种原因,vi 不能退出(通常因为我们对文件做了修改,却没有保存文件)。 通过给命令加上叹号强制退出:

:q!

编辑模式

vi 创建新文件的方法:

 [me@linuxbox ~]$ vi foo.txt

Enter键,如果一切运行正常,我们应该获得一个像这样的屏幕:

....
"foo.txt" [New File]

每行开头的波浪号(”~”)指示那一行不存在文本,这表示我们有一个空文件。还没有输入任何字符。

当 vi 启动后,进入的是命令模式。这种模式下,几乎每个按键都是一个命令。


插入模式

为了在文件中添加文本,首先我们必须进入插入模式。
按下”i”按键进入插入模式。之后,我们应该在屏幕底部看到下面一行,如果 vi 运行在高级模式下(这不会出现在 vi 兼容模式下):

-- INSERT --

现在我们能输入一些文本了。试着输入这些文本:

The quick brown fox jumped over the lazy dog.

按下 Esc 按键,退出插入模式并返回命令模式。


保存我们的工作

为了保存我们刚才对文件所做的修改在命令模式(Esc返回命令模式)下输入一个”:”键。
按下冒号键之后,一个冒号字符应该出现在屏幕的底部:

:

为了写入我们修改的文件,我们在冒号之后输入”w”字符,然后按下回车键:

:w

文件将会写入到硬盘,并且我们应该在屏幕底部得到一个确认信息,就像这样:

"foo.txt" [New] 1L, 46C written

移动光标

当在 vi 命令模式下时,vi 提供了大量的移动命令,其中一些是与 less 阅读器共享的。这里 列举了一些:

vi 中的许多命令都可以在前面加上一个数字,比方说上面提到的”G”命令。在命令之前加上一个数字,我们就可以指定命令执行的次数。例如,命令”5j”导致 vi 向下移动5行。


基本编辑

如果我们按下“u” 按键,当在命令模式下,vi 将会撤销你所做的最后一次修改。


追加文本

vi 有几种不同进入插入模式的方法。我们已经使用了 i 命令来插入文本。
vi 提供了追加文本的命令,命名为”a”命令。把光标移动到行尾,输入”a”, 光标就会越过行尾,vi 进入插入模式。这样就允许我们添加更多的文本:

The quick brown fox jumped over the lazy dog. It was cool.

记住按下 Esc 按键来退出插入模式。

在行尾附加文本是”A”命令。
大A 命令非常有用,因为在启动插入模式之前,它把光标移到了行尾。


打开一行

我们插入文本的另一种方式是“打开”一行。这会在存在的两行之间插入一个空白行,并且进入插入模式。 这种方式有两个变体:

o :当前行的下方打开一行。
O :当前行的上方打开一行。


删除文本

vi 提供了“x”和“d”的命令来删除文本:

首先, x 按键会删除光标位置的一个字符。可以在 x 命令之前带上一个数字,来指明要删除的字符个数。
d 按键更通用一些。类似 x 命令,d 命令之前可以带上一个数字,来指定要执行的删除次数。
另外, d 命令之后总是带上一个移动命令,用来控制删除的范围。

文本删除命令:


剪切,复制和粘贴文本

这个 d 命令不仅删除文本,它还“剪切”文本。
每次我们使用 d 命令,删除的部分被复制到一个 粘贴缓冲区中(看作剪切板)。过后我们执行小 p 命令把剪切板中的文本粘贴到光标位置之后, 或者是大 P 命令把文本粘贴到光标之前。

y 命令用来“拉”(复制)文本,和 d 命令剪切文本的方式差不多。
使用的实例:


连接行

vi 提供了一个特定的命令,大写的 J(不要与小写的 j 混淆了, j 是用来移动光标的)把行与行之间连接起来。


查找和替换

vi 有能力把光标移到搜索到的匹配项上,vi 可以在单一行或整个文件中运用这个功能。

查找一行

f命令查找一行,移动光标到下一个所指定的字符上。
例如,命令 fa 会把光标定位到同一行中 下一个出现的”a”字符上。在一行中执行了字符的查找命令之后,通过输入分号来重复这个查找。


查找整个文件

移动光标到下一个出现的单词或短语上,使用 / 命令。这个命令和我们之前在 less 程序中学到 的一样。
当你输入/命令后,一个”/”字符会出现在屏幕底部。下一步,输入要查找的单词或短语后, 按下回车。光标就会移动到下一个包含所查找字符串的位置。
通过 n 命令来重复先前的查找。


全局查找和替代

vi 使用命令来执行查找和替代操作(vi 中叫做“替换”)。
把整个文件中的单词“Line”更改为“line”, 我们输入以下命令:

:%s/Line/line/g

我们把这个命令分解为几个单独的部分,看一下每部分的含义:

我们也可以指定一个需要用户确认的替换命令。通过添加一个”c”字符到这个命令的末尾,来完成 这个替换命令。例如:

:%s/line/Line/gc

这个命令会把我们的文件恢复先前的模样;然而,在执行每个替换命令之前,vi 会停下来,通过下面的信息,来要求我们确认这个替换:

replace with Line (y/n/a/q/l/^E/^Y)?

括号中的每个字符都是一个可能的选择,如下所示:

如果你输入 y,则执行这个替换,输入 n 则会导致 vi 跳过这个实例,而移到下一个匹配项上。


编辑多个文件

通过 vi,我们可以打开多个文件来编辑,只要在命令行中指定要编辑的文件名。

vi file1 file2 file3...

文件之间转换

从这个文件转到下一个文件,使用这个命令:

:n

回到先前的文件使用:

:N

当我们从一个文件移到另一个文件时,如果当前文件没有保存修改,vi 会阻止我们转换文件, 这是 vi 强制执行的政策。在命令之后添加感叹号,可以强迫 vi 放弃修改而转换文件。

查看正在编辑的文件列表,使用:buffers 命令。运行这个命令后,屏幕顶部就会显示出一个文件列表。


保存工作

像 vi 中的其它操作一样,有几种不同的方法来保存我们所修改的文件。我们已经研究了:w 这个命令, 但还有几种方法,可能我们也觉得有帮助。

在命令模式下,输入 ZZ 就会保存并退出当前文件。

同样地,:wq 把:w 和:q 命令结合到 一起,来完成保存和退出任务。

这个:w 命令也可以指定可选的文件名,这个的作用就如“另存为。。。”。
例如,如果我们 正在编辑 foo.txt 文件,想要保存一个副本,叫做 foo1.txt,那么我们可以执行以下命令:

:w foo1.txt

注意:当上面的命令以一个新名字保存文件时,但它并没有更改你正在编辑的文件的名字。 如果你继续编辑的话,你还是在编辑文件 foo.txt,而不是 foo1.txt。


知识来源:http://billie66.github.io/TLCL/book/zh/chap13.html

Linux必备技能:vi的使用相关推荐

  1. ​一网打尽 Linux 必备技能,就靠它了!

    毫无疑问,互联网上很多技术和产品背后都有 Linux 的身影. 当你用 Google 搜索,在淘宝购物,用 QQ.微信聊天的时候,后台是成千上万的 Linux 服务器在支撑着这些软件和服务. 对软件工 ...

  2. Linux必知必会,答应我拿下这些Linux必备技能

    本文纯粹就是小杰对于自己学完Linux操作系统之后回过头来对于Linux中的核心重点知识的一个梳理.  小杰会尽量地将其梳理清楚, 大家一起学习,共同进步, 知识不分高低, 计算机的学习小杰认为也是一 ...

  3. Java面试必备技能

    前言 又到了一年一度的面试高峰期,想当年这会,博主也是疯狂的投简历,可能是运气比较好,一面即过,哈哈哈哈,在这里,给大家总结一下,面试互联网公司必会的一些技能,这里只针对刚毕业的小伙伴,高手勿喷. J ...

  4. Linux系统运维必备技能

    浅谈Linux系统运维工程师必备技能 一.什么是运维工程师 相信读者们必定听说过linux,也听说过运维工程师.那么运维工程师是个什么概念呢? 百度百科上的官方解释如下: 运维工程师(Operatio ...

  5. 阿里云官方学习课程推荐-Linux运维学习路线 从事云计算运维相关工作必备技能

    阿里云官方学习课程推荐-Linux运维学习路线 从事云计算运维相关工作必备技能 目前越来越多的企业需要依赖于IT技术发布产品与服务,尤其是电子商务最为明显,它凸显了IT技术在现代企业中的重要性.当企业 ...

  6. 学好Linux必备知识

    鸟哥的私房菜中提到学好Linux必备的几种技能: 1.  计算器概论不硬件相关知识: 因为既然想要走Linux这门路,信息相关癿基础技能也丌能没有啊! 所以先理觋一下基础癿硬件知识,丌用 一定要全懂啦 ...

  7. mysql的介绍;安装及基本配置;mysql数据库运行必备技能

    一.MySQL的介绍 1. 数据库:数据库集中存放位置 1) 常见的数据库类型:关系型(mysql.oracle.SQLserver2008,DB2),树型(windows注册表).非关系型(NoSQ ...

  8. DevOps \u0026 SRE 必备技能清单

    导读 \\ 这个列表并非详尽无遗,只是列举了技术基础.必须知道的技能和一些随机的想法.可以用它们作为一个清单来评估你自己或其他人,或者为下一次面试DevOps/SRE(Site Reliability ...

  9. 3306端口是什么协议_防黑必备技能之端口篇

    - 如何查看端口占用情况 我们分windows和linux两种不同的平台分别介绍. 一.windows平台 在windows平台下,查看端口占用情况,最常见的DOS命令就是NETSTAT命令. 打开运 ...

最新文章

  1. AngularJs表单自动验证
  2. Java, Mono, or C++?
  3. 5-35 城市间紧急救援 (25分) pat 数据结构
  4. webapi 返回类型
  5. [LeetCode]#13 3sum
  6. git 命令使用技巧
  7. HttpClient4.5.2调用示例(转载+原创)
  8. Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度
  9. c#Md5 32位加密结果少了两个0的原因
  10. 深入解析Node.js setTimeout方法的执行过程
  11. Java 静态变量和静态方法
  12. Oracle体系结构四(学习笔记)
  13. Percona Server
  14. java向上向下取整与四舍五入
  15. 驴妈妈、途牛们该如何收割亲子游市场的红利?
  16. 郁闷的C小加(一)(后缀表达式)
  17. Tomcat 下载安装,启动,停止,注册服务,开机自启
  18. 全概率公式和贝叶斯公式的定义与说明
  19. i78700和i510400f性能差距大不大
  20. Git报错remote: error: hook declined to update refs/heads/feature/XXX

热门文章

  1. 2016的ChinaJoy沦为ChinaVR?
  2. with respect to是什么意思?
  3. 逸鹏说道:读王阳明、曾国藩有所感
  4. ISO27001信息安全管理体系建立
  5. 各种加工方法下的粗糙度范围
  6. java 读取项目内图片,java web项目中读取本地图片
  7. 什么是JDBC,JDBC如何使用?
  8. 面经手册 · 开篇《面试官都问我啥》
  9. 京东面经 10.10
  10. 破世界纪录了0.74秒!用Python实现自动扫雷!