Vim 實用指南

導航

    • 簡介
      • Vim 的來歷
      • Vim 語言
    • Vim 的三種模式
      • Normal(普通模式)
      • Insert(插入模式)
      • Visual(可視模式)
      • 三種模式轉換
    • 普通模式實用技巧
      • 說明
      • 復制當前行并粘貼
      • 使用上一個命令
      • 撤銷上一個操作
      • 最常用的跳轉命令
      • 查找對應的字符
      • 向下查找多字符
      • 向上查找多字符
      • 常用刪除命令
      • 設置標記
    • 插入模式實戰技巧
      • 插入模式多種刪除命令
      • 替換模式
    • 可視模式實戰技巧
      • 在長短不一的高亮塊后添加文本
      • 剪切一整個代碼塊
    • 命令行模式實戰技巧
      • 打開文件
      • 復制和移動內容
      • 復制當前文件
      • 全局替換內容
      • 手動替換想要替換的內容
    • 總結
    • 普通模式的常用命令
      • 光標移動命令
      • 刪除命令
      • 復制與粘貼命令
      • 替換命令
      • 查找與替換命令
      • 其他常用命令
    • 插入模式常用命令
      • 進入插入模式的常用方式
      • 插入模式下的常用操作
      • 退出插入模式
      • 其他插入模式命令
    • 可視模式常用命令
      • 進入可視模式
      • 選擇范圍
      • 剪切和復制
      • 粘貼
      • 替換和刪除
      • 其他操作
      • 退出可視模式
    • 命令行模式常用命令
      • 文件操作
      • 搜索與替換
      • 撤銷與重做
      • 查找與跳轉
      • 窗口管理
      • 緩沖區與標簽
      • 宏與寄存器
      • 交互式命令與歷史
      • 系統命令
      • 退出 Vim
    • 參考鏈接

簡介

Vim 的來歷

Vim 是一個高度可定制的文本編輯器,其名字來源于 Vi IMproved,即 Vi(改進版)

Bram Moolenaar(布拉姆·穆倫納爾)于 1991 年開發,目的是為了增強和擴展 Vi 編輯器

Vim 語言

動詞

動詞代表了我們打算對文本進行什么樣的操作。例如:

  • d 表示刪除(delete)
  • r 表示替換(replace)
  • c 表示修改(change)
  • y 表示復制(yank)
  • v 表示選取(visual select)

名詞

名詞代表了我們即將處理的文本。Vim 中有一個專門的術語叫做文本對象,下面是一些文本對象的示例:

  • w 表示一個單詞(word)
  • s 表示一個句子(sentence)
  • p 表示一個段落(paragraph)

介詞

介詞界定了待編輯文本的范圍或者位置。例如:

  • i 表示“在…之內”(inside)
  • a 表示“環繞…”(around)
  • t 表示“到…位置前”(to)
  • f 表示“到…位置上”(forward)

舉例

# 刪除一個段落: delete inside paragraph
dip# 選取一個句子: visual select inside sentence
vis# 修改一個單詞: change inside word
ciw# 修改一個單詞: change around word
caw# 刪除文本直到字符“x”(不包括字符“x”): delete to x
dtx# 刪除文本直到字符“x”(包括字符“x”): delete forward x
dfx

Vim 的三種模式

Normal(普通模式)

vim 的核心模式,vim 的大部分操作也都是在這個模式下使用的, 主要用于導航、編輯、復制粘貼、查找替換等操作

Insert(插入模式)

主要用于輸入和編輯文本

Visual(可視模式)

選中一段文本并對其執行相關操作

三種模式轉換

注意:你只能從普通模式到插入模式,或者從普通模式到可視模式,而無法從插入模式直接轉到可視模式,反過來也是這樣(所以你明白為什么普通模式是核心模式了嘛)

從常規模式到插入模式

按鍵作用
i在 光標前 進入插入模式
a在 光標后 進入插入模式
I在 當前行首(非空字符前) 進入插入模式
A在 當前行尾 進入插入模式
o在 當前行下方 插入新行,并進入插入模式
O在 當前行上方 插入新行,并進入插入模式

從插入模式到常規模式

Esc:很難按到,建議不要使用

