VIM 學習系列之基本命令,常用命令

供開始學vim的同學參考,更多精彩文章https://deepzz.com

下面基本是vim的基本用法,剛開始學習可能有些不習慣。但貴在堅持,即使不習慣,也要堅持使用,做到不經(jīng)過思考就能操作,你會發(fā)現(xiàn)真的很方便。
當然,樓主學習這些命令主要是在后面用vim編輯器寫代碼打基礎(chǔ),如果有興趣,你可以查看:VIM 學習系列之打造智心目中理想的編輯器一
很多操作可以通過不同的命令達到,我這里只列出常用的。

基礎(chǔ)命令

vim                    #命令行中進入vim編輯器
Esc                    #退出i(插入模式),取消操縱
:! command             #暫時離開vi到指令模式下執(zhí)行command命令,如:!ls 執(zhí)行l(wèi)s命令
:sh                    #進入shell命令行,執(zhí)行完命令后ctrl+d退出重新進入vim編輯繼續(xù)編輯 在shell命令下,執(zhí)行ctrl+l完成清屏
:r filename            #讀入一個文件內(nèi)容,并寫入到當前編輯器中
:w newfilename         #將該編輯器中的內(nèi)容寫入到一個新文件中
:w                     #在編輯的過程中保存文件,相當于word中的ctrl+s 
:wq                    #保存文件并退出
:x                     #寫文件(如果有做修改)并退出
:q!                    #強制退出,不保存
:sav filename          #保存為

vim + filename         #進行文件最后一行進行編輯
vim +n filename        #進入文件第n行進行編輯

復(fù)制命令

yy                     #將當前行的內(nèi)容放入臨時緩沖區(qū) 
nyy                    #將 n 行的內(nèi)容放入臨時緩沖區(qū) 
p                      #將臨時緩沖區(qū)中的文本放入光標后 
P                      #將臨時緩沖區(qū)中的文本放入光標前 
"(a-z)nyy              #復(fù)制 n 行放入名字為圓括號內(nèi)的可命名緩沖區(qū),省略 n 表示當前行 
"(a-z)ndd              #刪除 n 行放入名字為圓括號內(nèi)的可命名緩沖區(qū),省略 n 表示當前行 
"(a-z)p                #將名字為圓括號的可命名緩沖區(qū)的內(nèi)容放入當前行后 
"(a-z)P                #將名字為圓括號的可命名緩沖區(qū)的內(nèi)容放入當前行前 

移動命令

h                    #向左移一個字符 
j                    #向下移一行 
k                    #向上移一行 
l                    #向右移一個字符

w                    #移到下一個字的開頭 
W                    #移到下一個字的開頭,忽略標點符號 
b                    #移到前一個字的開頭 
B                    #移到前一個字的開頭,忽略標點符號 
e                    #移到下一個字的結(jié)尾 
E                    #移到下一個字的結(jié)尾,忽略標點符號
L                    #移到屏幕的最后一行 
M                    #移到屏幕的中間一行 
H                    #移到屏幕的第一行 

G                    #移到文件的最后一行
gg                   #移動到文件開頭
gd                   #移動到變量定義處
20gg                 #移動到第20行,或則(20G)
20|                  #移動到20列
 
%                    #移動到匹配的括號
(                    #移到句子的開頭 
)                    #移到句子的結(jié)尾 
{                    #移到段落的開頭 
}                    #移到下一個段落的開頭 
0(|)                 #移到當前行的第一列 
^                    #移到當前行的第一個非空字符 
$                    #移到當前行的最后一個字符 
+(Enter)             #移到下一行的第一個字符 
-                    #移到前一行的第一個非空字符
''                   #移動上次光標位置的位置,是兩個'

插入命令

a                    #在光標后插入文本 
A                    #在當前行插入文本 
i                    #在光標前插入文本 
I                    #在當前行前插入文本 
o                    #在當前行的下邊插入新行 
O                    #在當前行的上邊插入新行 
s                    #刪除光標所在處字符,并進入插入模式 
S                    #刪除光標所在的行,并進入插入模式

刪除命令

x                    #刪除光標處的字符 
dw                   #剪切至下一個字的開頭
dG                   #剪切行,直到文件結(jié)束 
dd                   #剪切整行
db                   #剪切光標前面的字

d$                   #從光標處刪除到行
:n,md                #從第 m 行開始往前刪除 n 行

修改命令

cl                   #更改當前字符
cw                   #修改到某個單詞的結(jié)尾位置
cW                   #修改到某個以空格作為分隔符的單詞的結(jié)尾位置
cb                   #修改到某個單詞的開始位置
cB                   #修改到某個以空格作為分隔符的單詞的開始位置
ctc                  #修改當前行直到下一個字符c所出現(xiàn)位置之間的內(nèi)容
C                    #修改到某一行的結(jié)尾
cc                   #修改當前行

查找與替換

/text                          #在文件中向前查找 text 
?text                          #在文件中向后查找 text 
n                              #在同一方向重復(fù)查找 
N                              #在相反方向重復(fù)查找
f<字符>                         #行內(nèi)向后搜索<字符>并跳轉(zhuǎn)到第一個匹配的位置(非常實用)
F<字符>                         #在當前行向后查找<字符>并跳轉(zhuǎn)到第一個匹配的位置(非常實用)

:g/text1/s/text2/text3         #查找包含 text1 的行,用 text3 替換 text2 
:g/text/command                #在所有包含 text 的行運行 command 所表示的命令 
:v/text/command                #在所有不包含 text 的行運行 command 所表示的命令 

