摘要:光標移動基本詞向前移動,光標停在第一個字符向后移動,光標停在第一個字符向后移動,光標停在最后一個字符行首或行尾移動到行尾移動到行首,非空白字符移動到行首,第一個字符指定字符單行搜索下一個單個字符單行搜索上一個單個字符單行搜索下一個單個字符,
VIM 光標移動
基本
h j k l
詞
b 向前移動,光標停在第一個字符 (backward) w 向后移動,光標停在第一個字符 (word) e 向后移動,光標停在最后一個字符 (end of word)
行首或行尾
$ 移動到行尾 ^ 移動到行首,非空白字符 0 移動到行首,第一個字符
指定字符
f 單行搜索下一個單個字符 (find) F 單行搜索上一個單個字符 t 單行搜索下一個單個字符,光標停在前一個字符 (to) T 單行搜索上一個單個字符,光標停在前一個字符
匹配括號
% 移動到匹配的括號或移動到括號
移動到指定行
G 移動到最后一行 33G 移動到第 33行 gg 移動到第一行 40% 移動到40% H 移動到屏幕內第一行 (home) M 移動到屏幕內中間 (middle) L 移動到屏幕內最后一行 (last)
滾屏
向上滾動半屏 (up) 向下滾動半屏 (down) 向下滾動一屏 (forward) 向上滾動一屏 (backward)
簡單查找
/string 向下查找包含 string的詞 ?string 向上查找包含 string的詞 /向下查找 string ? 向上查找 string n 重復前一次查找 N 重復前一次相反的查找 / 之前的查找 * 向下查找光標所在處的詞,全詞匹配 # 向上查找光標所在處的詞,全詞匹配 g* 向下查找包含光標所在處的詞 g# 向上查找包含光標所在處的詞
標記:
m{mark} 講此處標記為 mark,mark 為一個字母 `{mark} 跳到標記 mark處,` 是1左邊那個鍵 "{mark} 跳到標記 mark處所在行行首,"是單引號 特殊的mark " 此次跳轉之前的起跳點 " 上次編輯該文件時光標最后停留的位置 [ 最后一次修改的起始位置 ] 最后一次修改的結束位置
其他命令
:set number 顯示行號,左邊 (se nu) :set nonumber 不顯示行號(se nonu) :set ruler 顯示光標位置,右下角 (se ru) :set noruler 不顯示光標位置 (se noru) :set ignorecase 查找忽略大小寫 :set noignorecase 查找不忽略大小寫 :set hlsearch 查找高亮 (se hls) :set nohlserch 關閉查找 (se nohls) :set incsearch 鍵入目標字符串時就開始查找 :set nowrapscan 搜索過程在文件結束時就停止簡單修改
插入
i 在當前光標處插入 I 在當前行第一個非空白字符前插入 a 在當前光標之后插入 A 在當前行尾插入 o 在當前行之下插入 O 在當前行之上插入
刪除
d 刪除操作符 (delete) c 修改操作符,刪除之后自動進入插入 (change) dd 刪除一行 cc 修改一行 x dl ,刪除光標處字符 X dh ,刪除光標左邊的字符 D d$ ,刪除到行尾 C c$ ,修改到行尾 s cl ,修改光標字符 S cc ,修改一整行 r 替換(刪除之后插入并回到 Normal) . 執行上一次所執行的更改命令
復制
y 復制操作符 (yanking) yy 復制一行 yw 復制word,包含之后空白字符 ye 復制word,不包含之后空白字符 yaw 復制word,包含之后空白字符 yiw 復制word,不包含之后空白字符 yab 復制一個小括號里面的內容,包括括號本身 yib 復制一個小括號里面的內容,不包括括號本身 ya{ 復制一個大括號里面的內容,包括括號本身 yi{ 復制一個大括號里面的內容,不包括括號本身 p 粘貼(put)
對齊
= 對齊操作符 == 對齊一行 n== 對齊n行 =a{ 對齊一個大括號里面的內容
大小寫替換
~ 大小寫替換 g~ 大小寫替換操作 g~iw 改變光標處單詞大小寫 guiw 光標處單詞變成小寫 gUiw 光標處單詞變成大寫
命令計數器 n+命令
一個命令重復執行 如:4x刪除 4個字符
操作命令符 +位移命令符
操作如:刪除 d,復制y ;位移如:詞語 w,$ 行尾 d$ 刪除到句尾 4yy 復制4行 3dw 3次刪除一個單詞 d3w 一次刪除 3個單詞 3d2w 3次刪除 2個單詞
常用刪除命令
x(dl), X(dh), D(d$), dw, db, diw, daw, dG, dgg
visual 模式(主要功能就是選擇)
v 進入visual模式,移動光標選擇操作文本范圍 V 進入visual行模式,選擇以行為單位查找替換進入visual塊模式,選擇塊
查找命令
/, ?, n, N, #, *, g#, g*, gd, gD
替換命令
:[n,m]s/[src]/[dst]/[g][c] [n,m] 表示一個范圍,從 n~m行中查找替換,[n,$]表示從第 n行之后 % 表示整個文件 [src] 要查找的詞, [dst]要替換的詞 [g] 替換所有的匹配,若沒有,只匹配第一個 [c] 替換前詢問 / 為分隔符,也可以用 +或# 來分隔 :s/src/dst/ 替換當前行第一個 src為dst :s/src/dst/g 替換當前行所有 src為dst :n,ms/src/dst/ 替換n~m行第一個 src為dst :n,$s/src/dst/g 替換第n行到最后一行中所有 src為dst :%s/src/dst/g 替換整個文件中所有 src為dst :%s/src/dst/gc 替換整個文件中所有 src為dst 并詢問是否替換 :%s//dst/gc 與:%s/src/dst/gc一樣(全詞匹配)
正則匹配
* 匹配0以上之前的字符 + 匹配1個以上之前字符 = 匹配0個或 1個之前字符 ? 匹配0個或 1個之前字符 . 匹配任何單個字符 < 匹配一個單詞的開始 > 匹配一個單詞的結束 s 匹配空白字符和 S 匹配非空白字符 d 數字[0-9] D 非數字[^0-9] x 十六進制數字 [0-9A-Fa-f] X 費十六進制數字 [^0-9A-Fa-f] l 小寫字符 [a-z] L 非小寫字符 [^a-z] u 大寫字符 [A-Z] U 非大寫字符 [^A-Z] a 字符[A-Za-z] A 非字符[^A-Za-z] [] 任何[]中的字符
更多
:help pattern折疊
折疊方式
manual 手工定義折疊 indent 更多的縮進表示更高級的折疊 expr 用表達式來定義折疊 syntax 用語法高亮來定義折疊 diff 對沒有更改的文本進行折疊 marker 對文中的標志折疊 set foldmethod=**** 設置折疊方式 marker方式,需要用標記來標識代碼的折疊,系統默認是 {{{和}}}
折疊命令
zc 折疊 zC 對所在范圍內所有嵌套的折疊點進行折疊 zo 展開 zO 對所在范圍內所有嵌套的折疊點展開 zr, zR 折疊所有 zm, zM 展開所有 za, zA 折疊/打開當前折疊 zi 折疊/展開所有 [z 到當前打開的折疊開始處 ]z 到當前打開的折疊末尾處 zj 向下移動到下一個折疊開始處 zk 向上移動到前一折疊的結束處 zf 創建折疊 zf56G 創建從當前行起到 56行的代碼折疊 10zf 創建從當前行起后 10行的代碼折疊 10zf- 創建從當前行起到之前 10行的代碼折疊 zf% 創建從當前行起到對應匹配的括號 zd 刪除光標下的折疊,僅當 manual或marker 方式有效 zD 嵌套地刪除光標下的折疊,僅當 manual或marker 方式有效 zE 除去窗口里的所有折疊,僅當 manual或marker 方式有效
foldlevel
"foldlevel" 是個數值選項:數字越大則打開的折疊更多 當 "foldlevel" 為 0 時,所有的折疊關閉 當 "foldlevel" 為正數時,一些折疊關閉 當 "foldlevel" 很大時,所有的折疊打開 "foldlevel" 的改變后立即生效。之后,折疊可以被手動地打開和關閉文件
文件操作
:w 保存 :w! 強制保存 :w filename 將當前緩沖區的內容保存成文件 filename :n1, n2, filename 將n1到 n2的內容保存為文件filename :q 退出當前窗口,若改動,提示失敗 :q! 強制退出,放棄改動 :wq 保存后退出 :wa 保存所有 :qa 退出所有 :wqa 保存所有后退出 ZZ 相當于:wq
編輯另一個文件
:edit file
多文件編輯
vim filename1 filename2 ... :bn 跳轉至下一緩沖區 (文件)( 最后一個 ->第一個) :bN 跳轉到上一緩沖區 (文件)( 第一個->最后一個 ) :bd 關閉當前緩沖區 (文件) :n 跳轉至下一文件 ,如當前文件為最后一個,提示錯誤 :N 跳轉至上一文件 ,如當前文件為第一個,提示錯誤 :next, :previous 跳轉至下 /上一文件 :wnext, :wprevious 保存當前文件并跳轉至下 /上一文件 :last, :first 跳轉至最后一個 /第一個文件 :files 列出當前已打開文件 :args 給出進入 vim時命令行參數;當前正在編輯文件名用 "[]"列出
窗口分隔
s 水平分割窗口 v 垂直分割窗口 w 切換至另一窗口 h 切換至左側窗口 j 切換至下方窗口 k 切換至上方窗口 l 切換至右側窗口 H 移動當前窗口到左邊 J 移動當前窗口到下面 K 移動當前窗口到上面 L 移動當前窗口到右邊 :split filename 水平分隔窗口打開 filename :vsplit filename 垂直分割窗口打開 filename
標簽式編輯
:tabnew filename 在新標簽中打開 gt, :tabnext 切換至下一個標簽 gT, :tabprevious 切換至上一個標簽 :tabc 關閉當前標簽 :tabl 切換至最后一個標簽 :tabmove n 切換到第 n個標簽,默認標簽編號從 0開始
目錄
netrw 插件
netrw 插件是vim的標準插件,在 .vimrc中只要設置了 set nocp " 不與vi兼容 filetype plugin on " 允許插件 就可以使用 netrw插件了
打開目錄
Ex[plore] 打開當前目錄或指定目錄 Se[xplore] 水平分割并打開當前目錄或指定目錄 Ve[xplore] 垂直分割并打開當前目錄或指定目錄 Te[xplore] 新建標簽并打開當前目錄或指定目錄
目錄操作
宏進入目錄 試圖刪除文件 /目錄 - 上一級目錄 a 在正常顯示,隱藏和顯示三種方式間切換 c 使瀏覽中的目錄成為當前目錄 d 建立目錄 D 試圖刪除目錄 i 在瘦、長、寬、和樹形的各種列表中切換刷新目錄列表 o 打開新瀏覽窗口,進入光標所在目錄,使用水平分割 p 預覽文件 P 在前一次使用的窗口里預覽 r 反轉排序順序 R 給指定文件 /目錄換名 s 選擇排序方式:按名字、時間、文件大小排序 S 指定按名字排序的后綴優先級 t 在新標簽頁里打開光標所在文件 /目錄 v 打開新瀏覽窗口,進入光標所在目錄,使用垂直分割
創建宏
q ++ [一系列命令] + q 指用戶自定義的 a-z中的一個寄存器 如:qa...q
運行宏
@ +MAP運行寄存器中的宏 @@ 重復運行上一次宏 10@a 重復運行寄存器 a中的宏10 次
映射模式
普通模式 可視模式 操作符等待模式 插入模式 命令行模式
映射模式代號
普通、可視和選擇、操作符等待 n 普通 v 可視和選擇 s 選擇 x 可視 o 操作符等待 ! 插入和命令行 i 插入 l 插入、命令行和 Lang-Arg模式的":lmap" 映射 c 命令行
命令
map {lhs} {rhs} 把普通、可視和選擇、操作符等待模式下的 lhs命令映射成rhs,如:map tn :tabnew noremap noremap對rhs不會重新掃描映射 unmap {lhs} 取消對lhs的映射 mapclear 取消所有 map映射 nmap 只作用于普通模式下的映射 imap 只作用于插入模式下的映射 nnoremap 只作用于普通模式下的 noremap nunmap 只作用于普通模式下的 unmap nmapclear 只作用于普通模式下的 mapclear
特殊參數
, , ,