編輯器之神-vim的使用

来源:https://www.cnblogs.com/yifchan/archive/2019/04/19/linux-1-1.html
-Advertisement-
Play Games

編輯器之神-vim,在Linux下編輯代碼的vim的使用,基本上包括了vim的常用各種命令,vi的三種模式,編輯保存,複製粘貼,查找替換,移動跳轉,撤銷反撤銷等等 ...


vim即vi的升級版;在linux中,vi是vim的軟鏈接,我們敲vi和vim出來的都是vim;

純手打,如有錯誤,敬請指出。

vi的三種模式及簡單使用

vi三種模式

命令模式(預設):是文件的入口,可以實現文件的定位,複製,翻頁等;

末行模式:是文件的出口,w write,q quit,wq 寫入並保存等;

編輯模式:正常的文字編輯;

 

三種模式的轉換

命令模式—>i,a,o,I,A,O—>編輯模式—>esc—>命令模式
命令模式—>”:”—>末行模式—>esc—>命令模式

 

vi的簡單使用

vi 已有文件:打開已存在的文件;
vi 不存在文件:新建文件;

vi 文件:打開文件,游標在行首;
vi 文件 +:打開文件,文件在末尾;
vi 文件 +行數:打開文件,並且指定行數;

例如:

vi hello.py  # 打開hello文件
vi hello.py +20  # 打開hello文件並且把游標跳到第20行
vi hello.py +  # 打開hello文件並且游標跳到最後一行

 

異常處理之交換文件

如果我們在vi編輯文件時,忽然關閉終端,或者異常卡出,就會出現交換文件,用ls -al可查看,存在.swp結尾的交換文件;
出現交換文件後,再一次vi 原來的文件時,就會報錯,我們按照提示D刪除交換文件即可;

 

命令模式轉編輯模式

命令模式下:

 

i 插入游標前一個字元
I 插入行首
a 插入游標後一個字元
A 插入行末
o  向下新開一行,插入行首
O 向上新開一行,插入行首

 

保存退出編輯

在命令模式下保存,shift+z+z
末行模式下:

w 保存
q 退出
wq 保存退出
x 保存退出
q! 不保存強制退出

 

 

vim移動,跳轉

上下左右移動

命令模式:

k 上移
j 下移
h 左移
l 右移


hjkl控制上下作用

 

行內移動

命令模式下:

0:到達行首
^:到達行首第一個不是空白字元的位置
$:到達行尾
w:word,往後移一個word
b:back,往前移一個word

 

行數移動

命令模式下:

gg:快速移動到文件的第一行
G:快速移動到文件最後一行
num gg:快速跳轉到指定行
num G:快速跳轉到指定行

末行模式下:
:num 回車:在末行模式下跳轉到指定行
其中用的最多的還是num G

 

上下翻頁

Ctrl+b:向上翻一頁
Ctrl+f:向下翻一頁

Ctr-d: 向下翻半屏
Ctr-u: 向上翻半屏
H:跳轉到屏幕頂部
M:跳轉到屏幕中間
L:跳轉到屏幕底部
註意HML跳轉的是屏幕,不是文件

 

其他跳轉

{: 按段移動,上移
}: 按段移動,下移

%:移到括弧的左右邊

 

複製,粘貼,刪除(剪切)

複製粘貼

命令模式下:

y:和移動命令一起使用,複製
yy:複製一行,支持nyy複製多行
p 粘貼

 

刪除(剪切)

命令模式下:
x: 刪除游標後一個字元,相當於 Del
X: 刪除游標前一個字元,相當於 Backspace
dd: 剪切游標所在行,n dd 刪除指定的行數

d:和移動命令配合使用,刪除移動命令對應的內容;

D: 刪除游標後本行所有內容,包含游標所在字元;

d0: 刪除游標前本行所有內容,不包含游標所在字元;

dw: 將游標移到單詞首字母,再dw,可刪除單詞

 

練習:

