Vim常用命令

Vim官網(wǎng):*
http://www.vim.org/

Vim文檔:

Vim簡介

  • Vim(Vi[Improved])編輯器是功能強大的跨平臺文本文件編輯工具,繼承自Unix系統(tǒng)Vi編輯器,支持Linux/Mac OS X/Windows系統(tǒng),利用它可以建立、修改文本文件
  • Vim是從 vi發(fā)展出來的一個文本編輯器。代碼補全、編譯及錯誤跳轉(zhuǎn)等方便編程的功能特別豐富,和Emacs并列成為類Unix系統(tǒng)用戶最喜歡的文本編輯器。
  • vim的設(shè)計理念是命令的組合

Vim的6種基本模式

  1. 普通模式
    使用vim打開一個文件時默認模式。在普通模式中,用的編輯器命令,比如移動光標,刪除文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數(shù)編輯器默認模式為插入模式)
  2. 插入模式
    也可以叫做編輯模式,在普通模式下敲擊i、ao 就進入插入模式,允許用戶通過鍵盤輸入、編輯。在這個模式中,大多數(shù)按鍵都會向文本緩沖中插入文本。大多數(shù)新用戶希望文本編輯器編輯過程中一只保持這個模式。在插入模式中,可以按ESC鍵回到普通模式
  3. 可視模式
    在普通模式下敲擊前盤上的v鍵,就進入可視化模式,然后移動光標就可以選中一塊文本,常用來完成文本的賦值、粘貼、刪除等操作。這個模式與普通模式比較相似。但是移動命令會擴大高亮的文本區(qū)域。高亮區(qū)域可以是字符、行或者是一塊文本。當執(zhí)行一個非移動命令時,命令會被執(zhí)行到這塊高亮的區(qū)域上。Vim的“文本對象”也能和移動命令一樣用在這個模式中
  4. 選擇模式
    這個模式和無模式編輯器的行為比較相似(Windows標準文本控制的方式)。這個模式中,可以用鼠標或者光標鍵高亮選擇文本,不過輸入任何字符的話,Vim會用這個字符替換選擇的高亮文本塊,并且自動進入插入模式
  5. 命令行模式
    在命令行模式可以輸入會被解釋成并執(zhí)行的文本。在執(zhí)行命令后,Vim返回到命令模式之前的模式,通常是普通模式
  6. Ex模式
    這和命令行模式比較相似,在使用:visual命令離開Ex模式前,可以一次執(zhí)行多條命令。

這6中模式我們常用到就是普通模式插入模式命令行模式

Vim鍵盤圖

Vim鍵盤圖.jpg

模式的切換

在剛進入Vim時,便進入了普通模式,在普通模式中可以按i(插入)或者a(附加)進入插入模式,在普通模式中按:進入命令行模式;在命令行模式中和插入模式中按ESC返回到普通模式。如圖:

vim工作模式.png

常用命令及說明

  • 單個字符
命令 說明
h 移動
l(小寫字母L) 移動
j 移動
k 移動
xh 移動x個字符距離
  • 單詞移動
命令 說明
w 將光標移動到下一個單詞的開頭
b 將光標移動到前一個單詞的開頭
e 將光標移動到下一個單詞的詞末
E 移動到單詞的結(jié)尾(忽略標點符號)
ge 將光標移動到上一個單詞的詞末
2w 指定移動的次數(shù)
  • 行移動
命令 說明
$ 將光標移動到當前行的行尾
0 將光標移動到當前行的行首
^ 將光標移動到當前行的第一個非空字符(行首和當前行非空字符不是一個位置)
2| 移到當前行的第2
fx 將光標移動到當前行的第一個字符x
3fx 將光標移動到航前行的第3個字符x
tx 將光標移動到目標字符x的前一個字符上
% 用于符號間的移動,它會在一對()[]、{}之間跳躍

fxtx 可以通過 ;, 進行重復(fù)移動,一個是正向重復(fù),一個是反向重復(fù)

  • 文本塊移動
命令 說明
( 移到當前句子的開頭
) 移到下一個句子的開頭
{ 移到當前一段的開頭
} 移到下一段的開頭
[[ 移到當前這一節(jié)的開頭
]] 移到下一節(jié)的開頭
  • 在屏幕中移動
命令 說明
xG 跳轉(zhuǎn)到指定的第x行,G移動到文件按末尾
``(2次單引號) 返回到跳轉(zhuǎn)前的位置
gg 移動到文件開頭
x% 移動到文件中間,就使用50%
H 移動到home
M 移動到屏幕中間
L 移動到一屏末尾
ctrl+G 查看當前的位置狀態(tài)
  • 滾屏與跳轉(zhuǎn)
命令 說明
ctrl+u/ctrl+d 半屏滾動
ctrl+f/ctrl+b 全屏滾動
  • 定位光標的位置
