vi/vim使用命令

你是否在编辑文件时以为键盘坏了,为什么不能删除呢,为什么不能敲代码呢,当你初识vi,会觉得这个东西设计很难用,这篇教程带你熟练得用上这款经典的工具,当你熟练了这款工具就会真正体会到高效率打码

Vi 是在 Unix 系统上广泛使用的编辑器,Vim 是 Vi 的改进版本,由 Bram Moolenaar 在 1991 年发布,Vim兼容vi命令,现在很多系统将vi符号链接到Vim,所以使用vi命令其实还是用的Vim
Vim官网

安装Vim

#centos
sudo yum update
sudo yum install vim#debian/ubuntu
sudo apt update
sudo apt install vim

直接输入vi a.txt可以打开文件,文件不存在则创建新文件,按下i进入插入模式,输入4*4的a矩阵,按下esc即可退出到普通模式

修改vim配置文件

#查看vim信息
vi --version

image.png

#编辑vim配置让你更方便学习
vi $HOME/.vimrc#语法高亮
syntax on
#tab占4个空格
set ts=4
#将tab转换为空格
set expandtab
#显示行号
set number
#实时计算其他行与当前行的距离
set relativenumber

vi/vim区分大小写,它设计的目的是让你用键盘解决问题,精通vim就可以丢掉鼠标了,你要剪视频的话还是捡回来吧,vim干不了这活

image.png

Vim入门

启动vim
命令解释
vim filename.txt编辑或新建filename.txt文件
vim -r filename.txt恢复异常退出的filename.txt文件,linux异常退出会创建.swp文件
vim -R filename.txt以只读方式打开filename.txt文件
vim + filename.txt打开文件并定位到最后一行
vim +2 filename.txt打开文件并定位第二行
vim +/hello filename.txt打开文件并定位第一个hello的位置

1、普通模式(NORMAL Mode)

当我们进入文件时处于普通模式,新建一个文件复制一篇英语作文,按下i,windterm再按Shist+Insert粘贴,练习一下就会了

普通模式才能移动光标,也就是刚进入文件的模式或者插入模式按下esc,结合以下的图例可以更好的理解图标的位置

image.png

