使用 VIM 編輯器對文件進行編輯

一、VIM 的兩種狀態

VIM(vimsual)是 Linux/UNIX 系列 OS 中通用的全屏編輯器。vim 分為兩種狀態,即命令狀態編輯狀態,在命令狀態下,所鍵入的字符系統均作命令來處理;而編輯狀態則是用來編輯文本資料(類似 word)。

當進入 vim 時,會首先進入命令狀態。在命令狀態下,輸入 i(插入)或 a(添加)可以進入編輯狀態(左下角有 - - INSERT - -,或者 - - 插入 - - 代表處于編輯狀態);在編輯狀態下,按 Esc 鍵進入命令狀態。

在命令狀態下,有如下一些常用命令:

  • 新增:
    a :從光標后面開始添加文本
    A :從光標所在行的末尾開始添加文本

  • 插入:
    i :從光標前面開始插入文本
    I :從光標所在行的開始處插入文本

注意

當需要編輯一個名為 file 的文件時,輸入 vim file 命令并進入編輯狀態時,出現 “- - 插入 - - W10:警告:正在修改一個只讀文件” ,該如何處理?

① 查看 file 文件的權限:ls -l ,發現沒有寫權限

② 進入 root 用戶,給 file 文件添加寫權限:su and chmod a+w file ,此時再執行 ls -l 命令,可以發現 file 文件有了寫權限

此時再 vim file 并編輯,就不會出現上述問題了。

二、VIM 的常用命令操作(類似快捷鍵)

以下操作均在 “命令狀態” 下進行

1. 刪除與修改

1)刪除

  • x :刪除光標處的字符

  • dd :刪除光標所在的整行

  • [n]dd :刪除光標所在行以及下面的 n-1 行(刪除 n 行)

  • D :刪除光標到行尾的文本,常用語刪除注釋語句(d$)

2)修改

  • yy :復制光標所在的整行

  • [n]yy :從光標開始往下復制 n 行,[n] 表示一個整數

  • p :將復制后的文本粘貼到光標所在的下一行

  • u :撤銷上次操作

  • Ctrl r :恢復上次操作

  • 快捷修改單個字母: 先按 r 鍵,再輸入要替換的內容

2. 光標移動

  • ^ :光標移動到行首

  • $ :光標移動到行尾

  • gg :光標定位到文檔頭

  • G :光標定位到文檔尾

  • [n]G :光標定位到第 n 行行首,[n] 表示一個整數,比如 20G
    也可以通過冒號 + 數字來定位到第幾行,比如 :20

較不常用:

  • H :光標定位到當前頁首

  • L :光標定位到當前頁的最后一行的行首

  • w :光標往后移一個字 / 單詞

  • b :光標往前移一個字 / 單詞

3. 查找與替換

1)查找

/[str] :用來查找字符串 str ,[str] 表示要查找的字符串。回車后會加亮顯示所有找到的字符串,輸入 n 移動到下一個找到的字符串,輸入 Ctrl n(即 N)移動到上一個找到的字符串。

例如:vim ~/.bashrc ,然后輸入 /alias ,輸入 n 向下翻,輸入 N 向上翻。

2)替換

部分替換

: s/[src]/[dst](只能替換光標所在的行)

例如:若要將光標所在行的 hello little dog 替換成 hello little cat ,則輸入 : s/dog/cat

  • /i :忽略大小寫

  • /g :全部匹配

例如:若要將 1-6 行的 hello 或 Hello 替換成 good ,則輸入 :1,6 s/hello/good/ig

全部替換

:%s/[src]/[dst]/g :將文檔中所有 src 的字符串替換為 dst 字符串

例如:若要將文檔中所有的 hello 替換成 good ,則輸入 :%s/hello/good/g

:%s/^ //g :將文檔每一行的行首的空格去掉,想去掉幾個空格,就在 ^ 與 // 之間打幾個空格。

4. 塊操作

v :可視化塊選擇狀態,頁面底部會出現 “- - 可視 - -” 的字樣,選中塊之后,可以對塊進行刪除(d),復制(y),剪切(x)

Ctrl + v :豎向選擇模式,頁面底部會出現 “- - 可視 塊 - -” 的字樣

1)批量刪除

假設你想刪除多行文本開頭的字符,可以按以下步驟操作:

  • 將光標放在要刪除的字符上,按下 Ctrl + v 進入塊模式。

  • 移動光標選擇要操作的行。

  • 按下 d 鍵刪除選中的字符

