文档章节

Vim使用

SuShine
 SuShine
发布于 2015/10/19 08:52
字数 2135
阅读 68
收藏 5
点赞 0
评论 0

vi 的有两种模式

1.命令模式

2.编辑模式

通过vi命令进入的首先当然是命令模式等待用户输入命令进行操作,在这时候可以

通过 j (下) k(上)   l(右) h(左) 来移动光标



可以通过i来在光标位置插入文字 主要 输入i 就会使vi进入 编辑模式 这时候所有的字母就都是输入text了 知道esc退出这个模式

其他常用命令是x  也就是 退格


退出的时候使用:wq 是保存并退出 :q! 是直接退出 不保存


使用 vi

vi 编辑器几乎在所有 Linux 和 UNIX 系统上都存在。实际上,如果系统只有一个编辑器,那么它可能就是 vi,所以了解 vi 的操作方式是有意义的。

启动 vi

大多数 Linux 发行版本现在附带 vim(表示  V IM proved,改进的 vi)编辑器而不是传统的 vi。vim 向上兼容 vi,并有图形模式(gvim)以及标准的 vi 文本模式界面。vi  命令常常是 vim 程序的别名或符号链接。前面的 修改优先级 一节中,我们希望修改正在运行的 count1.sh shell 脚本的优先级。如果您自己尝试这个操作,就会发现这个命令运行得太快了,没有足够的时间可以用 renice  完成优先级修改。所以我们要使用 vi 编辑器在文件的开头添加一行,从而让进程睡眠 20 秒,这样就有时间修改优先级了。

要启动 vi 编辑器,使用 vi 命令并以文件名作为参数。有许多选项可供选用,细节请参考手册页。使用命令

vi count1.sh 

应该会看到与清单 115 相似的显示。如果使用 vim,一些单词可能是不同颜色的。vim 有语法突出显示模式(原始的 vi 编辑器没有这种模式),在系统上这种模式可能是默认打开的。


清单 115. 使用 vi 编辑 count1.sh


x="$1"
echo "$2" $(date)
while [ $x -gt 0 ]; do let x=$x-1;done
echo "$2" $(date)
~
~
~
~
~
~
"count1.sh" 4L, 82C 

vi 模式

vi 编辑器有两种操作模式:

命令模式在命令模式中,可以在文件中移动并执行编辑操作,比如搜索文本、删除文本、修改文本等等。常常以命令模式启动。 插入模式在插入模式中,在插入点上将新文本输入文件。要返回命令模式,按下  Esc 键。

这两个模式决定了编辑器的行为。在开发 vi 的时候,并不是所有的终端键盘上都有光标移动键,所以在 vi 中可以做的所有事情都可以使用标准打字机上的键加上 Esc 和 Insert 键来完成。但是,可以将 vi 配置为使用额外的键(如果这些键可用的话);键盘上的大多数键在 vi 中都有作用。vi 是在早期的终端连接时代开发的,所以 vi 使用的命令非常短,因此命令的含义比较含混。

离开 vi

在学习新编辑器时,我喜欢先了解如何退出它,以免意外退出。下面这些退出 vi 的方式包括保存或放弃修改,或者从头重新开始。如果这些命令看起来无效,那么您可能是在插入模式中,所以要按 Esc 离开插入模式并返回命令模式。

:q!退出文件编辑并放弃所有修改。这是摆脱麻烦的常用方法。 :w!写文件(无论是否修改了)。尝试覆盖现有文件、只读文件或其他不可写文件。可以提供一个文件名参数,编辑的结果将写到这个文件而不是原来的文件。一般来说,去掉 ! 比较安全,除非您知道自己正在做什么。 ZZ如果文件已经修改了,就写文件,然后退出。这是正常退出 vi 的常用方法。 :e!编辑文件的当前磁盘副本。这会重新装载文件,放弃已经做的修改。如果磁盘副本由于某些其他原因改变了,而您希望获得最新版本,那么可以使用这个命令。 :!运行 shell 命令。输入命令并按  Enter。当命令完成时,会看到输出以及返回 vi 编辑的提示。

注意:

  1. 在输入冒号(:)时,光标将移动到屏幕底部,在这里输入命令和任何参数。
  2. 如果从上面的命令中去掉惊叹号,就可能收到一个错误消息,比如指出修改还未保存或无法写输出文件(例如,正在编辑一个只读文件)。
  3. : 命令有更长的形式(:quit、:write、:edit),但是很少使用长形式。

移动

以下命令用于在文件中到处移动:

h在当前行向左移动一个字符 j移动到下一行 k移动到上一行 l在当前行向右移动一个字符 w移动到当前行上的下一个单词 e移动到当前行上的下一个单词末尾 b移动到当前行上的前一个单词开头 Ctrl-f向前滚动一页 Ctrl-b向后滚动一页

如果在这些命令前面输入一个数字,那么命令将重复执行这个数字指定的次数。这个次数称为重复计数,或简称为计数。例如,5h 将向左移动 5 个字符。对于许多 vi 命令都可以使用重复计数。

移动到行

以下命令用于移动到文件中的特定行:

G移动到文件中的一个特定行。例如,3G 移动到第 3 行。如果没有参数,G 就移动到文件的最后一行。 H相对于屏幕上的顶行进行移动。例如,3H 移动到从当前屏幕顶行开始的第 3 行。 L这与 H 相似,但是移动相对于屏幕的最后一行。所以,2L 移动到从屏幕最后一行开始的第 2 行。

搜索

可以使用正则表达式搜索文件中的文本:

/使用 / 后面跟着一个正则表达式,在文件中向前搜索。 ?使用 ? 后面跟着一个正则表达式,在文件中向后搜索。 n使用 n 以任意方向重复上一次搜索。

可以在上面的任何搜索命令前面加上一个数字,表示重复计数。所以,3/x 将搜索从当前点开始的第 3 个 x,这相当于 /x 后面跟着 2n。

修改文本

使用以下命令插入、删除或修改文本:

i在当前位置的字符前面进入插入模式。输入文本并按  Esc 返回命令模式。使用 I 在当前行的开头进行插入。 a在当前位置的字符后面进入插入模式。输入文本并按  Esc 返回命令模式。使用 A 在当前行的末尾进行插入。 c使用 c 修改当前字符并进入插入模式以输入替换字符。 o在当前行下面打开一个新行来进行文本插入。使用 O 在当前行上面打开一个新行。 cw删除当前单词的剩余部分并进入插入模式以替换它。使用重复计数替换多个单词。使用 c$ 一直替换到行末。 dw与上面的 cw(和 c$)一样,但是不进入插入模式。 dd删除当前行。使用重复计数删除多行。 x删除光标位置的字符。使用重复计数删除多个字符。 p将最后删除的文本放在当前字符的后面。使用 P 将它放在当前字符的前面。 xpx 和 p 的组合是一种有用的命令。这个命令将光标位置的字符与它右边的字符对换。

应用这些操作

我们打算在 count1.sh 文件中添加一行。为了保留原来的文件并将修改的版本保存为 count2.sh,可以在用 vi 打开文件之后,使用下面这些 vi 命令。注意,<Esc> 表示按 Esc 键。


清单 116. 在 count1.sh 中添加一行的编辑器命令


1G
O
sleep 20<Esc>
:w! count2.sh
:q

会者不难,是吧?


© 著作权归作者所有

共有 人打赏支持
SuShine
粉丝 118
博文 435
码字总数 88625
作品 0
青岛
后端工程师

暂无相关文章

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 23分钟前 ⋅ 0

Spring源码解析(六)——实例创建(上)

前言 经过前期所有的准备工作,Spring已经获取到需要创建实例的 beanName 和对应创建所需要信息 BeanDefinition,接下来就是实例创建的过程,由于该过程涉及到大量源码,所以将分为多个章节进...

MarvelCode ⋅ 43分钟前 ⋅ 0

a href="#"

<a href="#">是链接到本页,因为你有的时候需要有个链接的样式,但是又不希望他跳转,这样写,你可以把这个页面去试试

颖伙虫 ⋅ 50分钟前 ⋅ 0

js模拟栈和队列

栈和队列 栈:LIFO(先进后出)一种数据结构 队列:LILO(先进先出)一种数据结构 使用的js方法 1.push();可以接收任意数量的参数,把它们逐个推进队尾(数组末尾),并返回修改后的数组长度。 2....

LIAOJIN1 ⋅ 50分钟前 ⋅ 0

180619-Yaml文件语法及读写小结

Yaml文件小结 Yaml文件有自己独立的语法,常用作配置文件使用,相比较于xml和json而言,减少很多不必要的标签或者括号,阅读也更加清晰简单;本篇主要介绍下YAML文件的基本语法,以及如何在J...

小灰灰Blog ⋅ 58分钟前 ⋅ 0

IEC60870-5-104规约传送原因

1:周期循环2:背景扫描3:自发4:初始化5:请求6:激活7:激活确认8:停止激活9:停止激活确认10:激活结束11:远程命令引起的返送信息12:当地命令引起的返送信息13:文件传送20:响应总召...

始终初心 ⋅ 今天 ⋅ 0

【图文经典版】冒泡排序

1、可视化排序过程 对{ 6, 5, 3, 1, 8, 7, 2, 4 }进行冒泡排序的可视化动态过程如下 2、代码实现    public void contextLoads() {// 冒泡排序int[] a = { 6, 5, 3, 1, 8, 7, 2, ...

pocher ⋅ 今天 ⋅ 0

ORA-12537 TNS-12560 TNS-00530 ora-609解决

oracle 11g不能连接,卡住,ORA-12537 TNS-12560 TNS-00530 TNS-12502 tns-12505 ora-609 Windows Error: 54: Unknown error 解决方案。 今天折腾了一下午,为了查这个问题。。找了N多方案,...

lanybass ⋅ 今天 ⋅ 0

IDEA反向映射Mybatis

1.首先在pom文件的plugins中添加maven对mybatis-generator插件的支持 ` <!-- mybatis逆向工程 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-ma......

lichengyou20 ⋅ 今天 ⋅ 0

4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

准备磁盘分区 fdisk /dev/sdb n 创建三个新分区,分别1G t 改变分区类型为8e 准备物理卷 pvcreate /dev/sdb1 pvcreate /dev/sdb2 pvcreate /dev/sdb3 pvdisplay/pvs 列出当前的物理卷 pvremo...

Linux_老吴 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部