OS version: Ubuntu 18.04 LTS
Vim version: 8.0.1453
1、開篇
上一節我們瞭解了Vim的模式以及基本的操作,相信大家已經對Vim有了一些基本的瞭解。接下來我將繼續詳細的學習Vim模式中普通模式,以及具體的使用場景。
(最新版)Vim手冊中文版8.2可以通過下面的地址下載。
reference-2.3.0.pdf(https://sourceforge.net/projects/vimcdoc)
2、普通模式(normal mode)
普通模式的強大的功能體現在文本編輯上,在上一節我們簡單的介紹了操作符,動作命令,文本對象和重複。
除了上述功能以外呢,還有計數我們沒有講。接下來我們就從沒有講的計數開始講起。
2.1、批量操作(count)
在Vim中,在操作符前指定次數後,可以重複執行命令。
:h count
========================================================================
[count] 可選的數值,可用在命令前以重複該命令。在沒有特殊說明的情況下,
如果省略該數值,會認爲該數值是 1。
========================================================================
5p
:就是將複製的內容進行粘貼5次。等同於ppppp
。Y3p
:複製當前行,然後粘貼3次。等同於yyppp
。
2.2、動作(motion)
分組 | 動作 | 說明 | 動作 | 說明 |
---|---|---|---|---|
行移動 | 0 (零) | 移動到行的第一個字符(包含空白字符) | $ | 移動到行尾(給出 [count],則爲[count-1] 行) |
^ | 移動到行的第一個非空白字符 | g_ | 移動到行尾的非空字符(給出 [count],則爲[count-1] 行) | |
字符移動 | f{char} | 向右搜索並把光標停在目標上 | F{char} | f{char}的逆向 |
t{char} | 向右搜索並把光標停在目標前 | T{char} | t{char}的逆向 | |
; | 重複上次的 f、t、F 或者 T 命令 [count] 次 | , | 反方向重複上次的 f、t、F 或者 T 命令 [count] 次 | |
文件移動 | G | 到第 [count] 行,缺省是文件的最後一行 | gg | 到第 [count] 行,缺省是文件的第一行 |
單詞移動 | w | 移動到下一個單詞的開頭 | W | 移動到下一個字串(忽略標點)的開頭 |
b | 向前移動到單詞的開頭 | B | 向前移動到字串(忽略標點)的開頭 | |
e | 向後移動到單詞的末尾 | E | 向後移動到字串(忽略標點)的末尾 | |
段落移動 | } | 移動到下一個段落 | { | 移動到前一個段落 |
記號移動 | % | 對應記號的移動(默認是([{}])) | [count]go | 移動到文件的第 [count] 個字節 |
除了上面介紹的以外,讀者朋友還可以通過下面的幫助文檔繼續學習相關內容。
幫助 | 說明 |
---|---|
:h left-right-motions | 左右移動 |
:h up-down-motions | 上下移動 |
:h word-motions | 單詞單位移動 |
:h object-motions | 文本對象單位移動 |
2.3、操作符(operator)
分組 | 操作符 | 說明 | 使用例 |
---|---|---|---|
編輯 | y | 複製 | y4j (抽出5行)→P (粘貼) |
d | 刪除 | →d4j (刪除5行) |
|
c | 修改 | →c4j (刪除5行切換到插入模式) |
|
大小寫轉換 | gU | 轉成大寫 | gUw (把小寫的單詞轉成大寫的) |
gu | 轉成小寫 | →guW (把單詞轉成小寫的) |
|
g~ | 切換大小寫 | →g~W (小寫單詞轉換成大寫的)→g~W (大寫的單詞變成小寫的) |
|
縮進 | > | 增加一個縮進 | >4j (5行向右增加一個縮進)→>G (到文件結束部分增加一個縮進) |
< | 減少一個縮進 | →<4j (5行向左減少一個縮進) |
|
摺疊 | zf | 創建摺疊 | zf3j (摺疊4行)→zfG (摺疊到文件結束) |
zd | 刪除摺疊 | ||
za | 打開摺疊 | ||
zn | 所有的摺疊被打開 |
如果動作包括一個次數而操作符之前也有一個的話,兩者相乘。因此,“2d3w” 刪除六個單詞。
2.4、文本對象(objects)
按照以下規則去記憶,會幫助您快速記憶下面的命令。
i
表示選擇不包括標籤、符號等內部內容。a
表示選擇包含標籤、符號等全部內容。
首先按下v
進入視窗模式,然後輸入文本對象選擇命令,最後按下ESC
回到初始的普通模式。
文本對象 | 說明 |
---|---|
iw | 選擇不包含空白字符的word |
aw | 選擇包含空白字符的word |
ip | 選擇段落的內部內容(不包括段落結束的換行符) |
ap | 選擇段落 |
i] | 選擇[ ] 區塊的內部 |
a] | 選擇[ ] 區塊的全體 |
i) | 選擇() 區塊的內部 |
a) | 選擇() 區塊的全體 |
i> | 選擇<> 區塊的內部 |
a> | 選擇<> 區塊的全體 |
i” | 選擇"" 區塊的內部 |
a” | 選擇"" 區塊的全體 |
i’ | 選擇'' 區塊的內部 |
a’ | 選擇'' 區塊的全體 |
it | 選擇html、xml標籤的內部 |
at | 選擇html、xml標籤的全體 |
2.5、 重複
.
命令可以重複執行最後一次的修改。
2.6、 其他
操作 | 說明 | 操作 | 說明 |
---|---|---|---|
u | 撤銷 [count] 次更改(undo) | Ctrl-r | 重做 [count] 次被撤銷的更改(redo) |
Ctrl-u | 向上滾動半個屏幕 | Ctrl-d | 向下滾動半個屏幕 |
Ctrl-o | 轉到跳轉表裏第 [count] 個較舊的光標位置 | Ctrl-i | 轉到跳轉表裏第 [count] 個較新的光標位置 |
~ | 切換光標下字符的大小寫 | ||
* | 光標下單詞的正向檢索。 | # | 光標下單詞的反向檢索。 |
n | 將上次的 “/” 或 “?” 重複 [count] 次。 | N | 將上次的 “/” 或 “?” 在相反方向上重複 [count] 次 |
D | 刪除從光標到 [count]-1 行的行尾。 | C | 刪除從光標到 [count]-1 行的行尾,並切換到插入模式 |
S | 刪除 [count] 行,並切換到插入模式 | s | 刪除 [count] 個字符,並切換到插入模式 |
r{char} | 把光標下的字符換成 {char} | ||
Ctrl-a | 把當前光標之上或之後的數值或者字母加上 [count] | Ctrl-x | 把當前光標之上或之後的數值或者字母減去 [count] |
>> | 當前行增加一個縮進 | << | 當前行減少一個縮進 |
J | 連接 [count] 行,但至少包含兩行。刪除縮進,插入不多於兩個的空格 | gJ | 連接 [count] 行,但至少包含兩行。不插入或刪除任何空格。 |
2、結尾
普通模式還有很多的功能,本文介紹的部分只是其中的一小部分,但這就能顯著提高您的文本編輯效率。
當讀者朋友不滿足於本文中所介紹的功能的時候,讀者朋友可以通過查閱幫助文檔,得到想要的答案。