2)批量插入

如果你想在多行文本的開頭插入相同的內容,可以按以下步驟操作:

  • 按下 Ctrl + v 進入塊模式,選擇要操作的行。

  • 按下大寫 I 鍵(即 Shift + i),進入插入模式。

  • 輸入你想要插入的內容,例如批量注釋代碼就輸入 “//” 。

  • 按下 Esc 鍵退出插入模式,插入的內容會應用到所有選中的行

3)塊內替換

Vim 還支持在塊內進行替換操作。例如,你可以使用 %V 進行塊內替換:

  • 按下 Ctrl + v 選擇要替換的塊。

  • 按下 : 進入命令模式。

  • 輸入 s/%V[舊文本]/[新文本]/g,然后按下回車鍵

4)塊復制和粘貼

你可以使用塊模式復制和粘貼文本:

  • 按下 Ctrl + v 選擇要復制的塊。

  • 按下 y 鍵復制選中的內容。

  • 移動光標到目標位置,按下 p 鍵粘貼內容

5)塊刪除和剪切

塊刪除和剪切操作類似:

  • 按下 Ctrl + v 選擇要刪除或剪切的塊。

  • 按下 d 鍵刪除選中的內容,或按下 x 鍵剪切選中的內容

6)塊覆蓋

塊覆蓋指的是在一個地方通過塊復制或塊剪切方式得到塊的副本,然后在另一個地方再次塊選擇一個塊的方位,按下 p 鍵,即可實現用塊內容覆蓋目標塊。

5. 文檔保存及退出

結束編輯,按 Esc 鍵進入命令狀態。

  • :q :在未修改文檔的情況下退出

  • :q! :放棄文檔的修改,強行退出

  • :w :文檔存盤

  • :wq or :x :文檔存盤退出

需要注意:此時的鍵盤需要是英文的,冒號和感嘆號必須是英文冒號和感嘆號。

6. vim 的配置

放置 .vimrc 到 ~ 目錄下:vim ~/.vimrc ,然后將下列指令放置在文件內:

set nu
set cursorline
set hlsearch
set tabstop=4
set fileencodings=utf-8,gbk,gb2312
  • set nu :顯示行號

  • set cursorline :加一條橫線

  • set hlsearch :搜索時高亮

  • set tabstop=4 :Tab 鍵是 4 個空格

  • set fileencodings=utf-8,gbk,gb2312 :設置編碼

注意:用 vim 編輯文件時,使用的注釋符號是一個雙引號 " 。

7. 其他

1)Ctrl+s

如果在編輯過程中不小心按了 Ctrl+s ,vim 會處于僵死狀態(被凍結),此時按 Ctrl+q 可以恢復。

2)Ctrl+z

在命令狀態時,按了 Ctrl+z ,此時會出現如下所示的情況:

輸入查看系統內所有進程的命令:ps -elf ,可以發現該進程雖然已經暫停,但仍占據內存空間

輸入殺死進程的命令:kill -9 2823 ,然后再查看系統內所有進程:ps -elf ,可以發現進程已被殺死

若此時再輸入命令:vim file1 ,會出現下圖所示的情況:

可以選擇恢復:按下 R 鍵,如果不想下次打開仍出現上述情況,則按下 D 鍵刪除交換文件。

3)了解

  • 在命令模式中輸入 :help :查看該命令的幫助提示(不常用,通過 :q 進行退出)

  • 在命令模式中輸入 :%!xxd :進入十六進制模式

  • 在命令模式中輸入 :%!xxd -r :返回文本模式

  • 在命令模式中輸入 gg=G 可以自動對齊,可以通過輸入 gg=10gg 只自動對齊第一行到第十行

  • 增加一個橫向的 vim :在命令模式下執行 :sp or :new [文件名] ;增加一個縱向的 vim :在命令模式下執行 :vsp or :vnew [文件名](按 Ctrl+w 切換光標的區域,按 :q 退出)

  • 定位到 file 的第 3 行:執行 vim +3 file

  • 定位到第一個 hello 處:執行 vim +/hello file

三、VIM 外使用到的命令

1. 管道查找替換程序 sed

舉例:

1)將家目錄下所有的 py 文件中的 function 替換成 case :find . -name “*.py” | xargs sed -i ‘s/function/case/g’

利用 find . -name “*.py” | xargs grep case 可以看出已經修改成功。