文档移动光标
命令解释
K
J
H
L
%光标在括号上移动到对应的另一个括号
wword,向后跳到每个单词开头,括号也算一个单词
WShift+wWORD,字串,向后跳到下一个字串开头
eend,向后跳到每个单词末尾,括号也算一个单词
EShift+eEnd,向后跳到每句字串末尾
bback,回到上一个单词开头,括号也算一个单词
BShift+bBack,回到上一句字串的开头
-移动到非空格上一行
+移动到非空格下一行
gg移动到最顶部
GShift+g将光标移动到整个文档的最后
4G4 Shift+g将光标移动到整个文档的第4行
HCtrl+h光标移动到屏幕的最上方那一行的第一个字符
MCtrl+m光标移动到屏幕的最上方那一行的第一个字符
LCtrl+l光标移动到屏幕的最上方那一行的第一个字符
2k向上移动2行(未配置set relativenum)
4j向下移动4行(未配置set relativenum)
4Enter向下移动4行
2k移动到对应往上2行的行号,不用自己算多少行,实时显示其他行到当前行的距离(配置set relativenum)
4j移动到对应往下4行行号,不用自己算多少行,实时显示其他行到当前行的距离(配置set relativenum)
空格向后移动一位
n2空格number,跳到当前光标后指定2的位置,按下n,再输入数字,再按空格,,例如跳到当前光标后6位:n 6 空格
行内移动
命令解释
0Home数字0,移动到行首
$End移动到行尾
行内搜索
命令解释
f a移动到本行下一个匹配项,查找本行下一个a,;下一个匹配项,上一个匹配项
F aShift+f a移动到本行上一个匹配项,查找本行上一个a,;上一个匹配项,下一个匹配项
t a移动到本行下一个匹配项前,查找本行下一个a,;下一个匹配项,上一个匹配项
T aShift+t a移动到本行上一个匹配项后,查找本行上一个a,;上一个匹配项,下一个匹配项
复制&粘贴
命令解释
y0yank,复制当前行光标位置到行首的内容
y$yank,复制当前行光标位置到行尾的内容
y1Gyank,复制当前行到第一行的内容
yGyank,复制当前行到最后一行的内容
yyyank,复制当前行
10yyyank,复制当前行往下的10行内容
yw复制一个单词
p粘贴到光标下一行
PShift+p粘贴到光标上一行
4p粘贴4次
剪切
命令解释
x剪切当前光标所指的字符
4x剪切当前光标向后的4个字符
修改&替换
命令解释
>+Enter增加缩进
<+Enter减小缩进
=+Enter自动缩进
J将当前行与下一行合成同一行,删除回车
r*替换当前光标所选的字符,例如将当前光标所指替换为s:rs
RShift+rREPLACE,替换模式,按下R后,再输入字符替换当前光标所选的字符并将光标向后移动
删除
命令解释
dddelete,删除当前行
dl删除光标右边的字符
d3l删除光标右边的3个字符(包括光标下的字符,光标指向的是当前字符的前面)
dh删除光标左边的字符
d2h删除光标左边的2个字符
dw删除一个单词但不进入插入模式
Delete删除光标后一个字符
重复&撤销
命令解释
.英语句号,重复上一次修改操作,例如删除、替换、插入
uundo,撤销上一步操作
u2undo,撤销2步操作
UShift+uundo,撤销当前所有操作
Ctrl+rredo,重做上一步撤销动作,回退撤销
屏幕操作
命令解释
:split:spCtrl+w s上下分屏,Ctrl+w切换屏幕
:split set splitbelow上下分屏,下主屏,Ctrl+w切换屏幕
:split set nosplitbelow上下分屏,上主屏,Ctrl+w切换屏幕
:res +5调节上下分屏大小
:vsplit:vsCtrl+w v左右分屏,Ctrl+w切换屏幕
:vertical resize调节左右分屏大小
:e /home/a.txt在分屏的情况下打开文件编辑
Ctrl+w -调小屏幕
Ctrl+w =调大屏幕
Ctrl+fPage Down屏幕向下移动一页
Ctrl+bPage Up屏幕向上移动一页
Ctrl+d屏幕向下移动半页
Ctrl+u屏幕向上移动半页
Ctrl+e屏幕向下移动一行
Ctrl+y屏幕向上移动一行
20%移动到文档20%处
zz将当前行移动到屏幕中央
zttop,将当前行移动到屏幕顶端
zbbottom将当前行移动到屏幕底端

2、插入模式(Insert Mode)

普通模式按以下命令键进入插入模式(插前附后),有的远程连接工具会在左下角显示INSERT,也就是刚进入文件的模式到可以输入的模式

image.png

进入&退出插入模式
命令解释
i光标前插入字符,esc退出
aappend,光标后插入字符,esc退出
IShift+i行首插入字符,esc退出
AShift+a行尾插入字符,esc退出
oopen a new line,新建下一行
OShift+oopen a new line,新建上一行
gi定位上一次编辑的位置并进入插入模式
cw删除一个单词并进入插入模式
cc删除整行并进入插入模式
c删除光标至行尾的字符并进入插入模式
c1删除光标后1行并进入插入模式
ci+{ci+}ci+[ci+]ci+(ci+)change in,清除当前光标所在括号内的内容并切换到插入模式
citchange inner tag,删除tag内容并进入插入模式,例如修改

