Linux运维——Vim基础

Vim基础

  • 一、移动光标
    • 1.1、基础移动
    • 1.2、屏幕滚动
  • 二、编辑操作
    • 2.1、插入模式
    • 2.2、删除与修改
    • 2.3、复制粘贴
  • 三、搜索与替换
    • 3.1、搜索
    • 3.2、替换
  • 4、分屏与窗口管理
    • 4.1、分屏操作
    • 4.2、窗口调整
  • 五、宏与批量操作
  • 六、效率技巧
  • 七、操作符
    • 7.1、内置操作符
    • 7.2、操作符 + 文本对象(高效组合)
    • 7.3、操作符进阶技巧
    • 7.4、自定义操作符
  • 八、文本对象
    • 8.1、内置文本对象
    • 8.2、操作符+文本对象
    • 8.3、自定义文本对象
    • 8.4、插件增强文本对象
    • 8.5、使用技巧
  • 九、动作
    • 9.1、基础动作
    • 9.2、高级动作技巧
    • 9.3、动作+操作符
    • 9.4、自定义动作
    • 9.5、使用示例
  • 十、Ex命令
    • 10.1、文件操作
    • 10.2、行号与范围
    • 10.3、文本替换(`:s`)
    • 10.4、多文件与缓冲区
    • 10.5、窗口与标签页
    • 10.6、环境控制
    • 10.7、高级技巧
    • 10.8、实际应用

一、移动光标

1.1、基础移动

快捷键作用
h j k l左/下/上/右移动
w跳到下一个单词开头
b跳到上一个单词开头
e跳到当前单词末尾
0跳到行首
^跳到行首第一个非空白字符
$跳到行尾
gg跳到文件第一行
G跳到文件最后一行
:n跳到第 n 行(如 :10 跳第 10 行)

1.2、屏幕滚动

快捷键作用
Ctrl+u向上滚动半屏
Ctrl+d向下滚动半屏
Ctrl+b向上滚动整屏
Ctrl+f向下滚动整屏
zz当前行居中显示
zt当前行置顶
zb当前行置底

二、编辑操作

2.1、插入模式

快捷键作用
i在光标前插入
a在光标后插入
I在行首插入
A在行尾插入
o在下方插入新行
O在上方插入新行

2.2、删除与修改

快捷键作用
x删除当前字符
dw删除当前单词
dd删除当前行
D删除到行尾
cw修改当前单词(删除并进入插入模式)
cc修改整行
r替换单个字符
R进入替换模式(连续替换)

2.3、复制粘贴

快捷键作用
yy复制当前行
yw复制当前单词
p粘贴到光标后
P粘贴到光标前
"ayy复制当前行到寄存器 a
"ap粘贴寄存器 a 的内容

三、搜索与替换

3.1、搜索

快捷键作用
/keyword向前搜索 keyword
?keyword向后搜索 keyword
n跳转到下一个匹配项
N跳转到上一个匹配项
*搜索当前光标下的单词

3.2、替换

命令作用
:s/old/new替换当前行第一个 old
:s/old/new/g替换当前行所有 old
:%s/old/new/g替换全文所有 old
:%s/old/new/gc替换全文并每次确认

4、分屏与窗口管理

4.1、分屏操作

快捷键作用
:sp水平分屏
:vsp垂直分屏
Ctrl+w h/j/k/l跳转到左/下/上/右窗口
Ctrl+w w循环切换窗口
Ctrl+w c关闭当前窗口
Ctrl+w o关闭其他窗口

4.2、窗口调整

快捷键作用
Ctrl+w +增加窗口高度
Ctrl+w -减少窗口高度
Ctrl+w >增加窗口宽度
Ctrl+w <减少窗口宽度
Ctrl+w =所有窗口等宽等高

五、宏与批量操作

快捷键作用
qa开始录制宏到寄存器 a
q停止录制
@a执行寄存器 a 的宏
@@重复执行上一次宏
:normal @a对选中行执行宏 a
  1. 按 qa 开始录制 → 执行操作(如 dd 删除行)→ 按 q 结束录制
  2. 执行 @a 重复删除操作

六、效率技巧

组合操作:

  • dap:删除整个段落
  • cis:修改当前句子

文本对象:

  • viw:选中当前单词
  • vip:选中当前段落

重复操作:

  • 10j:向下移动 10 行
  • 5dd:删除 5 行

七、操作符