2)將 hello.py 中的 function 替換成 case 并重定向輸出到 hello_new.py 中:sed ‘s/function/case/g’ hello.py > hello_new.py

2. vimdiff 命令

vimdiff 命令是 Vim 編輯器 的 diff 模式,用于比較和合并文件。它等同于 vim -d 命令,可以同時打開多個文件,并高亮顯示文件中內容的差異部分。

1)啟動 vimdiff

vimdiff hello.py hello_new.py or vim -d hello.py hello_new.py

這會在 Vim 編輯器中垂直分割窗口,分別顯示兩個文件,并用不同的背景色高亮顯示差異部分。

2)光標移動

在 vimdiff 模式下,可以使用以下快捷鍵在差異點之間移動光標:

  • ]c :跳轉到下一個差異點

  • [c :跳轉到上一個差異點

  • 要在兩個窗口之間切換光標,可以使用以下按鍵:
    Ctrl-w l :切換到右側窗口
    Ctrl-w h :切換到左側窗口
    Ctrl-w w :在兩個窗口間切換

3)內容合并

vimdiff 提供了方便的命令來合并文件內容:

  • dp(diff put):將當前差異點的內容覆蓋到另一文件中的對應位置

  • do(diff obtain):將另一窗口中差異點的內容拉取到當前位置并進行替換

4)同時操作兩個文件

在 vimdiff 模式下,可以使用 Vim 編輯器的命令和快捷鍵來操作文件:

  • :qa :退出所有文件

  • :wa :保存所有文件

  • :wqa :保存并退出所有文件

  • :qa! :強制退出(不保存)所有文件

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

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

相關文章

GaussDB回調機制深度實踐:從事件驅動到系統集成