5x:刪除游標及往後五個字元
v+%+x:刪除選中的括弧內的內容
d+6+G:把游標所在行和第六行之間的內容全部刪除,所在行能大於6也能小於6
y+{ +n+G+p:複製從游標往後的一段內容,並跳到指定行進行粘貼
yy空行+5+p:複製空行,並且粘貼5個空行

 

複製刪除總結和擴展

d和x在vi中看起來是刪除操作,但本質上其實是剪切操作,剪切後會將內容存放在和剪切板功能相同的緩衝區;
同樣,複製其實也是將內容放在緩衝區;
註意,在其他圖形界面複製的內容在vi中不能直接通過p進行粘貼,需要右鍵粘貼,因為剪切板和緩衝區不是同一個;

 

可視模式(選中文本)

在命令模式下,
v,可視模式,從游標選中位置,開始向上向下選中文本,選中的位置,是原來游標的位置;
V,可視行模式,從游標選中行開始,向上或向下選中游標所經過的每一行;
Ctrl+v,可視塊模式,垂直方向選中文本,和sublime的ctrl很像,具體可自己實驗;

 

可視模式可以配合 d, y, >>, << 實現對文本塊的刪除,複製,左右移動

可視模式還可以和段落移動等結合使用,例如:

V+G,表示選中從當前行一直到末行

V+gg,表示選中從當前行到文件首行,

V+{,

V+},

v+%,括弧等等。

 

替換和查找

小幅替換

命令模式下:

r:將游標下的字元進行替換;例如,r+H:將那個游標下的字元替換成H

R: 替換當前行游標後的字元;例如,hello單詞首字母,R+world:將hello單詞替換成world;

 

全局替換

末行模式下,

固定格式:%s///g
格式:%s/舊文本/新文本/g
例如:

把python全部替換成world:%s/python/world/g

將第一行至第10行之間的abc替換成123:1, 10s/abc/123/g

 

可視區域替換

先用可視模式選中要替換的範圍,再進入末行模式進行替換
格式:s/舊文本/新文本/g
V+向下移動游標到第11行+:進入末行模式+s/world/python/g:將當前行到第11行的所有world替換成python

 

確認替換

格式:%s/舊文本/新文本/gc
會查找出全部的舊文本,然後逐個的讓你來確認是否替換,替換y,不替換n,替換所有a,不想替換了就q

 

查找

命令模式下:

/+str:查找指定字元串
n:查找下一個被高亮的字元串
N:查找上一個被高亮的字元串
單詞快速匹配:
*:向後查找當前游標所在單詞
#:向前查找當前游標所在單詞
不想高亮,可以查找一個不存在的單詞即可

 

其他必知必會

撤銷反撤銷

命令模式下:
u 撤銷
ctl+r 反撤銷

 

文本行移動(縮排)

命令模式下:
>>: 文本行右移
<<: 文本行左移

練習:

V+向下三行+>:將選中的三行向右縮進四個空格,同理,左縮進也是
V+向下三行+>+.+.:將選中的三行向右縮進四個空格後,再右移四格,再右移四格,即一個點就重覆執行一次

 

重覆執行

命令模式下:
.: 重覆上一次操作的命令

 

標記

當我們在開發時,如果有某一行需要稍後再來處理,可以先對它進行標記,後面需要處理時再進行快速跳轉
標記:m+x (x屬於[a-z][A-Z])
跳轉:'+x
可以分別標記多行為多個別名,再跳轉;
如果給多行用了同一個別名,那麼別名指向的是最新的一行

 

vim里執行 shell 下命令

末行模式里輸入!,後面跟命令

 

末行命令擴展

e .:瀏覽當前目錄下的所有文件
e 文件名:切換編輯文件
n 文件名:新建並編輯文件
w 文件名:如果原來沒有文件,就創建新文件並將源文件的內容寫入新文件,但編輯的還是源文件
切換文件之前,必須保存原來編寫的文件

末行模式下w命令的作用講解:
在實際開發時,用來起階段性備份的作用,和git的作用類似

 

分屏命令

末行模式下,
sp:橫向分屏
vsp:縱向分屏
切換視窗:Ctrl+w,w
互換視窗:r
關閉當前視窗:c,但是不能關閉最後一個視窗
退出當前視窗:q,能退出最後一個視窗
關閉其他視窗:o

 

練習

1.連續打出十個*

命令模式,10+i+*+esc;後面也可以加.,重覆執行;
8+i+print("hello world")+enter+esc:重覆8行代碼;
但建議在進入編輯模式之前,不要按數字,不然按了數字編輯了又esc了,就發現辛苦敲得代碼粘貼了很多。

2.給多行代碼添加註釋

命令模式,將游標移動到要註釋的第一行,^移動到行首,

Ctrl+v進入可視塊模式,向下選中多行要註釋的代碼,
I進入編輯模式,在行首添加#,esc。

 


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

-Advertisement-
Play Games
更多相關文章
  • 前言 之前繼續在學習多線程方面的知識,忽然這兩天看到博問中有個園友問到如何在.net core類庫中讀取配置文件,當時一下蒙了,這個提的多好,我居然不知道,於是這兩天瞭解了相關內容才有此篇博客的出現,正常來講我們在應用程式目錄下有個appsettings.json文件對於相關配置都會放在這個json ...
  • 第一篇:https://www.cnblogs.com/zgqys1980/p/4047315.html; 第二篇:https://www.cnblogs.com/shenbing/p/5394228.html 第三篇:https://blog.csdn.net/ydm19891101/articl ...
  • 1. 啟動應用程式日誌配置 修改Program.cs,在WebHostBuilder構建時配置日誌 public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(ar ...
  • list : ls 目錄: 文件,路徑映射. ls : -l : lang 長格式, 顯示完整信息. 文件類型: -: 普通文件(f) d: 目錄文件 b: 塊設備文件(block) c: 字塊設備文件(charact) l: 符號鏈接文件(symbolic link file) p: 命令管道文件 ...
  • echo:列印,或者直接輸出指定的字元串 語法:echo (選項) (參數) 選項:/a: 發出警告聲 /b: 刪除前一個字元 /c: 最後不加上換行符號 /f: 換行但游標仍舊停留在原來的位置 /n: 換行且游標移至行首 /r: 游標移至行首,但不換行 /t: 插入tab /v: 與\f相同 // ...
  • fsck 檢查並修複文件系統中的錯誤,即針對有問題的系統或磁碟進行修複,類似的命令還有e2fsck,修複前有以下要求: 1)文件系統必須是卸載狀態 2)不要對正常的分區使用fsck,不加參數的情況下,相當於fsck -As的功能 -a # 自動修複文件系統,不詢問任何問題 -s # 按順序檢查多個文 ...
  • 初識分散式文件系統FastDFS… 1.分散式與集群的區別 區別:集群是個物理形態,分散式是個工作方式。只要是一堆機器,就可以叫集群,他們是不是一起協作著幹活,這個誰也不知道;一個程式或系統,只要運行在不同的機器上,就可以叫分散式,一般系統現在都是前後端分離,C/S架構、B/S架構,一般服務端部署在 ...
  • fdisk 常用的磁碟分區工具,受mbr分區表的限制,只能給小於2TB的磁碟劃分分區,如果使用fdisk對大於2TB的磁碟進行分區,雖然可以分區,但只能識別2T的空間,一般使用parted分區工具 -l # 顯示所有磁碟分區信息 Device # 分區名稱 Boot # 啟動分區,用*表示的是啟動分 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...