热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux基础命令介绍四:文本编辑vim

本文介绍vim(版本7.4)的一般用法vim是功能强大的文本编辑器,是vi的增强版。vim[options][file..]使用vim编辑一个文件的最常用命令就是:vimfile其

本文介绍vim(版本7.4)的一般用法

vim是功能强大的文本编辑器,是vi的增强版。

vim [options] [file ..]

使用vim编辑一个文件的最常用命令就是:

vim file

其中file可以是一个新文件,也可以是原有文件。这样的命令执行后将打开编辑器,显示文件file的内容。如图所示:
《linux基础命令介绍四:文本编辑 vim》

如果是一个新文件,底部左边会显示"file" [新文件]的字样,右边显示0,0-1表示当前光标所在行数和字符数。如果打开的是一个老文件,底部左边显示"file" 3L, 66C字样,表示文件名,当前光标所处行号,文件总字节数。文件中没有字符的地方会以字符~开头。
现在还不能进行编辑,vim编辑文件有几种模式,当前所处模式是普通模式,可以移动光标、执行复制粘贴等命令;另外还有两种常用模式:插入模式和底行模式。
开始进入的一般都是普通模式,按如下键将进入插入模式:

a 在光标所在位置下一个字符开始输入
A 在光标所在行尾开始输入
i 在光标所在位置开始输入
I 在光标所在行首开始输入
o 在光标所在行下新增一行,并在新增行行首开始输入
O 在光标所在行上新增一行,并在新增行行首开始输入

进入插入模式后,底部会出现-- 插入 --字样;这时就可以在光标位置进行输入了。从插入模式退回到普通模式按ESC键。

在普通模式按如下键将进入底行模式:

: 执行命令
/ 正向搜索
? 反向搜索

从底行模式退回到普通模式需按两次ESC键

底行模式执行:q(quit)表示退出编辑器,如果对文件内容进行过更改,需要执行:wq(write quit)来保存退出;如果不保存退出则需要执行:q!强制退出;强制保存退出为:wq!

下面列出一些在普通模式下可以执行的命令及它们的作用:

文本修改:
. 重复上一个命令
x 删除光标位置的字符
d 从光标处开始剪切
dd 剪切光标所在位置的整行(保存在临时缓冲区)
ndd n为数字,表示从当前行开始,从上到下剪切n行
p 将缓冲区中的内容放到当前行之下
np n是数字,相当于执行n次p命令
P 将缓冲区中的内容放到当前行之上
y 从光标处开始复制
yy 复制当前行(保存在临时缓冲区)
nyy n为数字,表示从当前行开始,从上到下复制n行
r 替换光标所在位置的一个字符
R 从光标位置开始替换,并进入文本输入模式(ESC退出)
u 撤销上一次操作
ZZ 保存退出
移动光标:
h或左箭头键 光标向左移动一格
l或右箭头键 光标向右移动一格
j或下箭头键 光标向下移动一格
k或上箭头键 光标向上移动一格
0 光标移动到当前行开头
^ 光标移动到当前行非空白字符(如空格、tab键等)的开头
$ 光标移动到当前行结尾
g_ 光标移动到当前行非空白字符的结尾
w 光标移动到下一个单词的开头
e 光标移动到下一个单词的结尾
* 匹配光标所在单词,移动到下一个相同的单词
# 匹配光标所在单词,移动到上一个相同的单词
f{ 光标移动到当前行的下一个字符{处,{可以换成其他字符
F} 光标移动到当前行的上一个字符}处
t, 光标移动到当前行的下一个逗号之前一个字符处
T, 光标移动到当前行的上一个逗号之后一个字符处
% 移动到成对括号的另一半括号处,包括() {} [].需要先将光标移动到括号上。
gg 光标移动到文件第一行行首
G 光标移动到文件最后一行行首
回车键 光标移动到下一行行首

这里只列出一部分,初学者也许会觉得太多,记不住。其实只要记住其中几个,就完全可以使用了;其他的作用大多是使你的操作更简便快捷。

vim中的各种命令,大多可以组合使用:
比如要删除光标当前所在位置一直到行尾,可以执行d$
比如要在当前位置插入50个‘word’,只需执行50iword ESC按完ESC键之后这50个单词就被插入了;
比如要粘贴被复制的内容,但希望粘贴5次,则执行5p;
比如要再次执行上一次命令5次,则执行5.;
熟练使用这些命令将极大提高编写文件的速度。

在插入模式下(普通模式按a、i、o等),输入一个单词的开头,然后按CTRL-P或CTRL-N就会自动补齐。

底行模式共三个开始字符(:/?),其中/?用来匹配模式搜索:
如搜索文件内字符串centos:

/centos

输入这个字符串之后按回车,vim就会将所有匹配的字符串高亮显示,按下n键,光标就会跳到下一个匹配字符串处,按N键,光标就会跳到上一个匹配处。(想想man查询)
使用?/的作用相同,不过是方向相反。

:可以执行许多命令,如前面介绍过的保存退出命令:wq。下面介绍部分底行模式命令:

:set nu 显示行号
:set nonu 隐藏行号
:r file 读取文件file内容并写入当前编辑的文件中,内容从光标当前位置下一行开始插入。
:w file 将当前编辑的内容写入一个新文件file中。
:s /pattern/string/ 将匹配pattern的字符串替换成string
:x 作用和:wq相同,保存并退出。
:! command 暂时离开vim并执行shell命令command。
:help 查看帮助
:.= 显示当前行号
:= 显示总行数
:n 移动光标到第n行行首

这些命令也可以组合
如执行shell命令并将结果写入当前行的下一行:

:r!ls -l

还能组合其他模式下的命令
如替换当前行所有匹配模式的字符串:

:s/pattern/string/g # g表示全局

如替换本文件中所有匹配模式的字符串:

:%s/pattern/string/g # %表示所有行

如替换指定行的匹配字符串:

:n,ms/pattern/string/g

这里n和m都是数字,代表行号。可以用点号.代表当前行
如删除当前行到第五行的内容:

:.,5d

当当前行处于第五行以下时,会有反向删除的提示。

正则表达式

使用/pattern:s/pattern/string时,pattern是一个正则表达式,用来匹配一个字符串的模式。
正则表达式和之前介绍的通配符(基础命令介绍二)有一些相似的地方,但要注意区分两者的不同。
通配符主要是用于对文件名的匹配,正则表达式不仅可以用于匹配文件名,事实上,它可以进行任何字符串的匹配。它要比通配符更通用,大多数编程语言和一些工具中(如vim、grep、awk、sed)都有对正则表达式的直接支持。
下面介绍一部分将要用到的正则表达式的概念和用法:

匹配位置:
^ 表示行开头
$ 表示行结尾
<表示单词开头
> 表示单词结尾
匹配字符:
. 表示匹配任意单个字符(相当于通配符中的?)
[...] 表示匹配括号内任意单个字符
[^...] 表示匹配任意一个非列出字符 #参照通配符描述
\a 匹配英文字符,等同于[a-zA-Z]或[[:alpha:]]。
\A 匹配非英文字符,等同于[^a-zA-Z]。
\d 匹配数字,等同于[0-9]或[[:digit:]]。
\D 匹配非数字,等同于[^0-9]。
\x 匹配十六进制数字,等同于[0-9A-Fa-f]或[[:xdigit:]]。
\X 匹配非十六进制数字,等同于[^0-9A-Fa-f]。
\w 匹配单词,等同于[0-9A-Za-z_]。
\W 匹配非单词,等同于[^0-9A-Za-z_]。
\t 匹配TAB字符。
\s 匹配空白字符,等同于[ \t]或[[:blank:]]。
\S 匹配非空白字符,等同于[^ \t]。
\u 匹配大写字母,等同于[A-Z]或[[:upper:]]。
\U 匹配非大写字母。
\n 匹配换行
\r 匹配回车
(...) 匹配并捕获,用\1 \2 \3 ...来引用被捕获的字符串。
| 表示逻辑或
匹配数量:
* 表示匹配前一个字符零到任意多次,相当于{0,}。
+ 表示匹配前一个字符一到任意多次,相当于{1,}。
? 表示匹配前一个字符零到一次,相当于{0,1}。#注意和通配符?的区别
{n,m} 表示匹配前一个字符n到m次。

在使用正则表达式时,有时需要在特殊字符之前加上转义字符&#8221;\&#8221;来使特殊字符表示它的字面意思而不是它的特殊意义,在特定的工具中使用正则时,也需要这样做来避免特殊字符被工具本身解释。

vim在使用如下正则表达式时需要将特殊字符转义:\<&#8230;\>、\{n,m}、\(&#8230;\)、\?、\+、\|
下面结合正则举例说明vim中模式匹配及部分命令用法

匹配字符串world并使光标停留在匹配行后第三行行首:

/world/+3

将第三行到第八行行首添加注释符号//

:3,8s/^/\/\//

注意这里的行首符^和转义符&#8217;\&#8217;的用法

如:

:%g/^\sxyz/normal dd

此命令作用是全局匹配以空白后接xyz开头的行,并执行普通模式下的命令dd

如匹配6个以上的小写字母:

/\a\{6,}

如交换冒号:两侧的字符串:

:s/\(.*\):\(.*\)/\2:\1/ #注意这里是如何引用之前匹配的分组的

如将所有tag、tog和tug分别改为hat、hot和hut

:%s/t\([aou]\)g/h\1t/g

如匹配hello或world两个单词:

/\\|\

这里只列出部分vim用到的正则表达式,关于正则的更多内容,以后的文章中还会有描述和举例。

vim编辑器是很强大的,这里只描述了部分初级使用方法。vim还能使用视图模式,编辑多文本,设置键盘映射,多剪贴板,录制宏,使用插件等等。完全可以用vim作为IDE来使用。但相对来说,vim的学习曲线比较陡峭,不同的应用场景,需要记忆的命令和方法数量也是完全不同的。建议在学习中,每次只熟悉几个命令,一段时间后,就能流畅快捷的编辑文本了。


推荐阅读
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 分享2款网站程序源码/主题等后门检测工具
    本文介绍了2款用于检测网站程序源码和主题中是否存在后门的工具,分别是WebShellkiller和D盾_Web查杀。WebShellkiller是一款支持webshell和暗链扫描的工具,采用多重检测引擎和智能检测模型,能够更精准地检测出已知和未知的后门文件。D盾_Web查杀则使用自行研发的代码分析引擎,能够分析更为隐藏的WebShell后门行为。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
author-avatar
每天吃的饱饱的
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有