GaussDB回調機制深度實踐:從事件驅動到系統集成 一、回調機制核心概念 回調類型矩陣 二、核心實現技術棧 觸發器回調開發 sql -- 創建審計觸發器回調 CREATE OR REPLACE FUNCTION audit_trigger() RETURNS TRIGGER AS $$ BEGININSERT INTO audit_log (operati…

AI小白:AI算法中常用的數學函數

文章目錄 一、激活函數1. Sigmoid2. ReLU(Rectified Linear Unit)3. Tanh(雙曲正切)4. Softmax示例代碼:激活函數的實現 二、損失函數1. 均方誤差(MSE)2. 交叉熵損失(Cross-Entropy&…

idea 打不開terminal

IDEA更新到2024.3后Terminal終端打不開的問題_idea terminal打不開-CSDN博客

Python代碼list列表的使用和常用方法及增刪改查

Python代碼list列表的使用和常用方法及增刪改查 提示:幫幫志會陸續更新非常多的IT技術知識,希望分享的內容對您有用。本章分享的是Python基礎語法。前后每一小節的內容是存在的有:學習and理解的關聯性,希望對您有用~ python語法-p…

Open CASCADE學習|讀取點集擬合樣條曲線(續)

問題 上一篇文章已經實現了樣條曲線擬合,但是仍存在問題,Tolerance過大擬合成直線了,Tolerance過大頭尾波浪形。 正確改進方案 1?? 核心參數優化 通過調整以下參數控制曲線平滑度: Standard_Integer DegMin 3; // 最低階…

Python基礎知識點(列表與字典)

列表list[] # list [12,34,56,78] # print(list) """ 1.list可以保存同一類型的數據 或 不同類型的數據 2.list是有序的,所以可以通過[下標]訪問元素 3.list保存重復的值 4.list是可變的,可以添加 刪除元素 """ …

在 Elasticsearch 中使用 Amazon Nova 模型

作者:來自 Elastic Andre Luiz 了解如何在 Elasticsearch 中使用 Amazon Nova 系列模型。 在本文中,我們將討論 Amazon 的 AI 模型家族——Amazon Nova,并學習如何將其與 Elasticsearch 結合使用。 關于 Amazon Nova Amazon Nova 是 Amazon …

MySQL8.0.40編譯安裝(Mysql8.0.40 Compilation and Installation)

MySQL8.0.40編譯安裝 近期MySQL發布了8.0.40版本,與之前的版本相比,部分依賴包發生了變化,因此重新編譯一版,也便于大家參考。 1. 下載源碼 選擇對應的版本、選擇源碼、操作系統 如果沒有登錄或者沒有MySQL官網賬號&#xff0…

python中pyside6多個py文件生成exe

網上見到的教程大多數都是pyinstaller安裝單個py文件,針對多個py文件的打包,鮮有人提及;有也是部分全而多的解釋,讓人目不暇接,本次記錄自己設置一個聲波捕捉界面的打包過程。 1.pycharm中調用pyinstaller打包 參考鏈接:https://blog.csdn.net/weixin_45793544/articl…

Java中使用Function Call實現AI大模型與業務系統的集成?

這個理念實際上很早就出現了,只不過早期的模型推理理解能力比較差,用戶理解深度預測不夠,現在每天的迭代有了改進,逐步引入到我們本身的業務系統,讓AI大模型集成進來管理自身業務功能。當然現在也不是一個什么難事了。…

id 屬性自動創建 js 全局變量

給一個元素設置 id 屬性&#xff0c;它會在 js 中創建全局變量&#xff0c;如 <div class"test" click"test" id"idTest">test</div>test() {console.log(idTest:, window.idTest) }.test {height: 50px;width: 200px;background-c…

Android SELinux權限使用

Android SELinux權限使用 一、SELinux開關 adb在線修改seLinux(也可以改配置文件徹底關閉) $ getenforce; //獲取當前seLinux狀態,Enforcing(表示已打開),Permissive(表示已關閉) $ setenforce 1; //打開seLinux $ setenforce 0; //關閉seLinux二、命令查看sel…

【R語言繪圖】圈圖繪制代碼

繪制代碼 rm(list ls())# 加載必要包 library(data.table) library(circlize) library(ComplexHeatmap) library(rtracklayer) library(GenomicRanges) library(BSgenome) library(GenomicFeatures) library(dplyr)### 數據準備階段 ### # 1. 讀取染色體長度信息 df <- re…

vim 編輯器 使用教程

Vim是一款強大的文本&#xff08;代碼&#xff09;編輯器&#xff0c;它是由Bram Moolenaar于1991年開發完成。它的前身是Bill Joy開發的vi。名字的意義是Vi IMproved。 打開vim&#xff0c;直接在命令行輸入vim即可&#xff0c;或者vim <filename>. Vim分為四種模式&a…

C++20新增內容

C20 是 C 語言的一次重大更新&#xff0c;它引入了許多新特性&#xff0c;使代碼更現代化、簡潔且高效。以下是 C20 的主要新增內容&#xff1a; 1. 概念&#xff08;Concepts&#xff09; 概念用于約束模板參數&#xff0c;使模板編程更加直觀和安全。 #include <concept…

C++中常用的十大排序方法之4——希爾排序

成長路上不孤單&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【&#x1f60a;///計算機愛好者&#x1f60a;///持續分享所學&#x1f60a;///如有需要歡迎收藏轉發///&#x1f60a;】 今日分享關于C中常用的排序方法之4——希爾排序的相…

詳細描述以太坊的gas、gaslimit、gasPrice

目錄 一、Gas 是什么? ? 簡要定義: ?? 舉例理解: 二、Gas Limit 是什么? ? 簡要定義: 分兩種: 舉例說明: 三、Gas Price 是什么? ? 簡要定義: 為什么它重要? 示例: 四、 EIP-1559 后的新機制(倫敦升級) 三個要素: 五、額外技巧(開發實用) 本文…

全國大學生數學建模競賽賽題深度分析報告(2010-2024)

全國大學生數學建模競賽賽題深度分析報告&#xff08;2010-2024&#xff09; 全國大學生數學建模競賽(CUMCM)是中國最具影響力的大學生科技競賽之一&#xff0c;本報告將對2010-2024年間的賽題進行全面統計分析&#xff0c;包括題目類型、領域分布、模型方法等多個維度&#x…

從獎勵到最優決策:動作價值函數與價值學習

從獎勵到最優決策&#xff1a;動作價值函數與價值學習 價值學習一、動作價值函數對 U t U_t Ut?求期望得到動作價值函數動作價值函數的意義最優動作價值函數(Optimal Action-Value Function)如何理解 Q ? Q^* Q?函數 二、價值學習的基本思想Deep Q-Network(DQN)DQN玩游戲的具…

智能手表該存什么音頻和文本?場景化存儲指南

文章目錄 為什么需要“場景化存儲”&#xff1f;智能手表的定位手機替代不了的場景碎片化的場景存儲 音頻篇&#xff1a;智能手表該存什么音樂和音頻&#xff1f;運動場景通勤場景健康場景 文本篇&#xff1a;哪些文字信息值得放進手表&#xff1f;&#xff08;部分情況可使用圖…