徐州靠谱网站开发/网站数据统计工具
介绍
文本块用户(textobj-user)
是一个可帮助你毫不费力
地创建自己的文本对象
的Vim
插件.
因为有许多陷阱
需要处理,很难创建文本对象
.此插件
隐藏了此类细节
,并提供了声明式定义文本对象
的方法.
你可用正则式
来定义简单的文本对象
,或使用函数
来定义复杂的文本对象
.如…
文本对象用户
简单示例
(a
)定义"ad"/"id"
以选择如"2013-03-16"
的日期
,及定义"at"/"it"
以选择如"22:04:21"
的时间:
call textobj#user#plugin("datetime", {
\ "date": {
\ "pattern": "\<\d\d\d\d-\d\d-\d\d\>",
\ "select": ["ad", "id"],
\ },
\ "time": {
\ "pattern": "\<\d\d:\d\d:\d\d\>",
\ "select": ["at", "it"],
\ },
\ })
文本对象用户
示例之间
(b
)定义"aA"
以选择从"<<"
到匹配
的">>"
的文本
,及定义"iA"
以选择"<<"和">>"
中的文本
:
call textobj#user#plugin("braces", {
\ "angle": {
\ "pattern": ["<<", ">>"],
\ "select-a": "aA",
\ "select-i": "iA",
\ },
\ })
文本对象用户
示例之间
(c
)定义"al"
以选择当前行
,并且定义"il"
以选择不带缩进的当前行
:
call textobj#user#plugin("line", {
\ "-": {
\ "select-a-function": "CurrentLineA",
\ "select-a": "al",
\ "select-i-function": "CurrentLineI",
\ "select-i": "il",
\ },
\ })function! CurrentLineA()normal! 0let head_pos = getpos(".")normal! $let tail_pos = getpos(".")return ["v", head_pos, tail_pos]
endfunction
function! CurrentLineI()normal! ^let head_pos = getpos(".")normal! g_let tail_pos = getpos(".")let non_blank_char_exists_p = getline(".")[head_pos[2] - 1] !~# "\s"return\ non_blank_char_exists_p\ ? ["v", head_pos, tail_pos]\ : 0
endfunction
文本对象用户
示例文件类型
(d
)定义"a("
来选择从"\left("
到匹配的"\right)"
中的文本
,定义"i("
选择从"\left("
到匹配
的"\right)"
中的文本
,但仅针对tex
文件:
call textobj#user#plugin("tex", {
\ "parenmath": {
\ "pattern": ["\\left(", "\\right)"],
\ "select-a": [],
\ "select-i": [],
\ },
\ })
augroup tex_textobjsautocmd!autocmd FileType tex call textobj#user#map("tex", {\ "parenmath": {\ "select-a": "<buffer> a(",\ "select-i": "<buffer> i(",\ },\ })
augroup END
可如上例所示
,定义自己的文本对象
.
更多
一点哲学
为什么要定义它们?你必须相信它们是有用的
,它们可提高你的生产力
.
此类文本对象
对其他用户
也很有用.但为何不按插件共享
呢?
是,这就是textobjuser
只提供一个textobj#user#plugin()
函数的原因.它不仅为自定义文本对象(如aX/iX
),定义了键映射
,还按插件
定义了要共享
期望的一切
.
如,对自定义文本对象
,用户
可能更喜欢aY/iY
而不是aX/iX
.因此,有必要
为此自定义
提供一个方法
,但手动定义
它们有点乏味.
文本对象用户
参考
textobj#user#plugin()
textobj#user#plugin({插件名}, {规范})
根据{规范}
自定义文本对象
,而定义也轻松按名叫{插件名}
的插件共享了自定义文本对象
.{插件名}
是一个由英文字母
组成的串.
此名用作各种键映射
,Ex
命令和变量
.
{规范}
是自定义文本对象
定义的字典
.如:
call textobj#user#plugin("datetime", {
\ "date": {
\ "pattern": "\<\d\d\d\d-\d\d-\d\d\>",
\ "select": ["ad", "id"],
\ },
\ "time": {
\ "pattern": "\<\d\d:\d\d:\d\d\>",
\ "select": ["at", "it"],
\ },
\ })
许多东西都是用上面的定义
定义的:
Textobj{Plugin}DefaultKeyMappings
(a
)定义了一个Ex
命令:TextobjDatetimeDefaultKeyMappings
.
Ex
命令对自定义文本对象
定义了默认键映射
.
但是它除非给出"!"
,它不会覆盖现有键映射
.
在此例
中,Ex
命令给自定义文本对象
,按符号待定
模式和可视
模式下映射"ad","id","at"
和"it"
.
如果{左边}
以(如<C-d>
)不可打印的符
开头,则也会在选择模式
下映射{左边}
.
(textobj-{plugin}-{object}-{operation})
(b
)在符号待定
(符号挂起)模式,可视
(可视)模式和选择
(选择)模式下,定义如<Plug>(textobj-datetime-date)
接口键映射.
这些是为用户额外自定义
而定义的.如,人们可能更喜欢"aT"
和"iT"
来选择时间
,因为默认,at
和it
已用作非常有用
的选择标签块
的文本对象
,一般覆盖它们不好.
此时,接口键
映射的用法如下:
xmap aT <Plug>(textobj-datetime-time)
omap aT <Plug>(textobj-datetime-time)
xmap iT <Plug>(textobj-datetime-time)
omap iT <Plug>(textobj-datetime-time)
g:textobj_{plugin}_no_default_key_mappings
(c
)最后,默认执行:TextobjDatetimeDefaultKeyMappings
来定义默认键映射
:"ad","id","at"
和"it"
.如(b
)中所述,有时用户不希望
使用如"at"
和"it"
的默认键映射
.
如果按真
设置g:textobj_datetime_no_default_key_mappings
,则不会定义默认键映射
.为了后向兼容
,如果{规范}
包含键"*no-default-key-mappings*"
,则也不会定义默认键映射
.
但此功能在未来的版本中会删除
.
textobjuser
规范
textobj#user#plugin()
为自定义文本对象
取{规范}
.{规范}
是一个字典
,按一系列键
是文本对象名
,值
是文本对象
的规范的键值对
对待它.
由各种属性
组成文本对象
的规范
.按单个字典
表示属性
.每个键
都是一个属性名
.
以下属性可用
:
"move-n" {左边} 或 [{左边}, ...]"
该值
必须为串或串列表
.按默认键映射
的{左边}
对待每个串
,以移动光标
到下个文本对象
.
目标文本对象
由带单个正则式
的"模式"
属性或"move-n函数"
属性确定
.
"move-p" {左边}或[{左边}, ...]
"move-N" {左边}或[{左边}, ...]
"move-P" {左边}或[{左边}, ...]
与"move-n"
类似,但{左边}
用作移动光标
到上个文本对象
,下个文本对象
的结尾
,或上个文本对象
的结尾
的默认键映射
.
"select" {左边}或[{左边}, ...]"
与"move-n"
类似,但{左边}
用作选择光标
下的文本对象
的默认键映射
.由有单个正则式
的"模式"
属性或"选择函数"
属性确定目标文本对象
.
"select-a" {左边}或[{左边}, ...]
"select-i" {左边}或[{左边}, ...]
与"选择"
类似,但为了选择"a"
文本对象或"内部"
文本对象,按默认键映射
使用{左边}
,如ab,ip
和其他内置文本对象
.
由带一对正则式
的"模式"
属性,"select-a-函数"
属性或"select-i-函数"
属性确定目标文本对象
.
“模式” {regexp}或[{regexp},{regexp}]
确定目标文本对象
的单个正则式
或两个正则式
的列表
.
使用单个正则式
:
按目标文本对象
对待正则式匹配的区域
.
使用一对正则式
:
按目标文本对象
对待两个部分间的区域
,其中第1部分
与第1个正则式
匹配,第2部分
与第2个正则式
匹配.
文本对象
用户区域类型
"regiontype"
{符}(默认值:"v"
)
一个"模式"
属性定义的用来指定
区域类型的串.可能值
如下:
值 意思
-------------------------------
"v" 按符
"V" 按行
"\<C-v>" 按块
文本对象
用户扫描
"扫描"
{串}(默认值:"前向"
)
一个用来指定如何为"选择"
查找基于"模式"
的文本对象
的串.可能的值
为:
"光标"
:试从光标
下的文本
中查找
.
"前向"
:试从文本
中查找:
(1
)光标下
(2
)光标后
"行"
:试从文本
中查找:
(1
)光标下方
(2
)在当前行中和光标后
(3
)在当前行中和光标前
"最近"
:试从文本
中查找:
(1
)光标下方
(2
)在当前行中和光标后
(3
)在当前行中和光标前
(4
)当前行后
(5
)当前行前
"{property}-函数" {fname}
如果定义了此属性
,则使用
名为{fname}
的函数
,而不是"模式"
属性,来确定"{属性}"
操作的目标文本对象
.
函数,必须无参
,且必须返回
一个表示目标文本对象
占据区域
的列表
,或必须返回0
以表示没有文本对象
.
表示区域
的列表
格式如下:
[region_type,start_position,end_position]
.
"region_type"
是用来指定区域类型的单符串
.
"start_position"
表示区域
的开始位置
.
此值
的细节与getpos()
相同.
"end_position"
类似"start_position"
,但它表示一个区域的结束位置
.
“sfile” {串}
值
必须是expand("<sfile>")
.此值
用来计算针对"{属性}函数"
的脚本本地函数
的<SNR>
前缀.
过时属性
仍可用,但会从未来的版本中删除
.强烈建议改用新属性
.
旧属性名 | 新属性名 |
---|---|
"*模式*" | "模式" |
"*{property}-function*" | "{property}-函数" |
"*sfile*" | "sfile" |
"*no-default-key-mappings*" | 不可用 |
注意,"*no-default-key-mappings*"
仍可用,但不再支持.
请改用g:textobj_{plugin}_no_default_key_mappings
.
textobj#user#map()
textobj#user#map({插件名}, {规范})
定义键映射
以使用自定义文本对象
.大多数文本对象插件
都提供默认键映射
以使用自定义文本对象
.但有时想改用其他键映射
.
可在没有textobj#user#map()
时如下定义此键映射
,如:
xmap aT <Plug>(textobj-datetime-time)
omap aT <Plug>(textobj-datetime-time)
xmap iT <Plug>(textobj-datetime-time)
omap iT <Plug>(textobj-datetime-time)
但这很无聊.你可用textobj#user#map()
按声明性
的方式定义这些键映射
.如:
call textobj#user#map("datetime", {
\ "time": {
\ "select": ["aT", "iT"],
\ }
\ })
{插件名}
是文本对象插件名
.
{规范}
是一个包含自定义文本对象的定义
的字典
.与textobj#user#plugin()
不同,只允许使用以下属性
:
move-n move-p move-N move-P
select select-a select-i
为了方便自定义
,在调用textobj#user#map()
时,可能未定义
,{插件名}
指定的文本对象插件
.因为:
1,主要在vimrc
中用textobj#user#map()
.文本对象插件
一般在plugin/*.vim
中.而vimrc
在所有plugin/*.vim
前加载.
2,有时在文件类型插件
中使用textobj#user#map()
.特定文件类型
的文本对象插件
在ftplugin/*.vim
中.一般,不可预测这些文件类型
插件的加载顺序
.
因此,textobj#user#map()
无法检测{插件名}
是否正确.这样实际是,当使用了textobj#user#map()
定义的键映射
,且此时没有相应的文本对象
,则报错
.
textobj#user#move()
textobj#user#move({模式}, {flags}, {上个模式})
移动光标
到{模式}
定义的相应对象
.
{标志}
是一个可包含以下符标志
的串:
符 | 含义 |
---|---|
"b" | 后向搜索 而不是向前搜索 . |
"e" | 移动 到匹配尾 . |
{上个模式}
,是一个表示"上个"
模式的串,即哪种映射模式
导致调用此函数
.如,如果此函数
是通过符号待定
模式的映射
调用的,则{上个模式}
必须为"o"
.
符 | 含义 |
---|---|
"n" | 普通 模式 |
"o" | 符号待定 模式 |
"v" | 可视 模式 |
返回值
与searchpos()
相同.
textobj#user#select()
textobj#user#select({模式}, {flags}, {prevous-mode})
选择由{模式}
定义的适当对象
.扫描以下位置
以查找合适的对象
:
(1
)光标下方
(2
)在当前行里和光标后
(3
)在当前行里和光标前
(4
)当前行后
(5
)当前行前
{标志}
是一个可包含以下符标志
的串:
符 | 含义 |
---|---|
"b" | 从(1),(3),(5) 中查找对象 . |
"c" | 从(1) 中查找对象 . |
"f" | 从(1),(2),(4) 中查找对象 .(默认) |
"l" | 从(1),(2),(3) 中查找对象 . |
"n" | 从(1),(2),(3),(4),(5) 中查找对象 . |
"v" | 按符选择对象 .(默认) |
"V" | 选择对象 . |
"\<C-v>" | 按块选择一个对象 . |
"N" | 查找范围 但不选择 . |
{上个模式}
的细节,见textobj#user#move()
.此函数
返回对象
的开始位置和结束位置列表
.每个位置
都是[{lnum},{col}]
.如果没有合适的对象
,则返回0
.
textobj#user#select_pair()
textobj#user#select_pair({1模式}, {2模式}, {flags}, {上个模式})
选择以{1模式}
开头,并以{2模式}
结尾的相应对象
.{标志}
是一个可包含以下符标志
的串:
符 | 含义 |
---|---|
"a" | 选择包括{1模式} 和{2模式} 的范围,如at . |
"i" | 选择不包括{1模式} 和{2模式} 的范围,与it 一样.除非显式 指定"a" ,否则这是默认 .如果光标 不在{1模式} 和{2模式} 间的文本中,则此函数闲着. |
"v" | 按符选择对象 .(默认) |
"V" | 选择对象 . |
"\<C-v>" | 按块选择一个对象 . |
有关{上个模式}
的细节,见textobj#user#move()
.
未定义返回值
.
问题
因为计数
的含义根据每个自定义文本对象
而变,vim-textobj-user
不支持计数
.如果要支持自定义文本对象
的计数
,请使用"{属性}-函数"
定义它,并使用v:count
和/或v:count1
取实际计数
.
对内置文本对象
(如aw,ip
等),通过重复文本对象
(如"vawawaw..."
)来扩展视觉选择的区域
.vimtextobjuser
不支持该扩展
.
因为支持所有自定义文本对象
很难.虽然某些文本对象
(如aw
)只是扩展当前选择
,但其他文本对象
(如ab
)可能会根据环境覆盖当前选择
.
相关文章:

2502vim,vim文本对象中文文档
介绍 文本块用户(textobj-user)是一个可帮助你毫不费力地创建自己的文本对象的Vim插件. 因为有许多陷阱需要处理,很难创建文本对象.此插件隐藏了此类细节,并提供了声明式定义文本对象的方法. 你可用正则式来定义简单的文本对象,或使用函数来定义复杂的文本对象.如… 文本对…...

spring security与gateway结合进行网关鉴权和授权
在Spring Cloud Gateway中集成Spring Security 6以实现鉴权和认证工作,可以在网关代理层完成权限校验和认证。这种架构通常被称为“边缘安全”或“API网关安全”,它允许你在请求到达后端服务之前进行集中式的安全控制。 以下是如何配置Spring Cloud Gat…...

LabVIEW在电机自动化生产线中的实时数据采集与生产过程监控
在电机自动化生产线中,实时数据采集与生产过程监控是确保生产效率和产品质量的重要环节。LabVIEW作为一种强大的图形化编程平台,可以有效实现数据采集、实时监控和自动化控制。详细探讨如何利用LabVIEW实现这一目标,包括硬件选择、软件架构设…...

log4j2日志配置文件
log4j2配置文件每个项目都会用到,记录一个比较好用的配置文件,方便以后使用时调取,日志输出级别为debug,也可以修改 <?xml version"1.0" encoding"UTF-8"?> <Configuration monitorInterval"180" packages""><prope…...

用Deepseek做EXCLE文件对比
背景是我想对比两个PO系统里的一个消息映射,EDI接口的mapping有多复杂懂的都懂,它还不支持跨系统版本对比,所以我费半天劲装NWDS,导出MM到excle,然后问题来了,我需要对比两个excel文件里的内容,…...

Tailwind CSS v4.0 升级与 Astro 5.2 项目迁移记录
本文博客链接 https://ysx.cosine.ren/tailwind-update-v4-migrate 自用小记。 Tailwind CSS v4.0 - Tailwind CSS 新的高性能引擎 - 完整构建的速度速度快 5 倍,增量构建的速度快于 100 倍以上 —— 以微秒为单位进行测量。为现代 Web 设计 - 建立在前沿的 CSS 特…...

TongSearch3.0.4.0安装和使用指引(by lqw)
文章目录 安装准备手册说明支持的数据类型安装控制台安装单节点(如需集群请跳过这一节)解压和启动开启X-Pack Security和生成p12证书(之后配置内置密码和ssl要用到)配置内置用户密码配置ssl(先配置内置用户密码再配ssl)配置控制台…...

低代码产品表单渲染架构
在React和Vue没有流行起来的时候,低代码产品的表单渲染设计通常会使用操作Dom的方式实现。 下面是一个表单的例子: 产品层 用户通过打开表单,使用不同业务场景业务下的表单页面,中间的Render层就是技术实现。 每一个不同业务的表单…...

windows 剪切板的写入、读取,包括图片,文本内容
介绍 在windows开发过程中,我们可能会需要对系统剪切板进行操作,其中包括读取剪切板数据和将数据写入到剪切板中 设置剪切板内容 /*** brief 设置剪切板内容* param[in] pszData 指向缓冲区的指针* param[in] nDataLen 缓冲区长度* return 成功返回TRU…...

Matplotlib 高级图表绘制与交互式可视化(mpld3)
我们先重新回忆一下它的主要作用: 一、Matplotlib 简介 Matplotlib 是 Python 中一个非常强大的可视化库,广泛用于数据可视化、科学计算和工程领域。它提供了丰富的绘图功能,可以生成各种静态、动态和交互式的图表。以下是 Matplotlib 的主要功能及其详细讲解。 二、基本…...

(9)gdb 笔记(2):查看断点 info b,删除断点 delete 3,回溯 bt,
(11) 查看断点 info b: # info b举例: (12)删除断点 delete 2 或者删除所有断点: # 1. 删除指定的断点 delete 3 # 2. 删除所有断点 delete 回车,之后输入 y 确认删除所有断点 举…...

专业学习|通过案例了解蒙特卡罗模拟实操步骤与含义
一、蒙特卡罗模拟介绍 蒙特卡罗模拟(Monte Carlo Simulation)是一种基于随机采样的数值计算方法,用于解决具有不确定性或复杂概率分布的问题。其核心思想是通过多次随机抽样来逼近系统的行为或目标函数的真实值,进而对系统进行评估…...

云端智慧:创业公司如何以全球视野选择最佳平台,实现业务新高度
2016年8月,一个名叫Bryce Adams的人辞去了自己原本很稳定的工作,开始追逐梦想:为使用WooCommerce(一种开源的WordPress数字商务插件)的公司开发一种能提供各类报表解决方案的应用。为此他成立了Metorik公司ÿ…...

【工具变量】中国省级八批自由贸易试验区设立及自贸区设立数据(2024-2009年)
一、测算方式:参考C刊《中国软科学》任晓怡老师(2022)的做法,使用自由贸易试验区(Treat Post) 表征,Treat为个体不随时间变化的虚拟变量,如果该城市设立自由贸易试验区则赋值为1,反之赋值为0&am…...

猫眼Java开发面试题及参考答案(上)
详细介绍项目,像项目中如何用 Redis,用到 Redis 哪些数据类型,项目中遇到哪些问题,怎么解决的 在我参与的一个电商项目中,Redis 发挥了至关重要的作用。这个电商项目主要是为用户提供商品浏览、购物车管理、订单处理等一系列功能。 在项目中使用 Redis 主要是为了提升系统…...

WSL2中安装的ubuntu开启与关闭探讨
1. PC开机后,查询wsl状态 在cmd或者powersell中输入 wsl -l -vNAME STATE VERSION * Ubuntu Stopped 22. 从windows访问WSL2 wsl -l -vNAME STATE VERSION * Ubuntu Stopped 23. 在ubuntu中打开一个工作区后…...

Linux抢占式内核:技术演进与源码解析
一、引言 Linux内核作为全球广泛使用的开源操作系统核心,其设计和实现一直是计算机科学领域的研究热点。从早期的非抢占式内核到2.6版本引入的抢占式内核,Linux在实时性和响应能力上取得了显著进步。本文将深入探讨Linux抢占式内核的引入背景、技术实现以及与非抢占式内核的…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.28 NumPy+Matplotlib:科学可视化的核心引擎
2.28 NumPyMatplotlib:科学可视化的核心引擎 目录 #mermaid-svg-KTB8Uqiv5DLVJx7r {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KTB8Uqiv5DLVJx7r .error-icon{fill:#552222;}#mermaid-svg-KTB8Uqiv5…...

C#面试常考随笔12:游戏开发中常用的设计模式【C#面试题(中级篇)补充】
C#面试题(中级篇),详细讲解,帮助你深刻理解,拒绝背话术!-CSDN博客 简单工厂模式 优点: 根据条件有工厂类直接创建具体的产品 客户端无需知道具体的对象名字,可以通过配置文件创建…...

【深度学习入门_机器学习理论】朴素贝叶斯(NaiveBayes)
本部分主要为机器学习理论入门_熟悉朴素贝叶斯算法,书籍参考 “ 统计学习方法(第二版)”。 学习目标: 熟悉条件概率、先验概率、后验概率、全概率,熟悉朴素贝叶斯算法原理与推判断过程;熟悉参数估计&#…...

docker pull Error response from daemon问题
里面填写 里面解决方案就是挂代理。 以虚拟机为例,将宿主机配置端口设置,https/http端口设为7899 配置虚拟机的http代理: vim /etc/systemd/system/docker.service.d/http-proxy.conf里面填写,wq保存 [Service] Environment…...

javaEE-8.JVM(八股文系列)
目录 一.简介 二.JVM中的内存划分 JVM的内存划分图: 堆区:编辑 栈区:编辑 程序计数器:编辑 元数据区:编辑 经典笔试题: 三,JVM的类加载机制 1.加载: 2.验证: 3.准备: 4.解析: 5.初始化: 双亲委派模型 概念: JVM的类加…...

25.02.04 《CLR via C#》 笔记 13
核心机制 第二十章 异常和状态管理 什么是异常:异常指成员没有完成它的名称所宣称的行动;异常是程序运行过程中用来表示错误并处理的机制,错误可以是更广义的,包括程序中未捕获的问题或逻辑缺陷。异常处理机制(try-c…...

git 项目的更新
更新项目 当自己的本地项目与 远程的github 的仓库已经建立远程连接时, 则直接按照下面的步骤, 将本地的项目代码更新到远程仓库。 # Stage the resolved file git add README.md <file1> <file2># To stage all changes: git add .# Comm…...

【Rust自学】17.3. 实现面向对象的设计模式
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 17.3.1. 状态模式 状态模式(state pattern) 是一种面向对象设计模式,指的是一个值拥有的内部状态由数个状态对象(…...

51c视觉~CV~合集10
我自己的原文哦~ https://blog.51cto.com/whaosoft/13241694 一、CV创建自定义图像滤镜 热图滤镜 这组滤镜提供了各种不同的艺术和风格化光学图像捕捉方法。例如,热滤镜会将图像转换为“热图”,而卡通滤镜则提供生动的图像,这些图像看起来…...

如何安全地管理Spring Boot项目中的敏感配置信息
在开发Spring Boot应用时,我们经常需要处理一些敏感的配置信息,比如数据库密码、API密钥等。以下是一个最佳实践方案: 1. 创建配置文件 application.yml(版本控制) spring:datasource:url: ${MYSQL_URL:jdbc:mysql…...

Docker小游戏 | 使用Docker部署2048网页小游戏
Docker小游戏 | 使用Docker部署2048网页小游戏 前言项目介绍项目简介项目预览二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署2048网页小游戏下载镜像创建容器检查容器状态检查服务端口安全设置四、访问2048网页小游戏五、总结前言 在当今快速发展的技术世…...

RabbitMQ深度探索:消息幂等性问题
RabbitMQ 消息自动重试机制: 让我们消费者处理我们业务代码的时候,如果抛出异常的情况下,在这时候 MQ 会自动触发重试机制,默认的情况下 RabbitMQ 时无限次数的重试需要认为指定重试次数限制问题 在什么情况下消费者实现重试策略…...

Linux网络 | 进入数据链路层,学习相关协议与概念
前言:本节内容进入博主讲解的网络层级中的最后一层:数据链路层。 首先博主还是会线代友友们认识一下数据链路层的报文。 然后会带大家重新理解一些概念,比如局域网交换机等等。然后就是ARP协议。 讲完这些, 本节任务就算结束。 那…...