命令 說明
zz 將光標置于屏幕的中間
zt 將光標移動到屏幕的頂部
zb 將光標移動到屏幕的底部
  • 設(shè)置跳轉(zhuǎn)標記
命令 說明
mx , my , mz 設(shè)置三個位置
x , y , z 跳轉(zhuǎn)到設(shè)置
  • 文本插入操作
命令 說明
i 在當前光標的前面插入字符
a 在當前光標的后面追加字符
o 在當前光標的下一行行首插入字符
I(大寫字母i) 在一行的開頭添加文本
A 在一行的結(jié)尾處添加文本
O 在光標當前行的上一行插入文本
s 刪除當前光標處的字符并進入到插入模式
S 刪除光標所在處的行,并進入到插入模式
u 撤銷修改
  • 文本刪除操作
命令 說明
x 刪除當前光標所在處的字符
3x 刪除3個連續(xù)字符,以此類推
X 刪除當前光標左邊的字符
Delete x
dw 刪除一個單詞(從光標處到空格)
daw 無論光標在什么位置,刪除光標所在的整個單詞(包括空白字符)
diw 刪除整個單詞文本,但是保留空格字符不刪除
d2w 刪除從當前光標開始處的2個單詞
d$D 刪除從光標到一行末尾的整個文本
d0(字母d和數(shù)字0) 刪除從光標到一行開頭的所有單詞
dl(字母d和小寫字母L) 刪除當前光標處的字符(等同于x)
dh 刪除當前光標左邊的字符(等同于X)
dd 刪除當前光標處的一整行(等同于D)
5dd 刪除從光標開始處的5行代碼
d^ 刪除至行首
dgg 刪除從光標到文本開頭
dG 刪除從光標到文本結(jié)尾
d1G 刪除至文檔首部
J 刪除一個分行符,將當前行與下一行合并
  • 文本復(fù)制、剪切與粘貼
命令 說明
y 復(fù)制
y0(數(shù)字0) 復(fù)制從當前光標到行首的所有單詞
yy 復(fù)制一整行
3yy 復(fù)制從當前光標所在行開始的3
y^ 復(fù)制至行首,不含光標所在處字符
y$ 復(fù)制從當前光標到行結(jié)尾的所有單詞
yw 復(fù)制一個單詞
y2w 復(fù)制2個單詞
yG 復(fù)制至文本末
y1G 復(fù)制至文本開頭
p 粘貼到光標后
P 粘貼到光標前
ddp 剪切并粘貼

復(fù)制文本塊
1.首先進入visual(可視)模式:v
2.移動光標選擇文本
3.復(fù)制與粘貼的操作

  • 文本的修改與替換
命令 說明
cw 刪除從光標處到單詞結(jié)尾的文本并進入到插入模式
cb 刪除從光標處到單詞開頭的文本并進入到插入模式
cc 刪除一整行并進入到插入模式
~ 修改光標下字符的大小寫
r 替換當前光標下的字符
R 進入到替換模式,連續(xù)替換,直到按下Esc
xp 交換光標和下一個字符
r+<待替換字母> 將游標所在字母替換為指定字母
C(大寫) 替換游標以后至行末
  • 文本的查找與替換
命令 說明
/string 正向查找
?string 反向查找
f<字母> 向后搜索<字母>并跳轉(zhuǎn)到第一個匹配的位置
F<字母> 向前搜索<字母>并跳轉(zhuǎn)到第一個匹配的位置
t<字母> 向后搜索<字母>并跳轉(zhuǎn)到第一個匹配位置之前的字母
T<字母> 向前搜索<字母>并跳轉(zhuǎn)到第一個匹配位置之后的字母
:s/old/new 將當前行的第一個字符串old替換為new
:s/old/new/g 將當前行的所有字符串old替換為new
:90s/old/new/g(90指定的行數(shù)) 將指定行的所有字符串old替換為new
:90,93s/old/new/g(90,93指定的行數(shù)) 將指定范圍的行的所有字符串old替換為new
:%s/old/new/g 將文本中所有的字符串old替換為new
:%s/old/new/gc 依次替換每個字符串關(guān)鍵字
:%s/^struct/int/g 將所有以struct開頭的字符串替換為int

設(shè)置高亮顯示
:set hls
*按鍵將當前光標處的單詞高亮顯示,使用n瀏覽下一個查找高亮的結(jié)果

  • 撤銷修改、重做與保存
命令 說明
u 撤銷上一步的操作
Ctrl+r 將原來的插銷重做一遍
U 恢復(fù)一整行原來的面貌(文件打開時的文本狀態(tài))
:q 若文件沒有修改,直接退出
:q! 文件已經(jīng)被修改,放棄修改退出,不保存
:wq 文件已經(jīng)被修改,保存修改并退出
:wq! 強制保存并退出
:w文件路徑 另存為
:saveas 文件路徑 另存為
:x 保存并退出
shift+zz 退出vim
  • 文本格式
