“Writing English words and writing code are very different activities. When programming, you spend more time switching files, reading, navigating, and editing code compared to writing a long stream.”
—— < The Missing Semester of Your CS Education >
Vim
是一個模態編輯器(modal editor),它的設計哲學是:編輯操作應當通過鍵盤組合完成,而非依賴鼠標或菜單。
“Vim avoids the use of the mouse, because it’s too slow; Vim even avoids using the arrow keys because it requires too much movement.”
—— < The Missing Semester of Your CS Education >
Vim
認為使用鼠標浪費時間,會降低效率,因為手從鼠標移動到鍵盤需要一定時間,對程序員來說反復來回的切換是很annoying
的。因此,所有的vim
功能都可以通過鍵盤操作,或許一開始你并不習慣,但等你使用久了,便能發現它得到程序員青睞的原因!
課程相關視頻與講義:Editors (Vim)
核心特性
普通模式
:用于導航和操作文本(默認模式)插入模式
:像常規編輯器一樣輸入文本(按i
進入)可視模式
:選擇文本塊(按v
進入)命令行模式
:執行保存/退出等命令(按:
進入)
基礎操作
使用 Vim
時會經常使用<ESC>
鍵,而它不在主鍵盤區,顯然不那么方便,于是很多程序員考慮將 Caps Lock
重新映射到 Escape
或使用簡單的鍵序列創建替代映射!
模式切換
操作 | 功能 |
---|---|
vim | 進入vim編輯器 |
vim 文件名 | 打開特定文件(不存在時會新建) |
i (insert ) | 進入插入模式 |
Esc | 返回普通模式 |
: | 進入命令行模式 |
光標移動
操作 | 功能 |
---|---|
h j k l | 左/下/上/右移動 |
0 | 移動到行首 |
$ | 移動到行尾 |
^ | 移動到行首非空字符 |
G | 移動到文件底部 |
gg | 移動到文件頂部 |
H | 移動到窗口頂部 |
L | 移動到窗口底部 |
Ctrl+u | 上翻半頁 |
Ctrl+d | 下翻半頁 |
Ctrl+b | 上翻整頁 |
Ctrl+f | 下翻整頁 |
編輯功能
文本操作
操作 | 功能 |
---|---|
o | 下方新建行并插入 |
O | 上方新建行并插入 |
u | 撤銷 |
Ctrl+r | 重做 |
x | 刪除字符 |
dw | 刪除單詞 |
dd | 刪除整行 |
cc | 刪除并進入插入模式 |
復制粘貼
操作 | 功能 |
---|---|
y (yank ) | 復制 |
yy | 復制當前行 |
yw | 復制單詞 |
p (paste ) | 粘貼 |
可視化模式
操作 | 功能 | 說明 |
---|---|---|
v | 字符可視化 | 按字符選擇 |
V | 行可視化 | 按行選擇 |
Ctrl+v | 塊可視化 | 矩形選擇 |
高級功能
搜索與替換
操作 | 功能 |
---|---|
f+字符 | 向前查找字符 |
F+字符 | 向后查找字符 |
~ | 大小寫轉換 |
批量操作
數字+指令
可以進行批量化操作
4j #向下移動4行 3ee #選擇3個單詞 7dw #刪除7個單詞
文件操作
保存與退出
操作 | 功能 |
---|---|
:w (write ) | 保存文件 |
:q (quit ) | 退出 |
:qa (all ) | 退出所有窗口 |
:wq | 保存并退出 |
實戰演示
學習了上面那么多的指令不妨自己創建一個python
文件,結合之前學習的shell
命令,在實踐中感受Vim
的魅力吧!
import sys #導入sys來接受shell中的參數def fizz_buzz(limit):for i in range(1, limit + 1):if i % 3 != 0 and i % 5 != 0:print(i)elif i % 3 == 0 and i % 5 != 0:print('fizz')elif i % 5 == 0 and i % 3 != 0:print('buzz')else:print('fizzbuzz')def main():fizz_buzz(int(sys.argv[1]))if __name__=='__main__':main()
$ python3 fizzbuzz.py 30
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
fizzbuzz
16
17
fizz
19
buzz
fizz
22
23
fizz
buzz
26
fizz
28
29
fizzbuzz