Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >vim 从嫌弃到依赖(8)——使用命令模式编辑文本

vim 从嫌弃到依赖(8)——使用命令模式编辑文本

作者头像
Masimaro
发布于 2022-05-10 02:54:02
发布于 2022-05-10 02:54:02
58700
代码可运行
举报
运行总次数:0
代码可运行

通过前面的文章,我们已经介绍了vim的普通模式、插入模式、可视模式。接下来让我们接着介绍vim中另一个强大的模式——命令行模式

命令模式简介

命令模式可以说在vim中的使用频率不亚于普通模式,像我们平时使用 :w 将缓冲区的内容写入文件,使用 :q 退出vim,这些都是在命令行模式下执行命令。

vim最早是由 ed 编辑器发展而来,中间经历过了 ed --> ex --> vi --> vim 的流程,vim继承了vi的模式区分以及ex的一些处理文本的命令,这也就是为什么有时候会将vim命令行模式中执行的命令叫做ex命令

在普通模式下,按下: 会切换到命令行模式,这个时候vim会等待我们输入一个命令,最后以回车(<CR>) 结束输入并执行

在vim 中有许多自带的的命令,而且我们安装第三方插件的时候,插件也会提供一些使用的命令,这里我们主要还是战士如何在命令模式中操作文本。其他相关的命令在后面结合其他功能给出

在命令行中的操作与在插入模式中类似,只是插入模式会将键盘输入写入缓冲区,而命令行模式则会将输入显示在命令行位置。二者的操作符也类似,例如可以适用 <Ctrl-w><Ctrl-u>来删除至上个单词的开头和行首。也可是使用 <Ctrl-v><Ctrl-k> 来输入键盘上找不到的字符。也可是使用方向键来移动光标,或者使用退格键删除命令。如果中途不想执行输入的命令,可以使用<Esc> 退回到普通模式。

在普通模式下,我们需要使用 operator +motion 来操作指定范围的文本,这通常伴随着光标的移动。在命令行模式下,可以操作任意范围内的文本,这表示在某些情况下,使用命令相对于在普通模式下有着更高的效率

我们可以在一个或者多个连续行上执行命令,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print("hello world1")
print("hello world2")
print("hello world3")
print("hello world4")
print("hello world5")
print("hello world6")

假设光标在第一行的行首位置,我们输入 :print ,它会打印当前行。

我们看到执行print 之后会打印光标所在行

配合范围使用命令

与普通模式下 operator 配合一个 motion 来指定操作的文本范围类似,ex命令也可以带有一个范围值来指定操作的范围。这里我们给出一个使用范围的格式格式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
command = {startpoint},{endpoint} + cmd

其中 startpoint 表示开始位置,endpoint表示结束位置,他们中间用,隔开,后面紧跟着一个命令。

如果不加范围,则表示操作的范围是光标所在行,例如 :print 表示打印光标所在行的文本

如果只输入一个数字,vim会首先将光标移动到对应的行上,然后针对该行文本执行操作,例如如果输入 :2print 它会将光标移动到第二行,然后对第二行文本执行打印操作。

使用数字代表对应行

下面再看一个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print("hello world1")
print("hello world2")
print("hello world3")
print("hello world4")
print("hello world5")
print("hello world6")
print("hello world7")

我们要删除第三到第5行范围内的文本,就可以输入 :3,5d, 其中d 代表 delete 是删除的命令

通过上述例子发现,在使用命令模式的时候,不需要在意光标所在位置,如果我们采用普通模式的解法,就需要先使用 3gg 跳转到第三行,然后使用3dd 删除三行。或者在第三行使用V 进入可视模式,然后选中3行,接着使用d 删除选中。对比这么几种方式来看,使用命令模式更加的灵活

使用特殊符号代表对应行

除了使用数字来代表对应行号所在行外,还是使用一些特殊符号来表达一些特殊含义,例如我们可以使用 . 来代表当前光标所在行,所以针对上述操作,我们还有一个解法:使用3gg 跳转到第三行,然后使用 :.,5d 删除当前行到第5行的内容

