📖vim 基本用法
要想學會 vim 先要學會進入與退出它
📃進入 vim
首先要保證自己的 Linux 中已經安裝好了 vim (云服務器大多數都是出廠就安裝好了),如果沒有安裝,需要在 root 用戶下通過指令 yum install -y vim 安裝。
安裝好 vim 后,可以直接使用,不過現在的 vim 只是一個草坯房,比較簡陋。
如果已經創建好了文件,假設為 test.c ,那么我們可以直接通過 vim test.c 打開這個文件,如果文件不存在,那么vim 也可以根據提供的文件名,創建一個文件并打開。
打開后的?vim
?長這個樣子
其中一條條波浪線表示現在沒有內容,此時我們輸入字符會發現并不會有字符被寫入,因為現在處于命令模式,顧名思義,就是只能輸入命令的模式,如果想輸入內容,需要先進入插入模式,單按?i
?即可進入插入模式
📃退出 vim
當我們編輯好內容后,想退出?vim
?會發現退出不了
這是一個經典問題,官方解釋如下:插入模式無法直接退出?vim
?,需要先進入命令模式,然后再切換為底行模式,輸入?wq
?才能保存內容并退出?vim
1、esc //從插入模式切換為命令模式
2、: //進入底行模式
3、wq //保存并退出 vim
不難發現,退出?vim
?是一件比較麻煩的事,這也難怪它會成為困擾幾百萬初學者的問題?
📖vim 常用模式
vim 有很多種模式,不過常用的就 3 ~ 5 種,下面來介紹 vim 的五種常用模式
📃命令模式
命令模式是進入 vim 后的模式模式,也是 vim 中最根本的模式 ,在 vim 中,如果不知道自己現在處于什么模式下,可以無腦按 esc ,這樣會切換至最開始的命令模式
命令模式下主要是以命令輸入為主,這也是 vim 中指令最多的模式,下文會介紹的
📃插入模式
插入模式即編輯模式,在插入模式中,鍵盤的功能就是輸入內容,各種指令不在生效 ,我們編輯內容是在插入模式中進行的,vim 模式支持語法高亮,前提是文件的后綴要與代碼內容匹配
進入插入模式的方法:
通過 Ins 鍵切換
通過 i 切換,切換后光標停留在原位
通過 a 切換,切換后光標會回退一格
通過 o 切換,切換后會新起一行
進入方式有很多,一般是通過 i 直接切換
📃底行模式
底行模式比較特殊,是否進入底行模式的標志為 vim 下方是否有 : 如果有,說明現在處于底行模式,底行模式中也有很多指令,常見的如 set nu 為 vim 設置行號,w 保存內容,q 退出 vim
注意:如果發現自己退不出 vim ,可以通過 !wq 強制保存并退出,再退不出說明權限不足
📃替換模式
替換模式主要用于對文本內容的修改,可以通過 R 進入替換模式,進入后 vim 左下角提示 REPLACE 說明進入成功,進入替換模式后,從鍵盤輸入的內容會實時替換光標處的內容
想退出替換模式可通過 esc 切換成命令模式
📃視圖模式
視圖模式就是用來看文檔內容的,可以通過 v 進入逐字符視圖模式 VISUAL 此時默認選擇當前光標處字符;也可以通過 V 進入逐行視圖模式 VISUAL LINE ,此時就是默認選擇光標處整行
視圖模式主要是用來快速瀏覽文本的
各種模式間的關系如下圖所示:
📖vim 指令集
vim
?中有各種各樣的命令,下面就來介紹介紹比較常用的指令
注意:?下面介紹的指令,大多數都是在命令模式下執行的,部分指令是在底行模式下進行,會有特別說明的,比如第一條指令?set nu
?設置行號
📃set nu 設置行號
底行模式下
這條指令比較重要,因為它可以幫我們把行號設置出來,這樣可以讓我們的編輯器更好看
注意:?如果是未配置過的?vim
?,設置行號退出后,再次打開?vim
?需要重新設置,比較麻煩
//底行模式下
:set nu //設置行號,set nonu是取消設置行號
📃yy 復制
在 VS 中,復制一行代碼是?ctrl+c
,而在?vim
?中可以直接通過?yy
?復制一行
除了復制一行外,yy
?還可以配合數字,復制?n
?行
- 比如?
10yy
?可以復制當前光標以下十行內容
//命令模式下
yy //復制當前光標處整行內容
nyy //復制當前光標往下 n 行內容
📃dd 剪切
除了可以復制內容,還可以剪切內容,VS 下是 ctrl+x ,比較麻煩,vim 中只需要 dd 即可剪切當前光標處的整行內容
dd 也可以配合數字,剪切 n 行內容,比如 5dd 會剪切當前光標往下五行內容
小技巧
我們可以通過剪切,變相實現內容的刪除,剪切完不拷貝就是刪除了😀😀
//命令模式下
dd //剪切當前光標處整行內容
ndd //剪切當前光標往下 n 行內容
?📃p 粘貼
關于之前復制和剪切的內容,可以通過?p
?來進行粘貼,單按?p
?粘貼一次,配合數字,可以將已復制或剪切的內容,粘貼?n
?次
//命令模式下
p //粘貼一次已復制或剪切的內容
np //粘貼 n 次
📃u 撤銷
vim
?中也有后悔藥,只要當前文件還沒有離開過?vim
?都可以進行撤銷操作,具體實現為?u
//命令模式下
u //撤銷操作
?📃ctrl + r 重做
如果對已撤銷的步驟不滿意,還可以通過?ctrl+r
?進行重做,回退至為撤銷前的狀態,其實?vim
?中的?p
?和?ctrl+r
?相當于VS中的?ctrl+z
?和?ctrl+y
?,即撤銷與重做。
//命令模式下
ctrl+r //重做,撤銷已撤銷的步驟
📃G 移至文檔尾
在命令模式下,我們是不能對文檔進行插入操作的,假設文檔很長,而我們想看看文檔尾的內容,那么我們可以通過?G
?直接跳轉至文檔尾進行查看
G
?可以配合數字,具體功能為跳轉至指定?n
?行,假設該行不存在,那么就會跳轉至最后一行。
//命令模式下
G //跳轉至文檔尾
nG //跳轉至第 n 行
📃gg 移至文檔頭
這個相當于?G
?的親兄弟,不過?gg
?是跳轉至文檔頭
gg
?也可以配合數字進行隨機行的跳轉
//命令模式下
gg //跳轉至文檔頭
ngg //進行隨機行的跳轉
📃$ 移至當前行尾
美元符號?$
?可以使光標跳轉至當前行尾
配合數字,往下跳轉至第?n
?行的行尾
//命令模式下
$ //跳轉至行尾
n$ //向下跳轉至第 n 行的行尾
📃^ 移至當前行頭
它和?$
?是一對,別人是跳轉至行尾,^是跳轉至行頭,它不可以配合數字
注:$
?和?^
?均在鍵盤上方的數字區,$
?為?shift+4
?,^?為?shift+6
?,有點奇怪,明明?$
?在左邊,卻是移動到左邊(行尾)😀,可能大佬的鍵盤跟我們的不一樣?
//命令模式下
^ //跳轉至行頭
📃w / b 向后 / 前移動
前面的 $ 和 ^ 是以行為單位,直接跳轉至行尾或行頭,而 w 或 b 是以單詞為單位,進行前后移動,w 是向前移動,b 是向后移動,這個東西對英文比較友好,畢竟是別人設計的,實測如果是中文的話,會以符號為單位進行移動,如果中間摻雜單詞,則會移動至單詞處
當然,這個移動也支持配合數字進行移動:
//命令模式下
w //以單詞為單位向后移動
b //以單詞為單位向前移動
nw / nb //移動 n 個單詞位
📃~ 大小寫切換
將光標處的字母進行大小寫切換,如果一直按照不放,那么會一直往下進行大小寫切換
配合數字,將光標后?n
?個字母進行大小寫切換。
//命令模式下
~ //將光標處的字母進行大小寫切換
📃r 替換字符
~
?是進行大小寫切換,r
?則是進行字符替換,先按?r
?觸發替換,然后輸入待替換字符,輸入完成后,光標處字符就會被替換
配合數字,將光標往后?n
?個字符全部替換為待替換字符
//命令模式下
r //進行字符替換,默認替換當前光標處字符
nr //替換當前光標往后 n 個字符
📃R 替換模式
r
?只能用于逐字符的替換,如果涉及修改的字符過多,且都為不同值時,需要進入替換模式,單按?R
?進入替換模式,此時輸入的字符會實時替換光標處的字符,換句話說,現在能夠直接替換單詞
如果想退出替換模式,按?esc
?切換為命令模式就行了
//命令模式下
R //進入替換模式
📃x 從右至左刪除
刪除當前光標處字符,如果是?x
?刪除的就是光標右邊的字符,即從右至左刪除
配合數字,刪除光標右邊?n
?個字符
//命令模式下
x //刪除當光標右邊的字符
nx //刪除光標右邊 n 個字符
📃h j k l 光標移動
在命令模式下,我們可以直接通過方向鍵進行移動,也可以通過 h j k l 這個四個鍵進行移動,不過位置對應比較奇怪
h 向左移動,巧計 h 位于這四個鍵的最左邊
j 向下移動,巧計 j 為 jump ,站在懸崖邊往下跳就是向下移動
k 向上移動,巧計 k 為 king ,國王,至高無上,就是向上移動
l 向右移動,巧計 l 在最右邊。
📃/ 單詞 搜索單詞
底行模式下
我們可以在底行模式下,搜索文本內的單詞,假設我們想搜索?Hello
?這個單詞,只需要先進入底行模式,輸入?/Hello
?就可以在文本中查找單詞了
📃!常規命令 執行指令
這個指令就比較厲害了,它可以讓我們在不退出 vim 的情況下,執行各種指令
比如我們在 vim 中編寫了一個C程序 test.c,保存后,通過指令 :!gcc test.c 可以直接將 test.c 文件編譯并鏈接生成可執行文件,然后再通過 :!./a.out 執行這個程序,執行結束后,返回 vim 的界面。
?注意:?底行模式中的?!
?還有強制的意思,當我們?wq
?退不出文件時,可以通過?!wq
?強制退出并保存文件
//底行模式下
:!內容 //在文檔中搜索指定內容
📃vs file 分屏操作
我們在寫一個程序時,常常會有幾個文件,比如數據結構中的二叉樹,會有兩個 .c 一個 .h ,顯然此時一個窗口是不夠我們用的,因此 vim 支持多開窗口,指令為 :vs file 新起一個窗口,打開文件 file ,如果文件不存在,會新建一個
注意: 窗口理論上來說可以開辟無數個,但如果開的多了,是非常不好操作的,如果你用的是一塊橫放的帶魚屏,因此我們一般只會打開2~3個窗口使用。窗口可以有很多個,但光標永遠只有一個,當打開新窗口時,光標也會跟著過去,如果想實現光標在不同窗口間的切換,只需要使用 ctrl+ww 即按住 ctrl 的同時快速點擊 w 兩次
//底行模式
:vs file //打開新文件,呈分屏狀態
:ctrl+ww //實現光標在不同窗口間的移動
📖?插入注釋
(1)首先按鍵盤上的ESC進入命令行模式
(2)再按Ctrl+V進入VISUAL BLOCK模式
(3)利用上下左右鍵調整需要注釋多少行以及行的寬度
(4)再按Shift+i或s進入插入模式
(5)輸入代表注釋的符號,比如#
(6)再次按ESC鍵,這時就可完成多行注釋
第3后,可以按下x鍵,刪除選中的目標,達到了取消注釋的效果。
?📖vim 配置
前面說過,默認的 vim 就像一個草坯房,能用,但很不好用,連個基本的行號都需要自己手動開啟,不過沒事,vim 可以讓我們對其進行裝修,即配置 vim ,配置好的 vim ,不僅有行號,還有煥然一新的界面,括號自動補全,語法提示等功能,總之用起來很爽就對了
📃自己配置
自己配置 vim ,需要在自己的 ~ 目錄下創建 .vimrc 這個文件,然后進入文件輸入配置選項進行配置,保存并退出即可,配置在保存后會立即生效
部分配置選項
set nu 設置行號
set autoindent 自動縮進
set cursorline 突出顯示當前行
還有很多很多選項,可以自己去網上搜索
注意: 是在自己的 ~ 路徑下創建 .vimrc 文件,這個配置只對當前用戶生效,推薦這樣做,畢竟是屬于自己的個性化設置。
📃自動化配置
很多人可能不想折騰,想直接使用別人配置好的文件,當然可以,我們可以通過指令下載別人已經寫好的腳本,然后等待腳本運行完成后,我們就得到了一個十分精美的?vim
?
于自動安裝的方法
首先需要復制這串指令 curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
然后進入自己的賬戶,輸入指令,此時提示輸入 root 密碼,因為安裝需要借助 root 權限
密碼輸入后慢慢等待安裝就行了,時間有點長,慢慢等待即可
如果安裝過程中卡住了,可以通過 ctrl+c 強制終止,然后重新安裝