Ctrl + [:建議使用

Ctrl + c

從常規模式到可視模式

v: 進入字符可視模式,逐字符選擇

V:進入行可視模式,整行選擇

Ctrl + v: 進入塊可視模式,矩形區域選擇

從可視模式到常規模式

Esc

普通模式實用技巧

說明

vim 中,完成一個操作可能有許多不同的方式,建議記住一個最簡單的,不然腦子真的記不住 😅

復制當前行并粘貼

yy -- 復制光標所在行
p -- 粘貼到光標后面

使用上一個命令

vim 中可以使用 .符號,重復執行上一個命令

例如:我們使用了 p命令粘貼,此時我們一直 .就可以一直粘貼

撤銷上一個操作

當我們發現粘貼多了,想取消上一次操作怎么辦

u

最常用的跳轉命令

  • w:跳到下一個單詞的開頭
  • e:跳到當前或下一個單詞的結尾
  • b:跳到當前或上一個單詞的開頭
  • 0:跳到當前行的開頭
  • $:跳到當前行的末尾
  • gg:跳到文檔的開頭
  • G:跳到文檔的結尾

查找對應的字符

hello world!
  • 我們想查找 o字符
  • 光標移動到這一行上
  • 輸入 f{char}fo
  • 此時光標就在第一個 o上了
  • ;查找下一個 o
  • ,返回上一個 o

向下查找多字符

  • /{chars}
  • n下一個
  • N上一個

向上查找多字符

  • ?{chars}
  • n上一個
  • N下一個

常用刪除命令

  • x:刪除當前光標所在的字符
  • dd:刪除當前行

別再記別的了 😂

設置標記

  • mA當前光標位置設置一個標記,名字叫 A
  • 'A跳到 A 標記處
  • :marks查看所有標記
  • :delmarks!刪除所有標記

可用于快速跳轉

插入模式實戰技巧

插入模式多種刪除命令

delete向后刪除

Ctrl + h/ Back 向前刪除

Ctrl + w 刪除前一個單詞

Ctrl + u 刪到行首

不建議再記別的,先使用著

替換模式

R進入

可視模式實戰技巧

在長短不一的高亮塊后添加文本

舉例:想讓下面的 javascript 代碼后面都加上 ;

let foo = 1;
let bar = 2;
let foobar = foo + bar;
  • Ctrl + v進入可視模式
  • jj向下選中
  • $向尾部選中
  • A尾部插入
  • 輸入 ;

剪切一整個代碼塊

舉例:想將下面的代碼塊剪切下來

@router.post("/login/access-token")
def login_access_token(session: SessionDep, form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
) -> Token:"""OAuth2 兼容的令牌登錄,獲取訪問令牌以供后續請求使用"""user = user_crud.authenticate(session=session, user_account=form_data.username, password=form_data.password)if not user:raise HTTPException(status_code=400, detail="Incorrect email or password")elif not user.is_active:raise HTTPException(status_code=400, detail="Inactive user")access_token_expires = timedelta(minutes=60 * 60 * 24)return Token(access_token=create_access_token(user.id, expires_delta=access_token_expires))
  • 將光標放在代碼塊的起始位置
  • V 進入行可視模式
  • 使用 jk 擴展選擇,直到選擇完整個代碼塊
  • d 剪切所選的代碼塊

命令行模式實戰技巧

打開文件

:e {filename}打開文件

復制和移動內容

  • :6t.將第六行復制到當前行下面
  • :2m.將第二行移動到當前行下面

復制當前文件

:w newfile

全局替換內容

:%s/content_old/content_new/g

將 content_old 替換為 content_new

手動替換想要替換的內容

假設你想批量替換 contentcopy

你可以使用 :%s/content/copy/g命令,但是這樣會全部處理 content內容,我們像自定義要不要替換當前 content

使用 *符號

  1. 光標移動到文本 content
  2. 輸入 *,此時會選中所有 content
  3. 輸入 cw命令,會刪除 content并進入輸入模式
  4. 輸入 copy退出
  5. n進入下一個 content
  6. .重復操作

總結

通過實戰和理解上面的命令,你應該能夠解決在 Vim 中遇到的大部分常見場景。我使用 VSCode 和 Vim 插件,解決了一些 Vim 中較為復雜的命令,比如代碼格式化和保存等問題。

雖然我才剛從 JetBrains 全家桶遷移到 VSCode + Vim 編寫代碼的第三天,但我已經能夠想象使用 Vim 快捷操作行云流水寫代碼的場景了 😅 (一種遠古程序員的魅力 👻)

熟能生巧,堅持下去吧~

如果你想進一步了解 Vim,以下是一些有用的資料

  • Vim 中文文檔
  • 也可以參考下面的常用 Vim 命令總結

普通模式的常用命令

建議不要看 😅 用到再查,注重實戰!

光標移動命令

  • h:光標向左移動一個字符
  • j:光標向下移動一行
  • k:光標向上移動一行
  • l:光標向右移動一個字符
  • w:跳到下一個單詞的開頭
  • e:跳到當前或下一個單詞的結尾
  • b:跳到當前或上一個單詞的開頭
  • 0:跳到當前行的開頭
  • $:跳到當前行的末尾
  • gg:跳到文檔的開頭
  • G:跳到文檔的結尾
  • H:將屏幕頂部行與光標對齊
  • M:將屏幕中間行與光標對齊
  • L:將屏幕底部行與光標對齊
  • Ctrl-f:向下滾動一頁
  • Ctrl-b:向上滾動一頁
  • Ctrl-d:向下滾動半頁
  • Ctrl-u:向上滾動半頁

刪除命令

  • x:刪除當前光標所在的字符
  • dd:刪除當前行
  • d$:刪除從當前光標到行尾的內容
  • d0:刪除從當前光標到行首的內容
  • dw:刪除當前光標所在的單詞
  • dG:刪除從當前光標到文檔結尾的內容
  • dgg:刪除從當前光標到文檔開頭的內容

復制與粘貼命令

  • y:復制選中的文本(需要先進入可視模式)
  • yy:復制當前行
  • yw:復制當前單詞
  • y$:復制從光標到行尾的內容
  • p:將復制的內容粘貼到光標后
  • P:將復制的內容粘貼到光標前

替換命令

  • r<char>:將當前字符替換為指定字符
  • R:進入替換模式,連續替換字符直到按 Esc
  • u:撤銷上一個操作
  • Ctrl-r:重做撤銷的操作
  • .:重復上一個命令(如重復刪除、復制等)

查找與替換命令

  • /pattern:查找指定的 pattern(模式)
  • ?pattern:向上查找指定的 pattern
  • n:跳轉到下一個匹配的查找結果
  • N:跳轉到上一個匹配的查找結果
  • :%s/old/new/g:替換文檔中的所有 oldnew
  • :s/old/new/g:替換當前行中的所有 oldnew

其他常用命令

  • ::進入命令行模式,可以執行如保存、退出等命令
  • q:退出 Vim
  • :w:保存文件
  • :q:退出文件
  • :wq:保存并退出文件
  • :x:保存并退出文件(與 :wq 類似)
  • :e filename:打開另一個文件
  • :sp:水平分屏
  • :vsp:垂直分屏
  • :tabnew:打開新標簽頁

插入模式常用命令

進入插入模式的常用方式

  • i:在 光標前 進入插入模式
  • a:在 光標后 進入插入模式
  • I:在 當前行首 進入插入模式(非空字符前)
  • A:在 當前行尾 進入插入模式
  • o:在 當前行下方 插入新行并進入插入模式
  • O:在 當前行上方 插入新行并進入插入模式

插入模式下的常用操作

刪除字符:

  • Backspace:刪除光標前的字符
  • Ctrl-w:刪除光標前的一個單詞

撤銷和重做:

  • Ctrl-z:撤銷上一步操作
  • Ctrl-r:重做撤銷的操作

跳轉到行首和行尾:

  • Ctrl-a:將光標移到當前行的 開頭
  • Ctrl-e:將光標移到當前行的 末尾

光標控制:

  • Ctrl-f:向前移動一屏(相當于滾動一頁)
  • Ctrl-b:向后移動一屏
  • Ctrl-d:向下滾動半頁
  • Ctrl-u:向上滾動半頁

退出插入模式

  • Esc:退出插入模式,返回 普通模式

其他插入模式命令

  • Ctrl-h:刪除光標前的字符(類似 Backspace)
  • Ctrl-t:在當前光標位置插入一個制表符(Tab)
  • Ctrl-k:刪除光標后到下一個空白字符的內容(刪除單詞)

可視模式常用命令

進入可視模式

  • v:進入 字符可視模式,可以選擇一個字符并通過移動光標來擴展選擇區域
  • V:進入 行可視模式,可以選擇整個行并通過上下移動光標來擴展選擇區域
  • Ctrl-v:進入 塊可視模式,可以選擇一個矩形區域的文本塊,用于按列選擇文本

選擇范圍

  • j / k:在可視模式下,按 j 向下選擇一行,按 k 向上選擇一行
  • h / l:在可視模式下,按 h 向左選擇,按 l 向右選擇
  • w:按單詞選擇,跳到下一個單詞并選中
  • b:按單詞邊界選擇,跳到上一個單詞并選中
  • 0:將光標移動到行首,并開始選擇
  • $:將光標移動到行尾,并開始選擇

剪切和復制

  • d:剪切選中的內容并將其存入寄存器(類似刪除)
  • y:復制選中的內容并將其存入寄存器(類似復制)

粘貼

  • p:將剪切或復制的內容粘貼到光標 后面
  • P:將剪切或復制的內容粘貼到光標 前面

替換和刪除

  • r:替換當前選擇的字符。例如,按 r 后跟一個字符,會將選中的字符替換為該字符
  • D:刪除當前選中的文本直到行尾(相當于 d$
  • C:刪除當前選中的文本并進入插入模式(相當于 d 然后進入插入模式)

其他操作

  • >:將選中的文本縮進一個層級
  • <:將選中的文本取消縮進一個層級
  • =:自動調整選中文本的縮進

退出可視模式

  • Esc:退出可視模式,返回到普通模式

命令行模式常用命令

文件操作

  • :w:保存當前文件
  • :w filename:將當前文件保存為指定的文件名
  • :e filename:打開指定的文件
  • :q:退出 Vim(如果沒有未保存的更改)
  • :q!:強制退出 Vim,不保存更改
  • :wqZZ:保存并退出文件
  • :x:保存并退出文件(與 :wq 類似,但只有在有修改時才會保存)
  • :e!:重新加載當前文件,丟棄所有未保存的更改
  • :sp:split:水平分割當前窗口并打開一個新文件
  • :vsp:vsplit:垂直分割當前窗口并打開一個新文件
  • :close:關閉當前窗口
  • :only:關閉所有其他窗口,保留當前窗口

搜索與替換

  • :/pattern:在文件中向下搜索 pattern
  • :?pattern:在文件中向上搜索 pattern
  • n:跳到下一個匹配項
  • N:跳到上一個匹配項
  • :%s/old/new/g:在整個文件中替換 oldnew,并替換所有匹配項
  • :s/old/new/g:在當前行替換 oldnew,替換所有匹配項
  • :%s/old/new/gc:在整個文件中替換 oldnew,并在每個替換項時詢問確認
  • :s/old/new/c:在當前行替換 oldnew,并詢問是否替換

撤銷與重做

  • :undo:撤銷上一步操作
  • :redo:重做上一步撤銷的操作
  • :earlier:回到更早的編輯狀態,可以指定時間(例如::earlier 10m 返回 10 分鐘前的狀態)
  • :later:恢復到更晚的編輯狀態

查找與跳轉

  • :find filename:查找并打開指定文件
  • :locate pattern:查找文件系統中的文件(需要配置支持 locate 的環境)。
  • :tags:查看標簽文件
  • :tag tagname:跳轉到指定標簽的位置(通常與代碼導航相關)
  • :grep pattern:在多個文件中搜索 pattern(依賴于系統中的 grep 命令)

窗口管理

  • :windo command:在所有窗口中執行命令(例如,:windo %s/foo/bar/g 替換所有窗口中的 foobar
  • :resize:調整當前窗口的大小
  • :vertical resize:調整垂直分割窗口的大小

緩沖區與標簽

  • :ls:buffers:列出當前打開的所有緩沖區
  • :b buffer_number:切換到指定的緩沖區
  • :bnext:bn:切換到下一個緩沖區
  • :bprev:bp:切換到上一個緩沖區
  • :bdelete:bd:刪除當前緩沖區

宏與寄存器

  • q{register}:開始錄制宏,{register} 是你選擇的寄存器(例如:qa 錄制到寄存器 a
  • q:停止錄制宏
  • @{register}:執行宏,例如 @a 執行寄存器 a 中的宏
  • @@:重復上一次執行的宏

交互式命令與歷史

  • ::按 : 進入命令行模式
  • :history:查看命令歷史
  • q::打開命令歷史窗口,你可以選擇并運行歷史命令
  • Ctrl-fCtrl-b:在命令歷史中向前和向后瀏覽

系統命令

  • :!command:執行外部系統命令(例如,:!ls 列出當前目錄文件)
  • :sh:進入 shell 環境,在 Vim 中執行 shell 命令
  • :w !sudo tee %:使用 sudo 保存文件(常用于權限不足時保存文件)

退出 Vim

  • :qa:quitall:退出所有打開的文件
  • :qa!:強制退出所有文件,不保存任何更改

參考鏈接

  • 一起來說 Vim 語

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899287.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899287.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899287.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git入門——常用指令匯總

以下是一份精心整理的 Git常用指令速查表&#xff0c;基本覆蓋日常開發使用場景&#xff0c;建議收藏備用&#x1f447; &#x1f527; 環境配置 指令作用git config --global user.name "你的名字"設置全局用戶名git config --global user.email "你的郵箱&qu…

常見中間件漏洞攻略-Jboss篇

一、CVE-2015-7501-Jboss JMXInvokerServlet 反序列化漏洞 第一步&#xff1a;開啟靶場 第二步&#xff1a;訪問該接口&#xff0c;發現直接下載&#xff0c;說明接?開放&#xff0c;此接?存在反序列化漏洞 http://47.103.81.25:8080/invoker/JMXInvokerServlet 第三步&…

播放本地視頻-實現視頻畫廊功能

實現一個視頻畫廊&#xff0c;播放本地視頻 可以切換不同視頻的功能 文章目錄 需求&#xff1a;場景實現方案遇到的坑播放器選擇界面顯示不全視頻友好顯示問題緩存 總結 需求&#xff1a; 實現一個視頻畫廊&#xff0c;播放本地視頻 可以切換不同視頻的功能 場景 圖片畫廊的…

從零構建大語言模型全棧開發指南:第二部分:模型架構設計與實現-2.2.2文本生成邏輯:Top-k采樣與溫度控制

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 2.2.2 文本生成邏輯:Top-k采樣與溫度控制1. 文本生成的核心挑戰與數學框架1.1 自回歸生成的基本流程2. `Top-k`采樣原理與工程實現2.1 數學定義與算法流程2.2 PyTorch實現優化3. 溫度控制的數學本質與參…

為什么后端接口返回數字類型1.00前端會取到1?

這得從axios中得默認值說起&#xff1a; Axios 的 transformResponse axios 在接收到服務器的響應后&#xff0c;會通過一系列的轉換函數&#xff08;transformResponse&#xff09;來處理響應數據&#xff0c;使其適合在應用程序中使用。默認情況下&#xff0c;axios 的 tran…

【C++游戲引擎開發】《線性代數》(2):矩陣加減法與SIMD集成

一、矩陣加減法數學原理 1.1 定義 ?逐元素操作:運算僅針對相同位置的元素,不涉及矩陣乘法或行列變換。?交換律與結合律: 加法滿足交換律(A + B = B + A)和結合律( ( A + B ) + C = A + ( B + C ) )。 ?減法不滿足交換律(A ? B ≠ B ? A)。1.2 公式 ? C i j = …

openGauss關聯列數據類型不一致引起謂詞傳遞失敗

今天分享一個比較有意思的案例 注意&#xff1a;因為原始SQL很長&#xff0c;為了方便排版&#xff0c;簡化了SQL 下面SQL跑60秒才出結果&#xff0c;客戶請求優化 select dtcs.owner, dtcs.table_name, dtcs.column_name, dct.commentsfrom dba_tab_columns dtcsleft outer j…

01 相機標定與相機模型介紹

學完本文,您將了解不同相機模型分類、內參意義,及對應的應用代碼模型 標定的意義 建模三維世界點投影到二維圖像平面的過程。標定輸出的是相機模型。 相機模型 相機模型可以解理解為投影模型 +

Hyperlane:Rust Web開發的未來,釋放極致性能與簡潔之美

Hyperlane&#xff1a;Rust Web開發的未來&#xff0c;釋放極致性能與簡潔之美 你是否厭倦了復雜的Web框架&#xff0c;想要一個既高效又易用的工具來構建現代Web應用&#xff1f;Hyperlane正是你需要的答案&#xff01;作為專為Rust打造的輕量級、高性能HTTP服務器庫&#xf…

STM32學習筆記之振蕩器(原理篇)

&#x1f4e2;&#xff1a;如果你也對機器人、人工智能感興趣&#xff0c;看來我們志同道合? &#x1f4e2;&#xff1a;不妨瀏覽一下我的博客主頁【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸對你有幫助&#xff0c;可點贊 &#x1f44d;…

Stereolabs ZED Box Mini:機器人與自動化領域的人工智能視覺新選擇

在人工智能視覺技術快速發展的今天&#xff0c;其應用場景正在持續拓寬&#xff0c;從智能安防到工業自動化&#xff0c;從機器人技術到智能交通&#xff0c;各領域都在積極探索如何利用這一先進技術。而 Stereolabs 推出的ZED Box Mini&#xff0c;正是一款專為滿足這些多樣化…

K8S學習之基礎五十九:部署gitlab服務

部署gitlab docker pull gitlab/gitlab-ce:latest docker tag gitlab/gitlab-ce:latest 172.16.80.140/gitlab/gitlab-ce:latest docker push 172.16.80.140/gitlab/gitlab-ce:latest docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/…

多線程 --- 多線程編程

在寫代碼的時候&#xff0c;可以使用多進程進行并發編程&#xff08;在Java中&#xff0c;不太推薦&#xff0c;很多很多關于進程相關的API&#xff0c;在Java標準庫中&#xff0c;都沒有提供&#xff09;&#xff0c;也可以使用多線程進行并發編程&#xff08;系統提供了多線程…

HTML~視頻音頻在網頁中不能自動播放

問題&#xff1a; autoplay是打開自動播放&#xff0c;但是發現加了關鍵詞還是沒有反應 原因&#xff1a; 現在瀏覽器禁止自動播放&#xff08;特別是帶聲音的&#xff09; 解決辦法&#xff1a; 可以添加muted 進行沒有聲音的自動播放

vue中上傳接口file表單提交二進制文件流

1.使用elementui上傳組件 要做一個選擇文件后&#xff0c;先不上傳&#xff0c;等最后點擊確定后&#xff0c;把file二進制流及附加參數一起提交上去。 首先使用elementui中的上傳組件&#xff0c;設置auto-uploadfalse&#xff0c;也就是選擇文件后不立刻上傳。 <el-uplo…

Flutter環境配置

配置環境變量 PUB_HOSTED_URLhttps://pub.flutter-io.cnFLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn 這個命令是用來配置 Flutter 的鏡像源地址&#xff0c;主要是為了解決在中國大陸地區訪問 Flutter 官方資源較慢的問題。 具體的操作如下&#xff1a; 右鍵點…

ngx_http_index_set_index

定義在 src\http\modules\ngx_http_index_module.c static char * ngx_http_index_set_index(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {ngx_http_index_loc_conf_t *ilcf conf;ngx_str_t *value;ngx_uint_t i, n;ngx_http_inde…

數據庫的視圖有什么用?

數據庫的視圖&#xff08;View&#xff09;是一種虛擬表&#xff0c;它的內容由查詢定義&#xff0c;并不實際存儲數據&#xff0c;而是動態生成。視圖的主要作用如下&#xff1a; 1. 簡化復雜查詢 場景&#xff1a;當查詢涉及多表連接、復雜過濾或聚合操作時&#xff0c;SQL …

Ubuntu 24.04 安裝 Docker 詳細教程

前言 Docker 是目前最流行的容器化技術&#xff0c;它可以幫助開發者快速部署和運行應用程序。本文將詳細介紹在 Ubuntu 24.04 (Noble Numbat) 上安裝 Docker 的完整步驟&#xff0c;包括配置鏡像加速等實用技巧。 一、準備工作 1.1 系統要求 Ubuntu 24.04 LTS 具有 sudo 權…

鴻蒙進行視頻上傳,使用 request.uploadFile方法

一.拉起選擇器進行視頻選擇&#xff0c;并且創建文件名稱 async getPictureFromAlbum() {// 拉起相冊&#xff0c;選擇圖片let PhotoSelectOptions new photoAccessHelper.PhotoSelectOptions();PhotoSelectOptions.MIMEType photoAccessHelper.PhotoViewMIMETypes.VIDEO_TY…