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.pswp.cn/diannao/81263.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81263.shtml
英文地址,請注明出處:http://en.pswp.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 里取出數據…