vi命令使用詳解

来源:https://www.cnblogs.com/technicianafei/archive/2023/06/19/17491251.html
-Advertisement-
Play Games

# vi命令使用詳解 ### 1. 三種工作模式 1. 命令模式:通過**命令**對文件進行常規操作 * 打開文件時進入命令模式 **(vi的入口)** * 通過命令對文件進行常規操作,如定位、翻頁、複製、粘貼、刪除等在圖形界面下通過滑鼠或快捷鍵實現的的操作 2. 末行模式:執行**保存、退出**等 ...


vi命令使用詳解

1. 三種工作模式

  1. 命令模式:通過命令對文件進行常規操作
  • 打開文件時進入命令模式 (vi的入口)
  • 通過命令對文件進行常規操作,如定位、翻頁、複製、粘貼、刪除等在圖形界面下通過滑鼠或快捷鍵實現的的操作
  1. 末行模式:執行保存、退出等操作
  • 若要退出vi返回控制台,需在末行模式下輸入命令 (vi的出口)
  1. 編輯模式:正常編輯文字

三種模式的轉換:
命令模式->編輯模式: i;編輯模式->命令模式:Esc
命令模式->末行模式: :;末行模式->命令模式:Esc

關閉文件:
末行模式下,輸入wq(即保存後退出)

除了i進入編輯模式外,還提供了以下命令:

命令 英文 功能 常用
i insert 在當前字元前插入文本 常用
I insert 在行首插入文本 較常用
a append 在當前字元後添加文本 \
A append 在行末添加文本 較常用
o \ 在當前行後面插入一空行 常用
O \ 在當前行前面插入一空行 常用

2. 末行模式命令

命令 英文 功能
w write 保存
q quit 退出,如果沒有保存,不允許退出
q! quit 強行退出,不保存退出
wq write&quit 保存並退出
x \ 保存並退出

3. 命令模式命令

  1. 上、下、左、右(因為大佬認為應該把手指集中在一個區域)
命令 功能 手指
h 向左 食指
j 向下 食指
k 向上 中指
t 向右 無名指
  1. 行內移動
命令 英文 功能
w word 向後移動一個單詞
b back 向前移動一個單詞
0 \ 行首
^ \ 行首,第一個不是空白字元的位置
$ \ 行尾
  1. 行數移動
命令 英文 功能
gg go 文件頂部
G go 文件末尾
數字gg go 移動到數字對應行數
數字G go 移動到數字對應行數
:數字 \ 移動到數字對應行數
  1. 屏幕移動
命令 英文 功能
Ctrl+b back 向上翻頁
Ctrl+f forward 向下翻頁
H Head 屏幕頂部
M Middle 屏幕中間
L Low 屏幕底部
  1. 段落移動
  • vi中使用空行來區分段落
  • 在程式開發中,通常一段功能相關的代碼會寫在一起(之間沒有空行)
命令 功能
{ 上一段
} 下一段
  1. 括弧切換
命令 功能
% 括弧匹配及切換
  1. 標記
  • 在開發時,某一塊代碼可能需要稍後處理,此時先使用m增加一個標記,可以在需要時快速地跳轉回來
  • 標記名稱可以是a~zA~Z之間地任意一個字母
  • 添加了標記的行如果被刪除,標記同時被刪除
  • 如果在其他行添加了相同標記名稱的標記,之前添加的標記會被替換
命令 英文 功能
mx mark 添加標記x
'x \ 直接定位到標記所在位置
  1. 選中文本(可視模式)
命令 模式 功能
v 可視模式 從游標位置開始按照正常模式選擇文本
V 可視行模式 選中游標經過的完整行
Ctrl+v 可視塊模式 垂直方向選中文本
  • Esc可以放棄選中,回到命令模式
  • 視模式下,可以和移動命令連用,例如:ggVG能過選中所有內容
  1. 撤銷和恢復撤銷
命令 英文 功能
u undo 撤銷上次命令
Ctrl+r redo 恢復撤銷的命令
  1. 刪除文本
命令 英文 功能
x cut 刪除游標所在字元
d(移動命令) delete 刪除移動命令對應的內容
dd delete 刪除游標所在行,可以ndd複製多行
D delete 刪除至行尾
  • 如果使用可視模式已選中了一段文本,dx都可以刪除選中文本
  • 命令dx類似與圖形界面的剪切操作(Ctrl+x)

刪除命令可以和移動命令連用,以下是常見的組合:

  • dw從游標位置刪除到單詞末尾
  • d0從游標位置刪除到一行的起始位置
  • d}從游標位置刪除到段亂結尾
  • ndd從游標位置向下連續刪除n行
  • d代碼行G從游標所在行刪除到指定代碼行之間的所有代碼
  • d‘a從游標所在行刪除到標記a之間的所有代碼
  1. 複製粘貼
命令 英文 功能
y(移動命令) copy 複製
yy copy 複製一行,可以nyy複製多行
p paste 粘貼
  • vi中的文本緩衝區和系統的剪貼板不是同一個(即在其他軟體中使用Ctrl+c複製的內容,不能再vi中通過p粘貼)
  • 可以在編輯模式下使用滑鼠右鍵粘貼
  1. 替換