除了使用. 来作为相对行号以外,命令模式中还有其他常用符号,这里列举一些供大家参考:

  • .: 当前行
  • $: 文件末尾
  • 0: 虚拟行,位于文件第一行的上方
  • 1: 文件第一行
  • 'm: 包含标记m的行
  • <: 高亮选区的起始行
  • >: 高亮选区的结尾行
  • %: 整个文件,相当于 :1,$

介绍了这些操作符之后,如果我们需要删除整个文件,那么有这么几种方法

  • 方法1:普通模式下,使用 0 跳转到第一行, 然后使用dG 第一行到最后一行的内容
  • 方法2: 命令模式下,使用 :1,$d 删除第一行到最后一行的内容
  • 方法3: 命令模式下,使用 :%d 删除所有

使用位置偏移量来微调操作范围

{startpoint}, {endpoint} 中二者均为绝对地址,除了使用绝对地址,我们也可以使用绝对地址+偏移地址的方式来定义操作范围。

可以在绝对地址上使用 + 或者 - 来定义如何进行偏移,例如 $-3 会定位到导数第4行。

假设我有超过1000行的文本,我想保留前3行和后3行,使用命令的时候可以使用:4,$-3d

将可视模式的选区作为操作范围

手动指定范围的时候,有时候需要我们去手工数开始行号和结尾行号,数数也算是一个比较累的体力活。除了使用之前的方式外,还可以使用可视模式。将可视模式的选区作为操作区。

我们还是来看上面的删除第一行到第5行的例子,配合可视模式就可以这么做:先使用V 进入可视模式,然后使用 2j 选中两行,然后输入:d 进行删除

我们发现在选中一个选区后,按下: ,在左下角会出现 <,> 的字样,根据前面的列表知道 他们代表的是被选中的高亮选区。

其他操作文本的命令

在上面的例子中,我们主要使用了 d 这个命令来删除文本,除了它还有其他一些处理文本的命令,每个类型的命令接收的参数都各有千秋,但是也很好理解,这里我以 t (拷贝粘贴) 和 m (移动)为例,希望可以做到抛砖引玉的作用,帮助大家理解其他一些常用的命令。

使用t 命令

t 命令代表拷贝和粘贴,可以理解为 CopyTo。它需要两个参数,一个范围代表拷贝哪个范围的文本,一个位置,代表要将拷贝的内容放置在哪个位置。它的形式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
:range + t + address

第一个range 代表的是范围,要将哪个范围内的文本进行粘贴,第二个address 代表的是一个行号,要将粘贴的内容放置到哪个位置

这里我们给出一个示例来说明如何使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
今日完成工作情况
	1. fixbug 1
	2. fixbug2
	3. fixbug3
	4. fixbug4
明日计划
	5. fixbug5
	6. fixbug6
	7. fixbug7

假设有这么一个日报,但是我今日工作完成之后发现离下班还有点时间,为了获得内卷达人的称号,我决定先看看明天的 bug5但是又不想为此加班太多,只是简单的看看,然后在工作日报上进行汇报,也就是说我要将fixbug5 复制一份放到今天的任务中。我们可以使用 :7t5 来将第7行的内容复制到第5行下方

当然也可以先使用 7gg 跳转到第7行,然后使用 yy 复制该行,接着使用 5gg 跳转到第5行,最后使用p 进行粘贴。对比这种方式使用命令更加简洁,它省略了几次光标跳转的过程。由此看来,在需要大范围操作或者跳转的时候,使用命令会更加简洁也会更加高效

还是以这个日报为例,随着我不要命的卷,终于在今天把bug5给修复了,虽然拉着其他同事陪我加了“一会班”,但是我超额完成了任务,老板承诺的绩效和年终奖马上要到手了,想想就觉得心里美滋滋,我要把明天修复的bug5提前到今天。想到这里我使用 :7m5 完成这一操作之后,打卡下班,未来可期

如果再卷点,我能把明天要修复的bug全都在今天修完了,所以我这个时候想在工作日报中把明日计划工作全部移动到今天来,假设当前光标处于 bug5的位置,我可以执行:.+2,$m.。至此我带着出任总经理,担任CEO,迎娶白富美,走向人生巅峰的美梦沉沉睡去。

总结

到此为止,这篇文章的内容就完了,最后给大家总结一下主要内容

  1. 命令模式是vim中又一重要的模式,使用率不亚于普通模式
  2. 命令可以配合数字或者其他符号使用,代表将要操作的文本范围
  3. 主要以 tm 命令介绍了操作文本命令的用法

