注:本文為過去的 “vim 使用筆記”。
跳轉命令
跳轉命令
#
:向前查找光標當前所在單詞,并跳轉到該單詞的上一個出現位置。*
:向后查找光標當前所在單詞,并跳轉到該單詞的下一個出現位置。
行內跳轉
0
:跳轉到當前行的行首。 [Home]$
:跳轉到當前行的行尾。 [End]^
:跳轉到當前行的第一個非空字符處。g_
:跳轉到行尾最后一個非空白字符。|n
:跳轉到當前行的第 n 列(例如:|10
跳轉到第 10 列)。
文件內跳轉
gg
:跳轉到文件第一行的行首。G
:跳轉到文件最后一行的行首。G$
:跳轉到文件最后一行的行尾。 [Ctrl + End]:line-number
或:n
:跳轉到指定行號的行(例如::100
跳轉到第 100 行)。nG
:跳轉到文件的第 n 行(例如:20G
跳轉到文件的第 20 行)。/{pattern}
:跳轉到第一個與{pattern}
匹配的位置。
屏幕跳轉
H
:跳轉到屏幕的最上方一行的第一個字符。M
:跳轉到屏幕的中央那一行的第一個字符。L
:跳轉到屏幕的最下方一行的第一個字符。Ctrl + b
:向上滾動一屏。Ctrl + f
:向下滾動一屏。
單詞跳轉
b
:跳轉到前 1 個單詞的開頭(例如:5b
向前跳轉到第 5 個單詞的開頭)。e
:跳轉到當前單詞的末尾。w
:跳轉到下 1 個單詞的開頭(例如:5w
向后跳轉到第 5 個單詞的開頭)。ge
:向前跳轉到當前單詞的結尾(例如:3ge
向前跳轉到第 3 個單詞的結尾)。
字符跳轉
f{char}
:跳轉到當前行下一個字符{char}
的位置(例如:fa
跳轉到下一個字母 a)。F{char}
:跳轉到當前行上一個字符{char}
的位置。h
或←
:向左跳轉一個字符(例如:10h
向后跳轉 10 個字符)。l
或→
:向右跳轉一個字符(例如:10l
向前跳轉 10 個字符)。
行間跳轉
j
或↓
:向下跳轉一行(例如:5j
向下跳轉 5 行)。k
或↑
:向上跳轉一行(例如:5k
向上跳轉 5 行)。n<Enter>
:光標向下跳轉 n 行
刪除命令
字符刪除
x
:刪除當前光標所在位置的字符,并將光標自動向后跳轉一個字符(例如:3x
刪除光標后的三個字符,3X
刪除光標前的三個字符)。dl
:同x
,刪除光標所在位置的字符(例如:5dl
刪除光標后的 5 個字符)。dh
:刪除光標所在位置的前一個字符。
行刪除
dd
:刪除當前行(例如:5dd
向下刪除 5 行,共 6 行)。D
:刪除從光標當前位置一直到該行的末尾(包括光標所在的字符)。d$
:刪除至行尾。d0
:刪除至行首。
單詞刪除
dw
:刪除光標所在位置到下 1 個單詞開頭之間的內容(不保留空格,例如:5dw
刪除連續的 5 個單詞)。de
:刪除從光標位置到當前單詞末尾的內容(不會刪除空格)。dex
:刪除從光標所在位置到當前單詞末尾之間的所有字符,包括當前單詞末尾的空格。db
:刪除光標所在單詞及其前面的空格。daw
:刪除光標所在的單詞及其后面的空格。diw
:刪除光標所在的單詞,并保留其前后的空格。bdw
:刪除光標所在位置到前 1 個單詞開頭之間的內容,并且不保留空格。
范圍刪除
:3,5d
:刪除從第 3 行到第 5 行。d1G
:刪除從當前行到第一行之間的文本。dG
:刪除到文件尾,也就是刪除整個文檔的后半部分(包括光標所在的字符)。dgg
:刪除到文件首。dj
:刪除當前行和下一行(例如:5dj
刪除當前行及其下面的 5 行,即向下刪除 6 行)。dk
:刪除當前行和上一行(例如:5dk
刪除當前行及其上面的 5 行,即向上刪除 6 行)。d2w
:刪除光標后面的兩個單詞。dX
:刪除當前單詞前面的空格,但不包括當前單詞本身wde
:刪除從光標位置到下 1 個單詞開頭的內容,并且保留空格。其中數字可以指定要刪除的單詞數
其他
d{motion}
:motion
可以是任何移動光標的命令,例如dw
,d2w
,d$
等.
注意: d
刪除的字符存放到 Vim 的剪貼板中,可以使用 p
命令將其粘貼到另一個位置。
復制和粘貼
復制
y
:復制(默認是復制到"寄存器)。"+y
:復制到系統剪貼板(也就是 vim 的 + 寄存器)。yw
:復制 1 個單詞(例如:y3w
復制 3 個單詞)。yy
:復制游標所在的那一行(常用)。nyy
:n 為數字,復制光標所在的向下 n 行(例如:20yy
則是復制 20 行)。y1G
:復制游標所在行到第一行的所有數據。yG
:復制游標所在行到最后一行的所有數據。y0
:復制光標所在字符到該行行首的所有數據。y$
:復制光標所在字符到該行行尾的所有數據。5bgyw
:復制光標所在單詞向前 5 個單詞5egyw
:復制光標所在單詞向后 5 個單詞5b5egyw
:復制光標所在單詞向前向后 3 個單詞
粘貼
p
:粘貼(默認從"寄存器取出內容粘貼,在光標后)。P
:粘貼到光標前。"+p
:從系統剪貼板粘貼。5p
:粘貼五份。
插入新行
o
:在當前行下面插入 1 個新行,并將光標放置到新行的起始位置。O
:在當前行上面插入 1 個新行,并將光標放置到新行的起始位置。
插入模式
i
:在當前光標位置處插入文本。I
:在當前行的開頭插入文本。a
:在當前光標位置后插入文本。A
:在當前行的結尾插入文本。o
:在當前行的下一行插入文本。O
:在當前行的上一行插入文本。
撤銷和重做
u
:撤銷,或輸入:undo
命令。Ctrl + r
:重做或輸入:redo
命令。
替換和搜索
:%s/old/new/g
:快速替換文本中所有的匹配項。:%s/old/new/gi
:快速替換文本中所有的匹配項,忽略大小寫。:%s/[\\u4e00-\\u9fa5]//g
:替換所有中文字符。:g/^$/d
:刪除所有空行。:%s/\\s\\+/ /g
:將連續空格替換為單個空格。:g/^\\s*$/d
:刪除包含空格的空行。:%s/^\\s*\\n//
:刪除文檔中的連續空格,只保留單個空格,并且刪除包含空格的空行。
代碼塊操作
代碼塊縮進
<
:代碼塊左移(減少縮進)。>
:代碼塊右移(增加縮進)。<<
:減少選中行的縮進,塊狀可視模式下使用。>>
:增加選中行的縮進,塊狀可視模式下使用。
代碼塊排序
:sort
:按字典順序排序選中的行。:sort!
:按逆字典順序排序選中的行。:sort n
:按數字順序排序選中的行。
代碼塊注釋
I
:在當前行的開頭插入注釋(需要配合可視塊模式)。A
:在當前行的末尾添加注釋(需要配合可視塊模式)。:%s/^/# /
:在每一行的行首插入 “#” 作為注釋符號。
代碼塊格式化
=
:重新格式化選中的代碼塊(自動縮進)。
其他命令
nohl
:取消高亮。:set whichwrap+=<,>
:允許光標在行首和行尾跳轉到下一行或上一行。:set nofixeol
:禁用文件末尾自動添加新行。:set mouse=a
:啟用鼠標支持。:set mousemodel=extend
:設置鼠標滾動時光標的移動方式為擴展模式:set number
或者:set nu
:顯示行號:set nonumber
或者:set nonu
:不顯示行號
文件操作
保存并退出
:wq
:保存文件并退出編輯器。:x
:保存文件并退出編輯器,僅當文件自上次保存以來有修改時。:xit
:保存文件并退出編輯器,無論文件是否被修改。:ZZ
:保存文件并退出編輯器
僅保存
:w
:保存更改但不退出 Vim。:w!
:強制保存更改,忽略某些文件類型插件的警告。
保存到其他文件
:w <filename>
:將更改保存到指定的文件名中,不退出 Vim。:w! <filename>
:強制將更改保存到指定的文件名中,忽略警告。
保存所有打開的文件
:wqa
:保存所有打開的文件并退出 Vim。
撤銷保存
:undo
:撤銷最近的一次保存操作。
設置自動保存
:set autowrite
:自動保存更改,每次執行命令時自動寫入文件。:set noautowrite
:取消自動保存。
保存并退出所有打開的標簽頁
:wqa
:在有多個標簽頁的情況下,保存所有更改并退出 Vim。
保存并關閉當前窗口
:close
:關閉當前窗口:winc
:保存當前窗口的更改并關閉窗口,不退出 Vim。
保存并關閉所有窗口
:wqa
:保存所有更改并關閉所有窗口,退出 Vim。
自定義快捷鍵
:map <C-f> <PageDown>
:將 Ctrl+f 映射為 PageDown(向下滾動一頁)。:map <C-b> <PageUp>
:將 Ctrl+b 映射為 PageUp(向上滾動一頁)。:map <C-s> :w<CR>
: 將 Ctrl + s 映射為保存。
正則表達式和替換命令
插入特定字符
:%s/^/#/
:在整個文件中的每一行的行首插入 “#” 字符:1,5s/^/# /
:在第 1 行到第 5 行之間的每一行的行首插入 “#” 字符
刪除特定字符
:%s/^#//
:刪除整個文件中的每一行的行首的 “#” 字符:1,5s/^# //
:刪除第 1 行到第 5 行之間的每一行的行首插入的 “#” 字符
插入行首和行尾字符
:%s/^/\\/\\/
:在每一行的行首插入 “//”:1,5s/^/# /
:在第 1 行到第 5 行的行首插入 "# "
刪除行首和行尾字符
:%s/^\\s\\+//
:刪除每行行首的空格:%s/\\s\\+$//
:刪除每行行尾的空格
替換文本
:%s/old/new/g
:將文件中所有的 “old” 替換為 “new”:%s/old/new/gi
:將文件中所有的 “old” 替換為 “new”,忽略大小寫:%s/\\n//g
:刪除所有的換行符:%s/\\r//g
:刪除所有的回車符:%s/\\t//g
:刪除所有的制表符
特定范圍替換
:<起始行號>,<結束行號>s/^/<插入的字符>/
:在特定范圍的行上執行插入操作:<起始行號>,<結束行號>s/^<要刪除的字符>//
:在特定范圍的行上執行刪除操作
未完待續……