知識點
- . 重復前一次命令
- N 重復某個命令N次
- 鍵入:或/后,按上下箭頭選擇歷史命令
- 自動提示:insert模式 和
-
qa…錄制宏a,@a使用宏a,@@使用最新的宏
在一個只有一行且這一行只有“1”的文本中,鍵入如下命令: qa Yp <C-a> q qa 開始錄制 Yp 復制行 <C-a> 增加1 q 停止錄制 @a 在1下面寫下2 @@ 在2下面寫下3 100@@ 創建新的100行,並把數據增加到103
文件命令
vim file1 file2 file3 ... 同時打開多個文件
:open file 窗口打開新文件 :split file 新窗口打開文件 :bn 切換到下一個文件 :bp 切換到上一個文件 :args 查看當前打開的文件列表,當前正在編輯的文件會用[]括起來 :e ftp://192.168.10.76/abc.txt 打開遠程文件,比如ftp或者share folder :e <path/to/file> 打開新文件 :saveas <path/to/file> 另存為
移動命令
h 左移一個字符
l 右移一個字符
k 上移一個字符
j 下移一個字符
w 向后移動一個單詞(光標停在單詞首部)
b 向前移動一個單詞(光標停在單詞首部)
e 向后移動一個單詞(光標停在單詞尾部)
ge 前后移動一個單詞(光標停在單詞尾部)
^ 到行頭非空白字符
0 到行頭 $ 到行尾 3$ 移動到下面3行的行尾 g_ 到行尾非空白字符 t, 到逗號前的第一個字符 fa 到下一個為a的字符處 3fa 到下第3個為a的字符處 F/T 和f/t方向相反 gg 移動到文件頭 G 移動到文件尾 :n nG ngg 跳到指定n行 Ctrl + e 向下滾動一行 Ctrl + y 向上滾動一行 Ctrl + d 向下滾動半屏 Ctrl + u 向上滾動半屏 Ctrl + f 向下滾動一屏 Ctrl + b 向上滾動一屏
導航命令
% 括號匹配
插入命令
i 在當前位置生前插入 I 在當前行首插入 a 在當前位置后插入 A 在當前行尾插入 o 在當前行之后插入一行 O 在當前行之前插入一行 cw 替換從光標所在位置后到一個單詞結尾的字符
查找命令
/text 查找text,n下一個,N前一個
?text 查找text,反向查找,n下一個,N前一個
* /查找當前單詞
# ?查找當前單詞 :set ignorecase 忽略大小寫的查找 :set noignorecase 不忽略大小寫的查找 :set hlsearch 高亮搜索結果,所有結果都高亮顯示,而不是只顯示一個匹配 :set nohlsearch 關閉高亮搜索顯示 :nohlsearch 關閉當前的高亮顯示,如果再次搜索或者按下n或N鍵,則會再次高亮 :set incsearch 逐步搜索模式,對當前鍵入的字符進行搜索而不必等待鍵入完成 :set wrapscan 重新搜索,在搜索到文件頭或尾時,返回繼續搜索,默認開啟 特殊字符查找時需要轉義 .*[]^%/?~$
替換命令
ra 將當前字符替換為a,當期字符即光標所在字符。
:s/old/new/ 用old替換new,替換當前行的第一個匹配 :s/old/new/g 用old替換new,替換當前行的所有匹配 :%s/old/new/ 用old替換new,替換所有行的第一個匹配 :%s/old/new/g 用old替換new,替換整個文件的所有匹配 :10,20 s/^/ /g 在第10行知第20行每行前面加四個空格,用於縮進 3,5 s/^/#/g 注釋第3-5行 3,5 s/^#//g 解除3-5行的注釋 1,$ s/^/#/g 注釋整個文檔 :%s/^/#/g 注釋整個文檔 gU 變大寫 gu 變小寫
撤銷與重做
u 撤銷(Undo) U 撤銷對整行的操作 Ctrl + r 重做(Redo),即撤銷的撤銷
刪除命令
x dl 刪除當前字符 X dh 刪除當前字符的前一個字符 D d$ 刪除當前字符至行尾 dj 刪除當前行和上一行 dd 刪除當前行 dk 刪除當前行和下一行 10d 刪除當前行開始的10行 dgg 刪除當前行之前所有行(包括當前行) dG 刪除當前行之后所有行(包括當前行) dt" 刪除當前光標與"之間的內容 :1,10d 刪除1-10行 :11,$d 刪除11行及以后所有的行 :1,$d 刪除所有行 J 合並兩行
拷貝/剪切/粘貼
yy 拷貝當前行
nyy 拷貝當前后開始的n行
x X 剪切字符
dd 剪切當前行
ndd 剪切當前后開始的n行
p 在當前光標后粘貼
P 在當前行前粘貼
:1,10 co 20 將1-10行插入到第20行之后 :1,$ co $ 將整個文件復制一份並添加到文件尾部 :1,10d 1-10行剪切 :1, 10 m 20 將第1-10行移動到第20行之后
退出命令
:wq 保存並退出 ZZ 保存並退出 :q! 強制退出並忽略所有更改 :e! 放棄所有修改,並打開原來文件
窗口命令
:split file或:new file 用新窗口打開文件
split打開的窗口都是橫向的,使用vsplit可以縱向打開窗口
Ctrl+ww 移動到下一個窗口
Ctrl+wj 移動到下方的窗口
Ctrl+wk 移動到上方的窗口
<C-w>_ 或 <C-w>| 最大化尺寸 <C-w>+ 或 <C-w>- 增減尺寸 :close 關閉窗口 :only 關閉除當前窗口外窗口
執行shell命令
:!command :!ls 列出當前目錄下文件 :!perl -c script.pl 檢查perl腳本語法,可以不用退出vim,非常方便 :!perl script.pl 執行perl腳本,可以不用退出vim,非常方便 :suspend或Ctrl+Z 掛起vim,回到shell,按fg可以返回vim
其他
:set ruler? 查看是否設置了ruler,在.vimrc中,使用set命令設制的選項都可以通過這個命令查看 :scriptnames 查看vim腳本文件的位置,比如.vimrc文件,語法文件及plugin等 :set list 顯示非打印字符,如tab,空格,行尾等。 如果tab無法顯示,請確定用set lcs=tab:>-命令設置了.vimrc文件,並確保你的文件中的確有tab,如果開啟了expendtab,那么tab將被擴展為空格
進階操作1
<start position><command><end position> 例如 0y$ 命令意味着: 0 先到行頭 y 從這里開始拷貝 $ 拷貝到本行最后一個字符 ye 從當前位置拷貝到本單詞的最后一個字符 y2/foo 拷貝2個 “foo” 之間的字符串
進階操作2
<action>a<object> 和 <action>i<object>
action可以是任何的命令,如 d (刪除), y (拷貝), v (可以視模式選擇)。
object 可能是: w 一個單詞, W 一個以空格為分隔的單詞, s 一個句字, p 一個段落。也可以是一個特別的字符:"、 '、 )、 }、 ] 假設你有一個字符串 (map (+) ("foo")).而光標鍵在第一個 o 的位置。 vi" 會選擇 foo. va" 會選擇 "foo" vi) 會選擇 "foo" va) 會選擇("foo") v2i) 會選擇 map (+) ("foo") v2a) 會選擇 (map (+) ("foo"))
進階操作3
塊操作 v,V,<C-v> 1、在選中行頭添加(多行注釋) 0 <C-v> <C-d> I 字符 [ESC] ^0 到行頭 <C-v> 塊操作 <C-d> 向下移動 (你也可以使用hjkl來移動光標,或是使用%等) I 字符 [ESC] I是插入,插入字符,ESC鍵生效 2、在選中行尾添加 <C-v> <C-d> A-- [ESC] <C-v> <C-d> 選中相關的行 (可使用j或是/pattern或是%等) $ 到行最后 A 字符 [ESC] 3、選中后還可以 J 把所有的行連接起來(變成一行) < 或 > 左右縮進 = 自動給縮進