最后再给出一些命令和范围的总结供大家查阅

文本操作命令

命令

简写

用途

:[range]delete [x]

d

删除指定范围内的行[到寄存器 x 中]

:[range]yank [x]

y

复制指定范围的行[到寄存器 x 中]

:[line]put [x]

pu

在指定行后粘贴寄存器 x 中的内容

:[range]copy {address}

t

把指定范围内的行拷贝到 {address} 所指定的行之下

:[range]move {address}

m

把指定范围内的行移动到 {address} 所指定的行之下

:[range]join

j

连接指定范围内的行

:[range]normal {commands}

narm

对指定范围内的每一行执行普通模式命令 {commands}

:[range]substitute/{pattern}/ {string}/[flags]

s

把指定范围内出现{pattern}的地方替换为{string}

:[range]global/{pattern}/[cmd]

g

对指定范围内匹配{pattern}的所有行,在其上执行Ex 命令{cmd}

  • 有些命令暂时还不知道怎么用,不着急,后面说到对应部分,自然会提到的

范围符号

符号

用途

.

当前行

$

文件末尾

0

虚拟行,位于文件第一行的上方

1

文件第一行

'm

包含标记m的行

<

高亮选区的起始行

>

高亮选区的结尾行

%

整个文件,相当于 :1,$

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
VIM常用命令
1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;
浩Coding
2022/01/18
14.4K0
vim 从嫌弃到依赖(9)——命令模式进阶
上一篇文章更新还是在51前,最近发生了很多事情了,全国各地的疫情又有蔓延的趋势,北京朝阳区都已经开始实施居家办公。各位小伙伴请注意安全,安全平安的度过这个疫情。
Masimaro
2022/05/10
3650
vim 从嫌弃到依赖(9)——命令模式进阶
Linux文本编辑器——vim编译器的全面讲解
文本编辑软件在任何操作系统上都是必备的软件。我们在 Linux 上不缺乏非常现代化的编 辑软件,但是它们都是基于 GUI(图形界面)的编辑软件。 正如你所了解的,Linux 真正的魅力在于命令行。当你正在用命令行工作时,你就需要一个可以在控制台窗口运行的文本编辑器。
神的孩子都在歌唱
2025/03/05
2240
Linux文本编辑器——vim编译器的全面讲解
程序员必备vim编辑器命令,你想要的我都整理好了(建议收藏)
上个月组内来了一个新的小伙伴,赶巧那个时候我休假了!当我休完假来的时候,这个新小伙伴成了我同桌,然后就是一起做项目咯。就在昨天我们在配置环境,修改各种配置文件的时候;小伙伴看到我各种vim的快捷指令使用,有点惊讶了:“卧槽,你怎么做到记得这么清楚的?这谁能记得住?教教我呗?”。
我是阿沐
2021/07/08
1K0
Linux学习笔记(一)使用文本编辑器Vim
从今天开始,小雨和大家一起学习Linux基础,Vim是Linux中功能十分强大的文本编辑器,熟练地使用Vim可以让你高效地在Shell界面编写代码,接下来我们开始一步一步地学习Vim的使用方法:
小雨coding
2020/06/09
2.3K0
Linux学习笔记(一)使用文本编辑器Vim
linux文本编辑器-VIM基本使用方法
+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首 vim + file 直接打开file,光标在最后一行
yuezhimi
2020/09/30
9950
Vim学习笔记上篇
在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。 Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令dd删除当前行,但是第一个”d”的后面可以跟另外的移动命令来代替第二个d,比如用移动到下一行的”j”键就可以删除当前行和下一行。另外还可以指定命令重复次数,2dd(重复dd两次),和dj的效果是一样的。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效地进行文本编辑。 在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
InitCool
2020/04/29
6310
Vim编辑器
这次浅聊一下 Vim编辑器,它是由 vi 发展演变过来的文本编辑器,是 Linux众多发行版的默认文本编辑器。内容如下。
reload
2024/01/28
9370
Vim编辑器
技术|必知必会的 Vim 编辑器基础命令
如果你是一名系统管理员或者开发者,当你在终端工作时有时会需要编辑一个文件。在Linux系统中有几种文件编辑器,你可以根据需求选择合适的文件编辑器。在这里,我想推荐Vim编辑器。
用户8710643
2021/07/12
1.3K0
vim 从嫌弃到依赖(3)——vim 普通模式
在上一篇中,我们提到vim的几种模式,并且给出了一些基本的操作命令,包括移动光标,删除、替换操作。并且给出了几个重要的公式,理解这个公式对于理解vim和提高使用vim的效率来说至关重要。所以在这篇文章里面我打算再围绕这几个公式给出一些示例,希望能给各位理解公式提供一些帮助。
Masimaro
2022/05/10
7110
vim 从嫌弃到依赖(3)——vim 普通模式
Linux——常用命令(2)
echo 将用户输入的内容,显示在屏幕上。通常结合着“>”重定向符号,用来在文本文件中,添加数据,“>>” 表示追加。
网络豆
2023/10/17
2680
Vim 基础和常用命令整理
大家好,我是多选参数的程序锅,一个正在”捣鼓“操作系统、学数据结构和算法以及 Java 的废物菜鸡。
syy
2020/09/10
8220
Vim 基础和常用命令整理
vi与vim的区别以及常用命令
vi编辑器只能运行于unix中,而vim不仅可以运行于unix,还可用于windows、mac等多操作平台。
挨踢小子部落阁
2020/03/25
2.6K0
Linux命令(34)——vim命令
vim是Unix和类Unix操作系统中最通用的全屏幕纯文本编辑器,它是vi的增强版(vi iMproved),与vi编辑器完全兼容,而且实现了很多增强功能。
恋喵大鲤鱼
2019/02/22
4.1K0
Linux命令(34)——vim命令
vim 文本编辑器[通俗易懂]
1) 模式转换 a) 【i】:在当前光标所在字符的前面,转为输入模式 b) 【a】:在当前光标所在字符的后面,转换为输入模式 c) 【o】:在当前光标所在行的下方,新建一行,并转换为输入模式: d) 【I】:在当前光标所在行的行首,转换为输入模式 e) 【A】:在当前光标所在行的行尾,转换为输入模式 f) 【O】:在当前光标所在行的上方,新建一行,并转换为输入模式; g) 【cc】删除当前行并输入新内容,相当于S。扩展【#cc】 h) 【C】删除当前光标到行尾,并切换成插入模式
全栈程序员站长
2022/09/06
4.3K0
vim 文本编辑器[通俗易懂]
最强编辑神器VIM全讲解
今天为大家讲解 Linux 下一款功能十分强大的编辑器 vim 。vim 十分好用,但是好用的前提是 熟练度 + 配置 两者都有的情况下才能得心应手。而新手对于 vim 是很难操作的,所以今天我们会讲解 vim 的基本使用,并且讲解 vim 相关的配置。帮助大家快速上手 vim 编辑器。
IT运维技术圈
2023/02/02
2.1K0
【Vim 核心攻略】 —— 文本编辑高手的进阶秘籍
Vim 是一种强大且高度可定制的文本编辑器,广泛用于软件开发、系统管理和各种文本处理任务。它基于更早期的编辑器 Vi,并对其进行了扩展,因此也被称为 “Vi Improved”(Vi 的增强版)。Vim 的特点是快捷键驱动、支持多模式编辑以及可扩展性强。
换一颗红豆
2024/12/23
2310
【Vim 核心攻略】 —— 文本编辑高手的进阶秘籍
Vim高手修炼手册:Linux下最全常用命令集锦,Linux环境下vim不可不知的常用命令大全
小白的大数据之旅
2024/11/20
1960
Vim高手修炼手册:Linux下最全常用命令集锦,Linux环境下vim不可不知的常用命令大全
vim三种模式下的小技巧,提高一半工作效率
命令模式是Vim的默认操作模式,当使用vim命令打开一个文件时,默认进入的就是命令模式。不管用户处于何种模式,只要按下Esc键就可使进入命令行模式
Java识堂
2019/05/21
9020
Linux命令之vim三种模式
①光标移动到行首 按键:shift + 6 或 ^(T字母上面的6,不要按小键盘的6)
兮动人
2021/06/11
3.6K0
Linux命令之vim三种模式
相关推荐
VIM常用命令
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验