:%s/old/new/g                  #將所有出現(xiàn)的old替換為new
:%s/onward/forward/gi          #將所有onward替換為forward,大小寫不敏感
:%s/old/new/gc                 #替換前確認
:2,35s/old/new/g               #將第2行到第35行之間的old替換為new
:5,$s/old/new/g                #將第5行到文件結(jié)尾的old替換為new
:%s/^/hello/g                  #在每一行開頭加入hello
:%s/$/Harry/g                  #在每一行結(jié)尾加入Harry
:%s/ *$//g                     #刪除每行末尾無用空格

:g/string/d                    #刪除所有包含string的行
:v/string/d                    #刪除所有不包含string的行
:s/Bill/Steve/                 #替換當前行第一個Bill為Steve
:s/Bill/Steve/g                #替換當前行中所有Bill
:%s/Bill/Steve/g               #替換文件中所有Bill
:%s/^M//g                      #刪掉DOS保存文件中(^M)
:%s/\r/\r/g                    #Transform DOS carriage returns in returns
:%s#<[^>]\+>##g                #刪除html標簽但是保留文本
:%s/^\(.*\)\n\1$/\1/           #刪除所有連續(xù)出現(xiàn)過兩次的行,保留一行
Ctrl+a                         #遞增光標下的數(shù)字
Ctrl+x                         #遞減光標下的數(shù)字
ggVGg?                         #文本轉(zhuǎn)換為 Rot13

撤銷,重復(fù)命令

u                #撤消最后一次修改 
U                #撤消當前行的所有修改 
.                #重復(fù)最后一次修改 
,                #以相反的方向重復(fù)前面的 f、F、t 或 T 查找命令 
;                #重復(fù)前面的 f、F、t 或 T 查找命令 
"np              #取回最后第 n 次的刪除(緩沖區(qū)中存有一定次數(shù)的刪除內(nèi)容,一般為 9) 
n                #重復(fù)前面的 / 或 ? 查找命令 
N                #以相反方向重復(fù)前面的 / 或 ? 命令

ctrl+r           #恢復(fù)操作

大小寫轉(zhuǎn)換命令

~                   #光標處內(nèi)容進行大小寫轉(zhuǎn)換
Vu                  #整行小寫
VU                  #整行大寫
g~~                 #整行大小寫反轉(zhuǎn)
vEU                 #單詞轉(zhuǎn)為大寫
vE~                 #單詞大小寫反轉(zhuǎn)
ggguG               #所有文本小寫
gggUG               #所有文本大寫

:set ignorecase     #搜索中忽略大小寫
:set smartcase      #搜索中忽略大小寫,除非搜索詞中存在大小寫字母
:%s/\<./\u&/g       #將所有單詞首字母大寫
:%s/\<./\l&/g       #將所有單詞首字母小寫
:%s/.*/\u&          #將每行第一個字母大寫
:%s/.*/\l&          #將每行第一個字母小寫

屏幕調(diào)整

ctrl+e(^e)             #將屏幕上滾一行 
ctrl+y                 #將屏幕下滾一行 
ctrl+u                 #將屏幕上滾半頁 
ctrl+d                 #將屏幕下滾半頁 
ctrl+b                 #將屏幕上滾一頁 
ctrl+f                 #將屏幕下滾一頁 
ctrl+l                 #重繪屏幕

其它命令

8zf                    #折疊當前行8行代碼
zo                     #打開折疊行(按方向鍵也可以)
ctrl+o                 #光標返回到以前的位置。相當于光標移動的“撤銷”
ctrl+i                 #光標返回到后來的位置。相當于光標移動的“恢復(fù)”
ctrl+v                 #批量注釋:ctrl+v進入塊模式選擇,選擇要操作的行。按I(在行首插入),輸入//,按Esc結(jié)束。

經(jīng)驗之談

#通常: <num> + command 是重復(fù)多少次命令的意思,如
10k(j)                 #向上(下)移動10行,重復(fù)執(zhí)行k命令10次,下同。
10h(l)                 #向左(右)移動10列
10w(b)                 #向后(前)移動10個word
5cc                    #修改從當前行開始的5行內(nèi)容
5dd                    #剪切從當前行開始的5行內(nèi)容

最后引用一張圖片助記:


vim
vim
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 公司新員工學習有用到,Vim官網(wǎng)的手冊又太大而全,而網(wǎng)上各方資料要么不全面,要么不夠基礎(chǔ)。在網(wǎng)上搜集各方資料,按照...
    甲魚閱讀 161,363評論 43 685
  • 公司新員工學習有用到,Vim官網(wǎng)的手冊又太大而全,而網(wǎng)上各方資料要么不全面,要么不夠基礎(chǔ)。在網(wǎng)上搜集各方資料,按照...
    夏時花開閱讀 2,498評論 1 31
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,558評論 9 467
  • 參考鏈接 插入排序:希爾排序(Shell's Sort) 白話經(jīng)典算法系列之三 希爾排序的實現(xiàn) 希爾排序是1959...
    夢即是幻閱讀 449評論 0 0
  • 從他第一次找我去蹭課開始,我才開始有意識到,班里還有這么一個男生存在~ 我之前并不知道自己為什么會答應(yīng)陪他一起去蹭...
    瑯?gòu)值暗?/span>閱讀 316評論 0 0