标签内的内容
ci"change inner ",删除"内的内容并进入插入模式
escCtrl+cCtrl+[退出插入模式普通模式
输入
命令解释
Ctrl+v 65以十进制输入,例如65是A
Ctrl+A插入上一次插入的内容
TabCtrl+i插入制表符
EntreCtrl+jCtrl+m换行
删除(进入插入模式后)
命令解释
BackSpaceCtrl+hCtrl+H删除光标前一个字符
Delete删除光标后的一个字符,你可以理解为光标实际指向的是当前字符的前面,插入模式普通模式都能用
Ctrl+w删除光标前一个单词
Ctrl+w撤销光标前输入的内容
修改
命令解释
Insert切换插入/替换模式

3、命令行模式(Command-Line Mode)

再按下esc退出插入模式普通模式,在普通模式输入:/进入命令行模式

image.png

保存&退出
命令解释
:set nu设置行号(未配置set relativenum
:set nonu取消行号(未配置set relativenum
:qquit,仅退出,文件没有编辑即可仅退出
:q!不保存退出
:wwrite,保存但不退出
:wq强制写入并退出,即使文件没有被修改
:x写入并退出,文件没有被修改,就没有任何操作
:e filename.txt关闭当前文件并创建filename.txt新文件,当前文件没保存会提示
:e! filename.txt放弃当前文件的修改并创建filename.txt新文件

|:r 文件名|将另一文件内容添加到当前光标后面|
|:w 文件名|另存为|
|ZZShift+z Shift+z|write&quit,保存退出|
|:saveas filename1.txt|另存为|

文件浏览器

在普通模式按下:进入命令行模式,是在打开一个文件的前提下打开文件浏览器

命令解释
:Explore:E:Shift+e垂直分隔一个窗口
:Sexplore:Sex水平分隔一个窗口打开文件浏览器
:Vexplore:Vex垂直分隔一个窗口打开文件浏览器
:Vex /home指定位置垂直分隔一个窗口
正则表达式
命令解释
:%s/$/hello/在当前行行尾追加hello
:%s/^M//g替换掉dos换行符,^M使用ctrl+v + Enter即可输入
搜索匹配
命令解释
:%s/old/new/g全局替换,例如全局替换hello为hello world::%s/hello/hello world/g
:%s/old/new/g全局替换,替换前提示每个是否确认替换(),例如全局替换hello为hello world::%s/hello/hello world/gc
/*向前搜索匹配并移动光标到对应位置,例如查找当前光标位置前的hello:/hello
?*向后搜索匹配并移动光标到对应位置,例如查找当前光标位置后的hello:?hello
n移动到下一个匹配项
NShift+n移动到上一个匹配项
escEnterctrl+cCtrl+[退出命令行模式
  • y:将当前匹配项替换为新的内容并继续执行下一个匹配项的替换
  • n:跳过当前匹配项,不进行替换,并继续执行下一个匹配项的替换
  • a:替换所有剩余的匹配项,不再提示每个匹配项
  • q:立即退出替换操作,不进行任何替换
  • l:将当前匹配项替换为新的内容并退出替换操作,不进行下一个匹配项的替换
  • ^E:向上滚动一行,显示上面的内容
  • ^Y:向下滚动一行,显示下面的内容

4、可视模式(VISUAL MODE)

在普通模式下按以下命令进入可视模式

命令解释
vvisual,可视模式,通过hjkl移动光标来选择单个字符,按d删除选中内容并回到普通模式
Ctrl+vvisual block,可视块模式,通过hjkl移动光标来选择字符块,按d删除选中内容并回到普通模式
Shift+vvisual line,可视行模式,通过hjkl移动光标来选择整行字符,按d删除选中内容并回到普通模式
viwvisual inner word,选中内部单词
viWvi Shift+wvisual inner WORD,选中字串包含后一个空格或标点
vawvisual around word,选中周围单词,包含前后空格
vaWva Shift+wvisual around WORD,选中字串包含后一个空格或标点
visvisual inner sentence,选中内部句子
vasva Shift+svisual around sentence,选中字串包含后一个空格或标点
vi]选中[]内的内容,不包含空格
vitvisual inner tag,选中html标签内的内容

在可视模式下按:normal 命令可以执行普通模式的命令,例如按下Shift+v进入可视行模式,j k选择行,输入:normal Ahello,在选中行后附加hello

Vim进阶

什么?用了这么多命令才进阶?其实这些命令没必要刻意去记,还有很多命令可以由你自己组合

Vim文本对象

  • 单词word是由字母、数字、下划线组成的,或者其他非空白字符序列组成,单词以空白字符(空格、tab、换行符)分隔
  • 字串WORD :由非空白字符序列组成,字串间以空白字符分隔
  • 句子sentence:一个句子以 .! 或者 ? 结尾并紧随着一个换行符、空格或者制表符。结束标点和空白字符之间可以出现任何数量的闭括号和引号: )]"。段落和小节的边界也视为句子的边界
  • 段落paragraph:段落是指一系列相邻的文本行。通常情况下,段落由空行或特定的标记行(例如注释行)分隔开,可以将段落视为一组相关的文本行,例如一个段落可以是一段描述、一组函数定义或一条记录
  • 小节section:文本中的一个部分或片段,小节可以通过标题行、特殊标记或其他可识别的特征来标识

Vim边界(一般用来选择括号内的内容)

  • i内部(inner):选中边界内部的内容,不包含边界
  • a环绕(around):选中边界内部的内容,包含边界

详见4、可视模式(VISUAL MODE)

Vim组合命令

vim命令由<operation><motion>组成,即<操作><动作>,例如以下命令,第一个d是操作选项,后面的则是动作;第一个y是操作选项,3l是动作

命令解释
dl删除光标右边的字符
d3l删除光标右边的3个字符(包括光标下的字符,光标指向的是当前字符的前面)
dh删除光标左边的字符
d2h删除光标左边的2个字符
y3l复制光标右边边的3个字符

Vim中的操作(operation)

命令操作
cchange,修改
ddelete,删除
yyank,复制
ppaste,粘贴
vvisual,可视模式
g~反转大小写
gu转换为小写
gU转换为大写
>增加缩进
<减小缩进
=自动缩进

Vim中的动作(motion)

命令动作
h/j/k/l向左、下、上、右移动光标
wword,移动到下一个单词的开头
eend,移动到当前单词的结尾
bbegin, 移动到当前单词的开头
0移动到当前行的开头
$移动到当前行的结尾
^移动到当前行的第一个非空字符
gg移动到文件的开头
G移动到文件的结尾
%匹配括号移动
(/)移动到句子的开头或者结尾
{/}移动到段落的开头或者结尾

再举几个简单的<operation><motion>例子

标题
ciw删除单词并修改
ci<删除<>内的单词并修改
di{删除<>内的单词
dt}删除当前光标到}前一个字符,t是行间搜索}一个字符
dT}删除当前光标到}后一个字符,T是行间搜索}个字符

Vim高级

普通模式下按q开始录制,再按一个字符或数字存储宏(0-9、a-Z),操作结束后按q结束录制,按@字符或数字使用宏

例如操作:q开始录制->e指定用e存储->i进入插入模式->hello输入hello->esc退出插入模式->q结束录制;再输入5@e,插入hello的操作就会在当前光标位置执行5次;输入@@可以执行最后一次录制的,当然你可以输入8@@,就会在当前光标位置执行8次最后录制的

进入此网站了解更多:https://tszv.vercel.app/pages/5c3d43/#%E4%BB%BB%E5%8A%A1%E7%82%B9

Vim高度可定制,前面已经修改过配置文件了,现在尝试其他配置,尽量在熟悉vim之后再修改键位

编辑配置文件

选择你需要的功能,很多效果远程连接是看不到的,只有在系统里操作能看到,注意区分普通用户和root用户,你在普通用户里配置了在root用户肯定是享受不到配置带来的优化
vi $HOME/.vimrc

普通模式下进入命令行模式输入:h option-list可以查看vim配置项,以下是一些常用配置,配置后进入命令行模式输入:source $Home/.vimrc重新加载配置或者重启vim生效

" 语法高亮
syntax on
" 高亮显示匹配的括号  
set showmatch  
"tab占4个空格
set ts=4
" 将tab转换为空格
set expandtab
" 显示行号
set number
" 实时计算其他行与当前行的距离
set relativenumber
" 命令补全
set wildmenu
" 搜索高亮
set hlsearch
" 搜索忽略大小写  
set ignorecase
" 总是显示状态行  
set laststatus=2
" 在编辑过程中,在右下角显示光标位置的状态行  
set ruler   
" 命令行(在状态行下)的高度,默认为1,这里是2  
set cmdheight=2 
" 修改按键映射,将原h改为n
"noremap n h
" 自定义组合映射,将S映射为:w+Enter,按下S即可保存
" map S :w<CR>
" 显示当前行下的线
" set cursorline
" 超过屏幕换行,折行
set wrap
" 在屏幕下方显示你输入的命令
set showcmd
" 设置编码
set enc=utf-8  
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
" 语言设置  
set langmenu=zh_CN.UTF-8
set helplang=cn
" 侦测文件类型  
filetype on
" 载入文件类型插件  
filetype plugin on  
" 为特定文件类型载入相关缩进文件  
filetype indent on
" 打开状态栏标尺
set ruler
" 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感
set ignorecase smartcase
" 输入搜索内容时就显示搜索结果
set incsearch
" 插入括号时,短暂地跳转到匹配的对应括号
"set showmatch
" 短暂跳转到匹配括号的时间
"set matchtime=2
" 开启新行时使用智能自动缩进
set smartindent

Vim添加插件

Vim插件需要插件管理器来统一管理,这里使用vim-plug,官网有其他系统的安装方式,这里介绍Linux

下载vim-plug

设置国内源可以看这篇:https://juejin.cn/post/7379641602619047975

#更新包和内核
sudo apt update
#安装curl
sudo apt install curl

在终端执行curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

编辑Vim配置

检查有没有~/.vim文件夹
cd ~然后ls -a
新建文件夹,分别为vim-plug下载的插件,自己安装的插件,文本相关插件,说明文档
mkdir -p ~/.vim/plugged ~/.vim/plugin ~/.vim/syntax ~/.vim/doc

image.png

vim $HOME/.vimrc在配置文件最后粘贴

call plug#begin('~/.vim/plugged')call plug#end()
安装插件

配置文件vim $HOME/.vimrc,添加插件,保存:w,插件网站:https://vimawesome.com/

实用插件:

" 开屏界面
Plug 'mhinz/vim-startify'
" 状态栏
Plug 'vim-airline/vim-airline'
" 主题
Plug 'vim-airline/vim-airline-themes'
" 代码缩进线
Plug 'yggdroot/indentline'
" 文件目录树
Plug 'scrooloose/nerdtree'
" 按下Ctrl+p模糊搜索
Plug 'kien/ctrlp.vim'
" 文件内快速定位
Plug 'easymotion/vim-easymotion'
" 成对编辑,例如快速加引号括号
Plug 'tpope/vim-surround'
" rust
Plug 'rust-lang/rust.vim'

image.png

#执行命令重新加载配置
:source $HOME/.vimrc
#查看插件状态
:PlugStatus
#执行下载插件
:PlugInstall
#退出下载界面
:q
#安装或更新插件
:PlugUpdate
#删除列表中不再存在的插件
:PlugClean

查看效果

#开屏插件,命令行执行
vim

image.png

NERDTree用法

编辑配置文件vim $HOME/.vimrc,添加以下内容,<leader>默认代表\<CR>代表Enter

nmap <leader>f :NERDTreeFind<CR>
nmap <leader>g :NERDTreeToggle<CR>
" 使用系统剪切版→Vim
set clipboard=unnamedplus
" Vim→系统剪切版
set clipboard=unnamed

image.png

命令行按下vim,再按下\g即打开或关闭NERDTree,按:vs水平分屏

命令解释
\g打开or关闭目录树
\f查找当前文件所在目录并显示目录树
Ctrl+w切换窗口
Ctrl+w+p切换当前窗口和目录树左边窗口
Ishift+i打开隐藏文件
ctrlp.vim用法

编辑配置文件vim $HOME/.vimrc,添加以下内容,g:ctrlp_map代表全局变量ctrlp_map,<c-p>代表Ctrl+p

let g:ctrlp_map = '<c-p>'

命令行输入vim,然后按下Ctrl+p即可模糊搜索,Enter打开匹配到的文件,\f显示文件位置并打开目录树

vim-easymotion用法

<leader>可以通过let mapleader=""设置为其他键位,这里使用默认\

命令解释
<leader><leader>w\\w搜索移动到光标后面的目标
<leader><leader>b搜索移动到光标前面的目标
<leader><leader>s全局搜索
<leader><leader>j行级向下搜索
<leader><leader>k行级向上搜索
vim-surround用法

如普通模式,ys iw ",给单词添加""

命令解释
dsdelete a surrounding, 删除环境里的内容
cschange a surrounding, 修改环境里的内容
ysyou add a surrounding,添加环境

Vim终极

当你熟悉vim之后,可以使用全新的Neovim,Neovim扩展了vim的功能,适配vim的配置文件和插件系统,Neovim使用异步处理,提高了响应速度,资源占用也比vim小

升级为NeoVim

官网其他系统安装方法

从vim迁移到neovim

如果你已经配置了很多vim插件不想继续麻烦,可以参照以下方案进行升级https://neovim.io/doc/user/nvim.html#nvim-from-vim
但我还是建议使用新的配置文件,某些vim中的配置在nvim中已经被删除,也可以将你的配置文件发给gpt让他生成lua语法的配置

卸载nvim

sudo apt remove neovim

安装nvim

这里使用通用的Linux安装方法,装最新的版本,直接install的是老版本
找一种你喜欢的字体:https://www.nerdfonts.com/font-downloads ,复制下载链接

image.png

#安装字体配置
apt install -yqq fontconfig
#下载字体
wget -q -nv https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/BitstreamVeraSansMono.zip
#解压
unzip BitstreamVeraSansMono.zip -d ~/.local/share/fonts
#删除压缩包
rm BitstreamVeraSansMono.zip
#加载字体
fc-cache -fv
#安装python3环境
apt install -yqq python3 python3-venv python3-pip
#配置python环境,3.11改成你自己下的版本,python3和python命令都会调用pthon3.11
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1
#查看是否配置成功,显示你下版本就是成功了
python
#退出python
exit()
#添加nvm环境变量
export NVM_DIR=/root/.nvm
#安装nvm管理node环境
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
#添加shell配置
cat >> ~/.bashrc <<EOF
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
EOF
#重新加载脚本
source ~/.bashrc
#下载node
nvm install 20
#检查node版本
node -v
#检查npm版本
npm -v
#安装Neovim,找到最新的对应版本下载https://github.com/neovim/neovim/releases
wget -q -nv https://github.com/neovim/neovim/releases/download/v0.10.0/nvim-linux64.tar.gz
#解压
tar zxf nvim-linux64.tar.gz
#移动到local下
mv nvim-linux64 /usr/local/share
#创建软连接
ln -s /usr/local/share/nvim-linux64/bin/nvim /usr/local/bin/nvim
#进入neovim
nvim

看到这个就装啦
image.png

安装Lazyvim

你是否反感频繁的去配置插件,使用lazyvim让你的Neovimp配置更方便,lazyvim提供了一套约定熟成的配置,当然你也可以添加配置自定义喜欢的配置,官网

备份nvim(如果你已经配置过nvim的话,我就不备份了)

mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak

克隆启动配置

git clone https://github.com/LazyVim/starter ~/.config/nvim
#删除.git
rm -rf ~/.config/nvim/.git

这个时候执行nvim打开nvim,不要动让他自己配置安装,等它不动了按q退出,看到这个东西就是lazyvim装好了

image.png
安装代码插件

按空格键->c键->m键->2键->`Ctrl+f`或者`/`搜索rust->jk上下选择->按下i安装->`esc`清除搜索

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

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

相关文章

南京邮电大学计算机网络实验二(网络路由器配置RIP协议)

文章目录 一、 实验目的和要求二、 实验环境(实验设备)三、 实验步骤四、实验小结&#xff08;包括问题和解决方法、心得体会、意见与建议等&#xff09;五、报告资源 一、 实验目的和要求 掌握思科路由器的运行过程&#xff0c;掌握思科路由器的硬件连线与接口&#xff0c;掌…

模式分解的概念(下)-无损连接分解的与保持函数依赖分解的定义和判断、损失分解

一、无损连接分解 1、定义 2、检验一个分解是否是无损连接分解的算法 输入与输出 输入&#xff1a; 关系模式R&#xff08;U&#xff0c;F&#xff09;&#xff0c;F是最小函数依赖集 R上的一个分解 输出&#xff1a; 判断分解是否为无损连接分解 &#xff08;1&#x…

15-JS封装:入口函数

目录 1 模块化的基本结构 2 编写封装里的jQuery函数 2.1 对象本身上添加css方法 2.2 对象原型上添加css方法 2.3 自定义构造函数 2.4 优化1-伪数组 2.5 优化2-原型链 2.6 简化代码 需求&#xff1a;给页面中所有的div设置字体颜色为红色 jQuery封装&#xff1a;$("…

1. zookeeper分布式协调者

zookeeper分布协调者 一、zookeeper介绍1、软件设计架构1.1 单体架构1.2 SOA架构/分布式1.3 微服务架构 二、zookeeper角色1、角色2、选举机制3、znode类型 三、zookeeper集群部署1、环境规划2、安装jdk3、安装配置zookeeper3.1 安装zookeeper3.2 编辑配置文件3.3 创建myid文件…

基于深度学习视觉算法的多模型文件融合检测系统设计与实现及优化(工人姿态检测+安全帽佩戴检测系统)

1,融合pose.pt(姿态检测)+(安全帽佩戴检测)效果图 实时检测优化后FPS可达20+ 2,原理介绍 YOLOv5是目前应用广泛的目标检测算法之一,其主要结构分为两个部分:骨干网络和检测头。 输入(Input): YOLOv5的输入是一张RGB图像,它可以具有不同的分辨率,但通常为416x416或5…

《精通嵌入式Linux编程》——解锁嵌入式Linux开发的无限可能

文章目录 &#x1f4d1;前言一、书籍概览与作者风采二、内容详解与特色亮点2.1 嵌入式Linux基础与入门2.2 系统编程与内核探索2.3 驱动开发与实战演练2.4 内存管理与性能优化2.5 系统调试与性能提升2.6 综合项目实践与案例分析 三、书籍价值与应用展望 &#x1f4d1;前言 在当今…

基于java+springboot+vue实现的便利店信息管理系统(文末源码+Lw)239

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本华府便利店信息管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的…

WebSocket实现消息实时通知

参考文档&#xff1a;万字长文&#xff0c;一篇吃透WebSocket&#xff1a;概念、原理、易错常识、动手实践、WebSocket 教程 1 背景 有一个需求&#xff0c;需要实现实时通信的功能&#xff0c;如果有新消息&#xff0c;后端会主动发送请求告知前端有新消息&#xff0c;需要前…

Day 44 Ansible自动化运维

Ansible自动化运维 几种常用运维工具比较 ​ Puppet ​ —基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱ruby ​ SaltStack ​ —基于 Python 开发,采用 C/S 架构,相对 puppet 更轻量级,配置语法使用 YAML,使得配置脚本更简单 ​ Ansible ​ —基于 …

海康充电桩报文校验TCP校验和

1 TCP校验文档校验文档要求&#xff1a; 校验码描述 校验码计算范围包含包头标识、消息头和消息体&#xff0c;校验算法采用 TCP 和校验&#xff0c;具体规则如下。 将待校验的所有数据分为 16 位的字&#xff08;大端序&#xff09;&#xff0c;如果总长度为奇数个字节&#…

测试的基础知识大全【测试概念、分类、模型、流程、测试用例书写、用例设计、Bug、基础功能测试实战】

测试基础笔记 Day01阶段⽬标⼀、测试介绍⼆、测试常⽤分类2.1 阶段划分单元测试集成测试系统测试验收测试 2.2 代码可⻅度划分⿊盒测试&#xff1a;主要针对功能&#xff08;阶段划分->系统测试&#xff09;灰盒测试&#xff1a;针对接⼝测试&#xff08;阶段划分->集成测…

【CPP】选择排序:冒泡排序、快速排序

目录 1.冒泡排序简介代码分析 2.快速排序2.1霍尔版本简介代码分析 2.2挖坑版本2.3前后指针版本2.4非递归的快排思路代码 什么是交换排序&#xff1f; 基本思想&#xff1a;所谓 交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0…

Photoshop揭秘:图像处理领域的领军软件

Photoshop 是一款由 Adobe 企业开发的图像处理软件&#xff0c;也被大家简称为 PS。在广告设计、摄影后期、数字绘画、网页设计等各个领域都得到了广泛的应用&#xff0c;是目前业界最受欢迎的图像处理软件之一。作为一款图像处理软件&#xff0c;Photoshop 为设计者提供了许多…

爆火的AI姓名头像号篇篇10w+, 流量主赚麻了...

最近二师兄在刷公众号时&#xff0c;看到一个非常有趣的账号。简单又“暴li”。 几乎篇篇10w。点击去一看&#xff0c;内容也是非常极简&#xff0c;利用姓氏生成头像。一个字都不多。 几乎每篇文末都有广告&#xff0c;一篇10w按照800来算&#xff0c; 一个月大概 ~~一七得七、…

华为手机怎么找回删除的照片?掌握3个方法,恢复不是梦

由于误删、设备故障、软件更新等原因&#xff0c;我们有时可能会不慎丢失这些宝贵的照片。当面对空空如也的相册时&#xff0c;那种失落感无法言喻。华为手机该怎么找回删除的照片呢&#xff1f;但是&#xff0c;请不要绝望&#xff01;在科技的帮助下&#xff0c;我们可以采取…

threejs 光影投射-与场景进行交互(六)

效果 场景中有三个立方体,三种颜色.点击变成红色,再点恢复自身原有颜色 代码 import ./style.css import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { log } from three/examples/jsm/nodes/Nodes.js//…

NGINX_十二 nginx 地址重写 rewrite

十二 nginx 地址重写 rewrite 1 什么是Rewrite Rewrite对称URL Rewrite&#xff0c;即URL重写&#xff0c;就是把传入Web的请求重定向到其他URL的过程。URL Rewrite最常见的应用是URL伪静态化&#xff0c;是将动态页面显示为静态页面方式的一种技术。比如 http://www.123.com…

基于淘宝商城用户购物行为数据分析系统

摘 要 在电商行业高速发展的今天&#xff0c;用户购物行为数据量呈指数型增长&#xff0c;传统的数据处理架构已经无法满足于现如今的数据处理需求。针对于这样的需求本课题设计了一种基于淘宝的用户购物行为分析系统&#xff0c;旨在通过对大量数据进行分析处理进而深入研究用…

视频剪辑技巧大揭秘:轻松掌握为视频添加梦幻光晕效果的绝妙方法!

在这个视觉盛宴的时代&#xff0c;每一个画面都渴望被赋予独特的魅力与魔法。今天&#xff0c;我要为你揭秘一个神秘的视频剪辑技巧——给视频添加光晕效果&#xff0c;让你的作品瞬间脱颖而出&#xff0c;成为朋友圈的焦点 首先&#xff0c;你可以打开原视频进行查看。此时&am…

【Kafka】Kafka生产者数据重复、数据有序、数据乱序-07

【Kafka】Kafka生产者数据重复、数据有序、数据乱序-07 1. 数据重复1.1 数据传递语义1.2 幂等性1.2.1 如何开启幂等性1.2.2 同一个消息&#xff0c;多个分区都会存在吗&#xff1f; 1.3 事务1.3.1 Kafka 事务原理1.3.2 Kafka事务的作用和意义作用具体应用场景 2. 数据有序3. 数…