命令 說明
>> 整行向右縮進
<< 整行向左回退
/+<需要查找的字符串>+回車 向下查找(進入查找之后,輸入nN可以繼續(xù)查找,n是查找下一個內(nèi)容,N查找上一個內(nèi)容,命令行模式下輸入noh回車可取消搜索)
?+<需要查找的字符串>+回車 向上查找(進入查找之后,輸入nN可以繼續(xù)查找,n是查找下一個內(nèi)容,N查找上一個內(nèi)容,命令行模式下輸入noh回車可取消搜索)
\* 尋找游標所在處的單詞
:set nu 顯示行號
:set shiftwidth=10 設(shè)置縮進為10個字符,以此類推(輸入Esc回到普通模式,再次嘗試>>看縮進是否變化)
:ce(center) 本行內(nèi)容居中
:ri(right) 本行內(nèi)容居右
:le(left) 本行內(nèi)容居左
:== 當前行自動縮進
:n== (n是自然數(shù))表示自動縮進從當前行起的下面n
  • 編輯多個文件

  • 文件和緩沖區(qū)的區(qū)別:
    文件是保存在磁盤上的,而打開的文件的文件是在內(nèi)存中,在內(nèi)存中有一個緩沖區(qū),用來存放打開的文件。vim每次打開文件時都會創(chuàng)建一個緩沖區(qū),vim支持打開多個文件

命令 說明
:buffers 查看緩沖區(qū)列表(等同于(小寫字母L)ls)
:buffer N 根據(jù)緩沖區(qū)列表的編號跳轉(zhuǎn)到指定緩沖區(qū)
:bnext/bprev 遍歷緩沖區(qū)列表
:bfirst/blast 分別調(diào)到緩沖區(qū)列表的開頭和結(jié)尾
:write 將緩沖區(qū)的修改保存到磁盤上
:edit! e! 放棄緩沖區(qū)的修改,恢復(fù)到文件打開時的狀態(tài)
:edit file 編輯另一個文件
:wnext 保存當前緩沖區(qū)的修改并跳轉(zhuǎn)到緩沖區(qū)列表中的下一個文件
  • 標簽頁與折疊欄
命令 說明
tabedit file / tab split 標簽頁的新建
tabn / tabp 標簽頁的切換
gt / gT 按鍵
tabclose 標簽頁的關(guān)閉
tabonly 關(guān)閉當前的標簽頁
zf200G 將光標和200行之間的代碼折疊起來
za 打開和關(guān)閉折疊
zr / zm 一層一層地打開和關(guān)閉折疊
zR / zM 分別打開和關(guān)閉所有的折疊
zj 跳轉(zhuǎn)到下一個折疊處
zk 跳轉(zhuǎn)到上一個折疊處
zd 刪除光標下的折疊
zD 刪除光標下的折疊以及嵌套的折疊
zE 刪除所有的折疊標簽

創(chuàng)建的折疊當退出vim之后就失效了

  • 多窗口操作
命令 說明
split / vsplit fileName 分割窗口
ctrl+w hjkl
ctrl+w w
窗口間跳轉(zhuǎn)
ctrl+w HJKL 移動窗口
ctrl+w +/- 調(diào)整窗口的高度
ctrl+w </> 調(diào)整窗口的寬度
ctrl+w = 所有的窗口設(shè)置相同的尺寸
close 關(guān)閉一個窗口
qall 退出所有窗口
qall! 放棄修改,退出所有窗口
wqall 保存并退出所有窗口
wall 保存所有窗口
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Mac下的常用終端命令 cd 切換工作目錄 . 表示當前目錄 .. 表示當前目錄的上一級目錄 /...
    Superman168閱讀 9,354評論 3 7
  • vim常用命令總結(jié) (轉(zhuǎn)) 在命令狀態(tài)下對當前行用== (連按=兩次), 或?qū)Χ嘈杏胣==(n是自然數(shù))表示自動縮...
    S等價交換S閱讀 433評論 0 0
  • 自我總結(jié)篇: 對文件的操作技巧: vim文件一個有三種狀態(tài):命令(瀏覽/輸入命令轉(zhuǎn)變末行模式),文本(添加/編輯/...
    小知大知閱讀 890評論 0 0
  • 本文摘自https://www.cnblogs.com/yangjig/p/6014198.html 感謝原作者的...
    榮子3507閱讀 393評論 1 0
  • 表情是什么,我認為表情就是表現(xiàn)出來的情緒。表情可以傳達很多信息。高興了當然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,871評論 2 7

友情鏈接更多精彩內(nèi)容