Vim 的操作符遵循 ​​"操作符 + 动作 = 操作"​​ 的模式:
[次数] 操作符 [范围/文本对象]
例如:d2w 表示 “删除 2 个单词”。

7.1、内置操作符

操作符作用示例说明
d删除 (Delete)dw 删除单词内容会存入寄存器,可粘贴
y复制 (Yank)y$ 复制到行尾配合 p/P 粘贴
c修改 (Change)ciw 修改当前单词删除后自动进入插入模式
~大小写切换~ 切换当前字符支持视觉模式选区
g~反转选区大小写g~iw 反转单词
gu转为小写guw 单词转小写
gU转为大写gUw 单词转大写
>增加缩进>j 下一行缩进通常结合 >> 缩进整行
<减少缩进<k 上一行缩进通常结合 << 取消缩进整行
=自动缩进=ap 段落自动缩进需设置 filetype indent on
!通过外部命令过滤!}sort 段落排序调用 sort 命令处理选区
gq文本重排 (Format)gqap 重排段落依赖 textwidth 设置
z折叠操作zfap 创建段落折叠需启用折叠功能

7.2、操作符 + 文本对象(高效组合)

基础文本对象:

文本对象作用示例说明
iw当前单词 (inner word)diw 删除单词不包括空格
aw当前单词 + 空格daw 删除单词包括相邻空格
i"引号内内容ci" 修改引号内容光标需在引号间
a"引号及内容da" 删除引号及内容
i( / i)括号内内容di( 删除括号内容适用于 [], {}, <>
a( / a)括号及内容da( 删除括号及内容

高级文本对象:

文本对象作用示例说明
ip段落 (inner paragraph)dip 删除段落需设置 :set paragraph=
ap段落 + 空行yap 复制段落
is句子 (inner sentence)cis 修改句子.!? 结尾为句子
as句子 + 空格das 删除句子

7.3、操作符进阶技巧

跨行操作:

d/pattern<CR>   " 删除直到匹配 pattern 的位置
y?error<CR>     " 复制到上一个 "error" 出现处

寄存器指定:

"aD   " 删除到行尾并存入寄存器 a
"+yiw " 复制当前单词到系统剪贴板

重复操作符:

..     " 重复上一次修改(包括操作符动作)
&      " 重复最近的 `:s` 替换操作

视觉模式配合:

用 v/V/Ctrl+v 选择区域
按操作符(如 d/y/>)执行

7.4、自定义操作符

通过 map-operator 创建自定义操作符(需 Vim 7.4+):

高亮选区:

" 定义操作符(输入 \h 高亮选区)
vnoremap <silent> <leader>h :<C-U>call HighlightSelection()<CR>
function! HighlightSelection()execute "'<,'>s/\\%V\$.*\$\\%V/\\1/"echom "选区已高亮"
endfunction

base64编码:

" 输入 \b 对选区进行 Base64 编码
vnoremap <silent> <leader>b :<C-U>call Base64Encode()<CR>
function! Base64Encode()execute "'<,'>!base64"
endfunction

八、文本对象

文本对象是 ​结构化文本片段​(如单词、句子、括号内容等),通过 操作符 + 文本对象可视化模式 + 文本对象 实现高效操作。
​语法​:

  • i + 对象 → 操作 ​内部​(不包含边界符号,如引号/括号)
  • a + 对象 → 操作 ​整体​(包含边界符号)

8.1、内置文本对象

基础对象:

文本对象作用范围示例说明
iw/aw单词 (word)diw 删除单词aw 包含相邻空格
iW/aW大单词 (WORD)ciW 修改连续非空白字符以空格为分隔
is/as句子 (sentence)yas 复制句子.!? 结尾为界
ip/ap段落 (paragraph)dap 删除段落以空行为分隔
i"/a"双引号内容ci" 修改引号内文本适用于 ' ` `等同类符号
i(/a(括号内容 (圆括号)di( 删除括号内内容同样适用于 [] {} <>

标签对象(HTML/XML):

文本对象作用范围示例说明
it/at标签内部/整个标签cit 修改标签内容需光标在标签内
i>/a>尖括号内容yi> 复制标签属性适用于 <div class="...">

其它对象:

文本对象作用范围示例说明
i{/a{花括号块 (代码块)va{ 选中整个代码块适用于 if/for 等代码块
i/a 缩进块 (indent)>i 增加缩进块需开启 :set indentkeys
i/a函数参数 (argument)cia 修改函数参数需插件如 vim-textobj-parameter

8.2、操作符+文本对象

高效编辑:

ci"    " 修改双引号内的内容(自动进入插入模式)
da{    " 删除花括号及内部代码块(包括换行)
yip    " 复制当前段落
>ap    " 增加段落缩进

复杂嵌套场景:

<!-- 修改嵌套标签内容 -->
<div><span>|光标在这里|</span>
</div>
  • cit → 修改 <span> 内容
  • dat → 删除整个 <span> 标签
  • 2cit → 修改外层 <div> 内容(需插件支持层级跳转)

8.3、自定义文本对象

基础自定义(.vimrc):

" 定义 XML 属性文本对象(选中 class="...")
xnoremap <silent> ix :<C-U>call SelectXMLAttr()<CR>
function! SelectXMLAttr()execute "normal! /\\s\\w\\+=\\s*[\"']\\<CR>v/\\s\\w\\+=\\s*[\"']\\>\\zs<CR>"
endfunction

使用:vix 选中当前 XML 属性值。

通过插件扩展:

vim-textobj-user:创建自定义文本对象的框架
示例:定义 if 条件语句为文本对象:

call textobj#user#plugin('condition', {
\   'if': {
\     'select-a': 'aif',
\     'select-i': 'iif',
\     'pattern': '\<if\>.\{-}\<endif\>',
\   },
\ })

使用:diif 删除 if 条件块内容。

8.4、插件增强文本对象

vim-surround:

操作效果
ds"删除周围双引号
cs"'将双引号改为单引号
ysiw]给单词添加 [] 包围

vim-indent-object:

文本对象作用
ii/ai操作相同缩进层级的内容
dii    " 删除当前缩进块(保留父级)

vim-textobj-line:

文本对象作用
il/al操作整行(非空白部分/全行)
yal    " 复制整行(包括换行符)

8.5、使用技巧

快速修复JSON键名:

{ "old_name": "value" }

光标定位到键名 → ci"new_name → 快速修改键名

代码块操作:

def foo():|光标在这里|return True

di → 删除函数体(需 indent 文本对象支持)

选取扩展:

在可视化模式中:

按 i 或 a 后输入文本对象(如 i")可动态调整选区范围

九、动作

动作是 ​移动光标或选择文本​ 的命令,可与 ​操作符​(如 d/y/c)或 ​可视化模式​ 组合使用。

  • ​语法​:[次数] + 动作
  • 例如:d2w → 删除 2 个单词,v3j → 向下选择 3 行。

9.1、基础动作

字符级移动:

动作作用示例
h左移dl 删除右侧字符
l右移ch 修改左侧字符
k上移5k 上移 5 行
j下移vj 选择当前和下一行

单词级移动:

动作作用示例
w跳到下一个单词开头dw 删除到下一单词
b跳到上一个单词开头cb 修改上一单词
e跳到当前单词末尾ge 跳到前一单词末尾

行级移动:

动作作用示例
0跳到行首d0 删除到行首
^跳到行首非空白字符y^ 复制到行首
$跳到行尾c$ 修改到行尾
+跳到下一行首v+ 选择两行
-跳到上一行首d- 删除上一行

屏幕滚动:

动作作用
H跳到屏幕顶部(High)
M跳到屏幕中间(Middle)
L跳到屏幕底部(Low)
Ctrl+u上翻半屏
Ctrl+d下翻半屏

9.2、高级动作技巧

搜索跳转:

动作作用示例
f{char}跳到当前行下一个 {char}df. 删除到句点
F{char}跳到当前行上一个 {char}yF, 复制到逗号
t{char}跳到 {char} 前一个字符ct" 修改到引号前
/{pattern}全局搜索d/end<CR> 删除到 “end”

标记跳转:

动作作用
m{a-z}设置标记(如 ma)
`a精确跳转到标记 a
'{a-z}跳到标记行的行首

代码块跳转:

动作作用示例
%匹配括号跳转d% 删除括号间内容
[[跳到上一个函数开头y[[ 复制函数
]]跳到下一个函数开头v]] 选择函数

9.3、动作+操作符

经典组合:

d2w    " 删除 2 个单词
ci(    " 修改括号内内容
yG     " 复制到文件末尾
>}     " 增加缩进到段落末尾

跨行操作:

d/function<CR>  " 删除直到 "function" 出现处
y?end<CR>       " 复制到上一个 "end" 位置

精准选区:

v3e    " 选择当前单词和后 2 个单词(共 3 个)
vat    " 选择整个 XML/HTML 标签

9.4、自定义动作

映射组合动作(.vimrc):

" 快速跳转到行尾并插入分号
nnoremap <leader>; A;<Esc>

通过插件扩展:

vim-easymotion​:快速跳转到任意位置

<leader><leader>w  " 高亮显示所有单词首字母,按字母跳转

​vim-sneak​:增强 f/t 动作

sxy  " 跳转到下一个 "xy" 出现处

9.5、使用示例

快速修复代码:

def calculate(a, b):result = a * b  # |光标在此|return result
  • ciwsum → 修改 result 为 sum
  • f(di( → 删除函数参数

批量缩进:

>j    " 下一行增加缩进
3>>   " 当前行和下两行缩进

跨文件标记:

  1. 在关键位置设置标记:mA
  2. 在其他文件跳回:`A

十、Ex命令

ex 命令是 Vim 的底层命令模式,以 : 开头,继承自古老的 ed 编辑器。所有可视化操作最终都会转换为 ex 命令(可通过 :help ex-cmd-index 查看完整列表)。

10.1、文件操作

命令作用示例
:e[dit]重新加载当前文件:e! 强制丢弃修改重新加载
:w[rite]保存文件:w /tmp/backup 另存为备份
:sav[eas]另存为新文件:sav newfile.txt
:q[uit]退出:q! 强制退出不保存
:wq / :x保存并退出
:r[ead]插入文件内容:r /etc/passwd
:r!插入命令输出:r! date 插入当前日期

10.2、行号与范围

语法作用示例
:n跳转到第 n 行:10 跳转到第 10 行
:.,$当前行到文件末尾:.,$d 删除此后所有行
:'<,'>可视化模式选中的范围:'<,'>s/foo/bar/g 替换选区
:%整个文件(相当于 1,$):%s/old/new/g 全局替换
:+/pattern/-n基于搜索的偏移范围:/foo/+1,/bar/-2d

10.3、文本替换(:s

命令作用示例
:s/old/new/替换当前行第一个匹配:s/foo/bar/
:s/old/new/g替换当前行所有匹配:s/\s\+$//g 删除行尾空格
:n,ms/old/new/g替换 n 到 m 行所有匹配:10,20s/error/warning/g
:%s/old/new/gc全局替换并每次确认
高级技巧
\v启用 “very magic” 模式(减少转义):s/\v\d{4}/\=submatch(0)+1/
\c忽略大小写:s/foo\c/bar/

10.4、多文件与缓冲区

命令作用示例
:bn[ext]切换到下一个缓冲区`:bn! 强制切换(忽略修改)
:bp[revious]切换到上一个缓冲区
:ls列出所有缓冲区
:badd添加文件到缓冲区:badd ~/.zshrc
:bd[elete]删除缓冲区:bd! 强制删除
:argadd添加到参数列表:argadd *.py
:argdo对参数列表所有文件执行命令:argdo %s/foo/bar/g

10.5、窗口与标签页

命令作用示例
:sp[lit]水平分割窗口:sp ~/.vimrc
:vs[plit]垂直分割窗口:vs /tmp/log
:tabnew新建标签页:tabnew
:tabn[ext]下一个标签页:tabn 3 跳转到第 3 个标签
:tabm[ove]移动标签页位置:tabm 0 移动到首位
:windo对所有窗口执行命令:windo set nu! 切换行号显示

10.6、环境控制

命令作用示例
:set查看/设置选项:set wrap? 查看换行状态
:set nu显示行号:set nonu 隐藏行号
:set paste进入粘贴模式(防格式混乱)
:syntax on启用语法高亮
:vert h垂直分割帮助窗口:vert h pattern

10.7、高级技巧

命令组合:

" 删除所有包含 "TODO" 的行
:g/TODO/d" 复制所有匹配行到文件末尾
:g/pattern/t$" 对指定文件类型执行操作
:autocmd FileType python nnoremap <buffer> <leader>c I#<Esc>

表达式替换:

" 将数字递增 1
:%s/\d\+/\=submatch(0)+1/g" 格式化日期(需系统支持)
:%s/\v(\d{4})-(\d{2})-(\d{2})/\3.\2.\1/g

宏录制与ex命令:

" 录制宏到寄存器 q(操作第1-5行)
:1,5norm @q" 对所有缓冲区执行宏
:bufdo normal @q

外部命令集成:

" 用 sort 对选区排序
:'<,'>!sort" 用 Python 处理文本
:%!python -c "import sys; print(sys.stdin.read().upper())"

10.8、实际应用

批量重命名变量:

" 1. 将局部变量 `tmp` 改为 `context`
:argdo %s/\<tmp\>/context/g | update" 2. 仅修改函数内的变量(需熟悉函数边界标记)
:/function start/,/function end/s/\<tmp\>/context/g

快速处理日志文件:

" 1. 提取所有 ERROR 行并保存
:g/ERROR/. w >> errors.log" 2. 删除时间戳列(假设第1-20字符)
:%s/^.\{20\}//

项目全局操作:

" 1. 在所有 Python 文件中替换字符串
:args ​**​/*.py
:argdo %s/old_api/new_api/g | update" 2. 统计所有文件的 "TODO" 出现次数
:grep TODO ​**​/*
:copen

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git操作合集

更新文件 在 Git 中更新已经上传到仓库的文件 1、检查当前状态 首先&#xff0c;打开终端或命令行工具&#xff0c;进入你的 Git 仓库目录&#xff08;即包含 .git 文件夹的目录&#xff09;。运行以下命令来查看当前仓库的状态&#xff1a; git status 此命令会显示哪些文…

【笔记】深度学习模型训练的 GPU 内存优化之旅⑤:内存分配篇

开设此专题&#xff0c;目的一是梳理文献&#xff0c;目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化&#xff0c;所以最初思考的专题名称是“显存突围&#xff1a;深度学习模型训练的 GPU 内存优化之旅”&#xff0c;英文缩写是 “MLSys_GPU_Memory_Opt”。…

SQL Server 存储过程开发手册

SQL Server 存储过程开发手册&#xff08;更新版&#xff09; 根据要求&#xff0c;重新整理并加入了事务控制、异常日志记录和返回状态码的设计。以下是详细说明&#xff1a; 1. 总则 1.1 目标 本手册旨在为 SQL Server 存储过程的编写提供一套完整的规范&#xff0c;确保系…

深海科技服务博客简介

人人可学&#xff0c;人人可用&#xff0c;IT与AI不是高不可攀&#xff01; 博客宗旨 深海科技服务博客致力于&#xff1a; 推广IT与AI的实际应用&#xff0c;降低入门门槛&#xff0c;让更多个人和中小企业能够以最少投入、高效实现信息化、智能化。 分享开源免费软件、简单…

本地大模型编程实战(29)查询图数据库NEO4J(2)

上一篇文章 用大语言模型LLM查询图数据库NEO4J(1) 介绍了使用GraphQACypherChain查询NEO4J。用它实现简单快捷&#xff0c;但是不容易定制&#xff0c;在生产环境中可能会面临挑战。 本文将基于langgraph 框架&#xff0c;用LLM(大语言模型)查询图数据库NEO4J。它可以定义清晰复…

RPG_5.角色动画

1.创建一个动画实例 2.创建该实例的c子类 3.继续创建该类的子类&#xff0c;但是作用是用来链接&#xff08;以后会详细解释&#xff09; 4.基于PlayerAnimInstance类创建一个子类 5.目前一共创建了四个c类&#xff0c; 最基的类 角色的类 玩家控制的角色的类 玩家控制的角…

Sigmoid函数导数推导详解

Sigmoid函数导数推导详解 在逻辑回归中&#xff0c;Sigmoid函数的导数推导是一个关键步骤&#xff0c;它使得梯度下降算法能够高效地计算。 1. Sigmoid函数定义 首先回顾Sigmoid函数的定义&#xff1a; g ( z ) 1 1 e − z g(z) \frac{1}{1 e^{-z}} g(z)1e−z1​ 2. 导…

MS31860T——8 通道串行接口低边驱动器

MS31860T 是一款 8 通道低边驱动器&#xff0c;包含 SPI 串口通信、 PWM斩波器配置、过流保护、短路保护、欠压锁定和过热关断功能&#xff0c; 芯片可以读取每个通道的状态。MS31860T 可以诊断开路的负载情况&#xff0c;并可以读取故障信息。外部故障引脚指示芯片的故障状态。…

腾讯 Kuikly 正式开源,了解一下这个基于 Kotlin 的全平台框架

在 3月的时候通过 《腾讯 TDF 即将开源 Kuikly 跨端框架&#xff0c;Kotlin 支持全平台》 我们大致知道了 Kuikly 的基本情况&#xff0c;Kuikly 是一个面向终端技术栈的跨端开发框架&#xff0c;完全基于kotlin语言开发&#xff0c;提供原生的性能和体验。 按照官方的说法&…

AI驱动UI自动化测试框架调研

随着应用复杂度增加&#xff0c;手动测试变得费时且易出错&#xff0c;而自动化测试可提高效率和可靠性。如何借助大模型和一些自动化测试框架进行自动化测试&#xff0c;是一个研发团队很重要的诉求。 目前主流的自动化测试框架很多&#xff0c;Midscene.js结合Playwright提供…

关系型数据库设计指南

1. 前言 在自己独立开发一个项目的过程中&#xff0c;我发现了一些以往写小 Demo 从来没有遇到过的问题。 最近在独立制作一个全栈的通知管理平台。一开始我没有考虑太多&#xff0c;直接根据头脑中零星的想法就开撸后端数据库 model 和 API&#xff0c;用的是学了半成品的 M…

详解TypeScript中的类型断言及其绕过类型检查机制

TypeScript中的类型断言及其绕过类型检查机制 一、类型断言的本质与工作原理编译时与运行时的区别TypeScript编译器处理类型断言的步骤 二、类型断言的详细语法与进阶用法基础语法对比链式断言断言修饰符1. 非空断言操作符 (!)代码分析1. getLength 函数分析用法说明&#xff1…

XLSX.utils.sheet_to_json设置了blankrows:true,但无法获取到开头的空白行

在用sheetJs的XLSX库做导入&#xff0c;遇到一个bug。如果开头行是空白行的话&#xff0c;调用sheet_to_json转数组获得的数据也是没有包含空白行的。这样会导致在设置对应的起始行时&#xff0c;解析数据不生效。 目前是直接跳过了开头的两行空白行 正确应该获得一下数据 问…

PostgreSQL 数据库下载和安装

官网&#xff1a; PostgreSQL: Downloads 推荐下载网站&#xff1a;EDB downloads postgresql 我选了 postgresql-15.12-1-windows-x64.exe 鼠标双击&#xff0c;开始安装&#xff1a; 安装路径&#xff1a; Installation Directory: D:\Program Files\PostgreSQL\15 Serv…

一、Javaweb是什么?

1.1 客户端与服务端 客户端 &#xff1a;用于与用户进行交互&#xff0c;接受用户的输入或操作&#xff0c;且展示服务器端的数据以及向服务器传递数据。 例如&#xff1a;手机app&#xff0c;微信小程序、浏览器… 服务端 &#xff1a;与客户端进行交互&#xff0c;接受客户…

奇偶ASCII值判断

奇偶ASCII值判断 Description 任意输入一个字符&#xff0c;判断其ASCII是否是奇数&#xff0c;若是&#xff0c;输出YES&#xff0c;否则&#xff0c;输出NO。例如&#xff0c;字符A的ASCII值是65&#xff0c;则输出YES&#xff0c;若输入字符B(ASCII值是66)&#xff0c;则输…

OpenCV 图形API(74)图像与通道拼接函数-----合并三个单通道图像(GMat)为一个多通道图像的函数merge3()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 从3个单通道矩阵创建一个3通道矩阵。 此函数将多个矩阵合并以生成一个单一的多通道矩阵。即&#xff0c;输出矩阵的每个元素将是输入矩阵元素的…

多节点监测任务分配方法比较与分析

多监测节点任务分配方法是分布式系统、物联网&#xff08;IoT&#xff09;、工业监测等领域的核心技术&#xff0c;其核心目标是在资源受限条件下高效分配任务&#xff0c;以优化系统性能。以下从方法分类、对比分析、应用场景选择及挑战等方面进行系统阐述&#xff1a; 图1 多…

【推荐系统笔记】BPR损失函数公式

一、BPR损失函数公式 BPR 损失函数的核心公式如下&#xff1a; L BPR − ∑ ( u , i , j ) ∈ D ln ⁡ σ ( x ^ u i j ) λ ∣ ∣ Θ ∣ ∣ 2 L_{\text{BPR}} - \sum_{(u, i, j) \in D} \ln \sigma(\hat{x}_{uij}) \lambda ||\Theta||^2 LBPR​−(u,i,j)∈D∑​lnσ(x^ui…

Java 核心--泛型枚举

作者&#xff1a;IvanCodes 发布时间&#xff1a;2025年4月30日&#x1f913; 专栏&#xff1a;Java教程 各位 CSDN伙伴们&#xff0c;大家好&#xff01;&#x1f44b; 写了那么多代码&#xff0c;有没有遇到过这样的“惊喜”&#xff1a;满心欢喜地从 ArrayList 里取出数据…