命令 英文 功能 工作模式
r replace 替換當前字元 命令模式
R replace 替換當前行游標後的字元 替換模式
  • R可以進入替換模式,替換完成後,按Esc可以返回命令模式
  • 替換命令的作用就是不用進入編輯模式,對文件進行輕量級的修改
  1. 縮排和重覆執行
命令 功能
>> 向右增加縮進
<< 向左增加縮進
. 重覆上次命令
  • 縮排命令在開發程式時,統一增加代碼的縮進比較有用
  • 在可是模式下,縮排命令只需要使用一個><
  1. 查找

常規查找

命令 功能
/str 查找str
n 查找下一個
N 查找上一個
  • 如果不想看到高亮現實,可以隨便查找一個文件中不存在的內容即可

單詞快速匹配

命令 功能
* 向後查找當前游標所在單詞
# 向前查找當前游標所在單詞
  1. 查找並替換

​ 需要在末行模式下執行:%s///g

​ a. 全局替換

:%s/舊文本/新文本/g

​ b. 可視區域替換

​ 先選中要替換文字的範圍

:%s/舊文本/新文本/g

​ c. 確認替換

:%s/舊文本/新文本/gc

​ 會出現提示:

y-yes 替換
n-no 不替換
a-all 替換所有
q-quit 退出替換
l-last 最後一個,並把游標移動到行首
^E 向下滾屏
^Y 向上滾屏

4. 拓展

  1. 連續輸入N個同樣的字元

​ 例如:輸入10個*

​ a. 命令模式下,輸入10

​ b. i進入編輯模式

​ c. 輸入*

​ d. Esc返回命令模式

  1. 末行命令拓展
命令 英文 功能
:e. edit 會打開內置的文件瀏覽器,瀏覽當前目錄下的文件
:n 文件名 new 新建文件
:w. 文件名 write 另存為,但是仍然編輯當前文件,並不會切換文件

切換文件之前,必須保證當前這個文件已經被保存!

  1. 分屏命令
命令 英文 功能
:sp[文件名] split 橫向增加分屏
:vsp[文件名] verdical split 豎向增加分屏

切換分屏視窗都是基於Ctrl+w這個快捷鍵,w對應的英文如下:

命令 英文 功能
w window 切換到下一個視窗
r reverse 互換視窗
c close 關閉當前視窗,但是不能關閉最後一個視窗
q quit 退出當前視窗,如果是最後一個視窗,則關閉vi
o other 關閉其他視窗

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • `NumPy`(Numerical Python)是一個`Python`庫,主要用於高效地處理多維數組和矩陣計算。它是科學計算領域中使用最廣泛的一個庫。 在`NumPy`中,**數組**是最核心的概念,用於存儲和操作數據。 `NumPy`數組是一種多維數組對象,可以存儲相同類型的元素,它支持高效的數 ...
  • 一、簡介 官網: https://spring.io/projects/spring-framework#overview 官方下載工具: https://repo.spring.io/release/org/springframework/spring/ github下載: https://git ...
  • # 頁面預覽 ## 預約掛號 - 根據預約周期,展示可預約日期,根據有號、無號、約滿等狀態展示不同顏色,以示區分 - 可預約最後一個日期為即將放號日期 - 選擇一個日期展示當天可預約列表 ![image-20230227202834422](https://s2.loli.net/2023/06/1 ...
  • # 一、緒論 ## 1.1 基本概念 1. 加速比:表示加速效果。單個處理器運行花費時間 / P個處理器運行花費時間;$S=\frac{T(1)}{T(p)}$ 2. 效率:$E = \frac{S}{p} = \frac{T(1)}{T(p)\times p}$ 3. 開銷:$C=T(p)\tim ...
  • 1、簡介 SiftingAppender 可根據給定的運行時屬性將日誌分離或篩選。例如,SiftingAppender 可以根據用戶會話將日誌事件分開,以便不同用戶生成的日誌進入不同的日誌文件,每個用戶一個日誌文件。SiftingAppender 有兩個屬性: timeout SiftingAppe ...
  • 這一次咱們來探究一下怎麼用純代碼寫 WPF 模板。模板有個共同基類 FrameworkTemplate,數據模板、控制項模板等是從此類派生的,因此,該類已定義了一些通用成員。 用代碼構建模板,重要的成員是 VisualTree 屬性,它的類型是 FrameworkElementFactory。可見,模 ...
  • ## 前言 使用 ABP vNext(下文簡稱 ABP)時,通常都是從 cli 開始新建模板,從一個空項目開始。對已經存續的項目來說,現有的數據,特別是用戶等核心數據需要進行遷移。 老的項目,隨著規模越來越大,每次修改都需要更改非常多地方,最重要的是,共用資料庫使得維護起來需要小心翼翼。為了後續維護 ...
  • Getting started | Prometheus Configuration | Prometheus Download | Prometheus Download Grafana | Grafana Labs # prometheusmkdir -m=777 -p /data/{downl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...