學會這21條,你離 Vim 大神就不遠了!

2021-02-14 Python愛好者社區

正常模式(按Esc或Ctrl+[進入) 左下角顯示文件名或為空
插入模式(按i進入) 左下角顯示--INSERT--
可視模式(按v進入) 左下角顯示--VISUAL--

2. 打開文件

# 打開單個文件
vim file    
# 同時打開多個文件
vim file1 file2..  

# 在vim窗口中打開一個新文件
:open [file]       

【舉個例子】
# 當前打開1.txt,做了一些編輯沒保存
:open!         放棄這些修改,並重新打開未修改的文件

# 當前打開1.txt,做了一些編輯並保存
:open 2.txt    直接退出對1.txt的編輯,直接打開2.txt編輯,省了退出:wq再重新vim 2.txt的步驟


# 打開遠程文件,比如ftp或者share folder
:e ftp://192.168.10.76/abc.txt
:e qadriveest.txt

# 以只讀形式打開文件,但是仍然可以使用 :wq! 寫入
vim -R file 

# 強制性關閉修改功能,無法使用 :wq! 寫入
vim -M file 

3. 插入命令

i 在當前位置生前插入
I 在當前行首插入

a 在當前位置後插入
A 在當前行尾插入

o 在當前行之後插入一行
O 在當前行之前插入一行

4. 查找命令

最簡單的查找

/text  查找text,按n健查找下一個,按N健查找前一個。
?text  查找text,反向查找,按n健查找下一個,按N健查找前一個。

vim中有一些特殊字符在查找時需要轉義  .*[]^%/?~$

:set ignorecase  忽略大小寫的查找
:set noignorecase  不忽略大小寫的查找

快速查找,不需要手打字符即可查找

*        向後(下)尋找遊標所在處的單詞
#        向前(上)尋找遊標所在處的單詞


以上兩種查找,n,N 的繼續查找命令依然可以適用

精準查找:匹配單詞查找

如果文本中有這三個單詞

hellohelloworldhellopython

那我使用 /hello ,這三個詞都會匹配到。

有沒有辦法實現精準查找呢?你可以使用

/hello>

精準查找:匹配行首、行末

# hello位於行首
/^hello

# world位於行末
/world$

5. 替換命令

~  反轉遊標字母大小寫

r<字母>           將當前字符替換為所寫字母
R<字母><字母>...  連續替換字母

cc    替換整行(就是刪除當前行,並在下一行插入)
cw    替換一個單詞(就是刪除一個單詞,就進入插入模式),前提是遊標處於單詞第一個字母(可用b定位)
C     (大寫C)替換至行尾(和D有所區別,D是刪除(剪切)至行尾,C是刪除至行位並進入插入模式)

: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行每行前面加四個空格,用於縮進。

ddp    交換光標所在行和其下緊鄰的一行。

6. 撤銷與重做

u 撤銷(Undo)

U 撤銷對整行的操作

Ctrl + r 重做(Redo),即撤銷的撤銷。

7. 刪除命令

需要說明的是,vim 其實並沒有單純的刪除命令,下面你理解為剪切更加準確。

以字符為單位刪除

x   刪除當前字符
3x  刪除當前字符3次

X   刪除當前字符的前一個字符。
3X  刪除當前光標向前三個字符

dl  刪除當前字符, dl=x
dh  刪除前一個字符,X=dh

D   刪除當前字符至行尾。D=d$
d$  刪除當前字符至行尾
d^  刪除當前字符之前至行首

以單詞為單位刪除

dw  刪除當前字符到單詞尾
daw 刪除當前字符所在單詞

以行為單位刪除

dd  刪除當前行
dj  刪除下一行
dk  刪除上一行

dgg  刪除當前行至文檔首部
d1G  刪除當前行至文檔首部
dG   刪除當前行至文檔尾部

kdgg  刪除當前行之前所有行(不包括當前行)
jdG   刪除當前行之後所有行(不包括當前行)



10d     刪除當前行開始的10行。
:1,10d  刪除1-10行
:11,$d  刪除11行及以後所有的行
:1,$d   刪除所有行
J     刪除兩行之間的空行,實際上是合併兩行。

8. 複製粘貼

普通模式中使用y複製

yy   複製遊標所在的整行(3yy表示複製3行)

y^   複製至行首,或y0。不含光標所在處字符。
y$   複製至行尾。含光標所在處字符。

yw   複製一個單詞。
y2w  複製兩個單詞。

yG   複製至文本末。
y1G  複製至文本開頭。

普通模式中使用p粘貼

p(小寫):代表粘貼至光標後(下邊,右邊)
P(大寫):代表粘貼至光標前(上邊,左邊)

9. 剪切粘貼

dd    其實就是剪切命令,剪切當前行
ddp   剪切當前行並粘貼,可實現當前行和下一行調換位置


正常模式下按v(逐字)或V(逐行)進入可視模式
然後用jklh命令移動即可選擇某些行或字符,再按d即可剪切

ndd 剪切當前行之後的n行。利用p命令可以對剪切的內容進行粘貼

:1,10d 將1-10行剪切。利用p命令可將剪切後的內容進行粘貼。

:1, 10 m 20 將第1-10行移動到第20行之後。

10. 退出保存

:wq 保存並退出

ZZ 保存並退出

:q! 強制退出並忽略所有更改

:e! 放棄所有修改,並打開原來文件。

ZZ 保存並退出

:sav(eas) new.txt  另存為一個新文件,退出原文件的編輯且不會保存
:f(ile) new.txt    新開一個文件,並不保存,退出原文件的編輯且不會保存

11. 移動命令

以字符為單位移動

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


# 【定位字符】f和F
fx    找到光標後第一個為x的字符
3fd   找到光標後第三個為d的字符

F   同f,反向查找。

以行為單位移動

# 10指代所有數字,可任意指定
10h  左移10個字符
10l  右移10個字符
10k  上移10行
10j  下移10行

$   移動到行尾 
3$  移動到下面3行的行尾

以單詞為單位移動

w  向前移動一個單詞(光標停在單詞首部)
b  向後移動一個單詞
e,同w,只不過是光標停在單詞尾部
ge 同b,光標停在單詞尾部。

以句為單位移動

(   移動到句首
)   移動到句尾

跳轉到文件的首尾

gg  移動到文件頭。 = [[  == ``
G   移動到文件尾。 = ]]

其他移動方法

^   移動到本行第一個非空白字符上。
0   移動到本行第一個字符上(可以是空格)

使用 具名標記 跳轉,個人感覺這個很好用,因為可以跨文件。

使用 ma ,可以將此處標記為 a,使用  a 進行跳轉
使用 :marks 可以查看所有的標記
使用 :delm!可以刪除所有的標記

當在查看錯誤日誌時,正常的步驟是,vim打開文件,然後使用 shift+g  再跳轉到最後一行,這裡有個更簡單的操作可以在打開文件時立即跳到最後一行。只要在 vim 和 文件 中間加個 + 即可。

vim + you.log

舉一反三,當你想打開文件立即跳轉到指定行時,可以這樣

# 打開文件並跳轉到 20 行
vim you.log +20

當你使用 / 搜索定位跳轉或者使用 :行號 進行精準跳轉時,有時我們想返回到上一次的位置,如何實現?

只要使用 Ctrl+o 即可返回上一次的位置。

12. 排版功能

縮進

:set shiftwidth?   查看縮進值
:set shiftwidth=4  設置縮進值為4

# 縮進相關 最好寫到配置文件中  ~/.vimrc
:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab

>>   向右縮進
<<   取消縮進

如何你要對代碼進行縮進,還可以用 == 對當前行縮進,如果要對多行對待縮進,則使用 n==,這種方式要求你所編輯的文件的擴展名是被vim所識別的,比如.py文件。

排版

:ce   居中
:le   靠左
:ri   靠右

13. 注釋命令

多行注釋

進入命令行模式,按ctrl + v進入 visual block模式,然後按j, 或者k選中多行,把需要注釋的行標記起來

按大寫字母I,再插入注釋符,例如//

按esc鍵就會全部注釋了

取消多行注釋

進入命令行模式,按ctrl + v進入 visual block模式,按字母l橫向選中列的個數,例如 // 需要選中2列

按字母j,或者k選中注釋符號

按d鍵就可全部取消注釋

複雜注釋

:3,5 s/^/#/g 注釋第3-5行
:3,5 s/^#//g 解除3-5行的注釋


:1,$ s/^/#/g 注釋整個文檔
:1,$ s/^#//g 取消注釋整個文檔


:%s/^/#/g 注釋整個文檔,此法更快
:%s/^#//g 取消注釋整個文檔

14. 調整視野

"zz":命令會把當前行置為屏幕正中央,
"zt":命令會把當前行置於屏幕頂端
"zb":則把當前行置於屏幕底端.

Ctrl + e 向下滾動一行
Ctrl + y 向上滾動一行

Ctrl + d 向下滾動半屏
Ctrl + u 向上滾動半屏

Ctrl + f 向下滾動一屏
Ctrl + b 向上滾動一屏


【跳到指定行】:兩種方法

可以先把行號打開
:set nu  打開行號

:20    跳到第20行
20G    跳到第20行

15. 區域選擇

要進行區域選擇,要先進入可視模式

v   以字符為單位,上下左右選擇
V   以行為單位,上下選擇

選擇後可進行操作
d   剪切/刪除
y   複製

Ctrl+v   如果當前是V(大寫)模式,就變成v(小寫)
         如果當前是v(小寫)模式,就變成普通模式。
         如果當前是普通模式,就進入v(小寫)模式

利用這個,可以進行多行縮進。

ggVG   選擇全文

16. 窗口控制

新建窗口

# 打開兩個文件分屬兩個窗口
vim -o 1.txt 2.txt


# 假設現在已經打開了1.txt

:sp 2.txt   開啟一個橫向的窗口,編輯2.txt
:vsp 2.txt  開啟一個豎向的窗口,編輯2.txt

:split        將當前窗口再複製一個窗口出來,內容同步,遊標可以不同
:split 2.txt  在新窗口打開2.txt的橫向窗口

# 需要注意:內容同步,但是遊標位置是獨立的

Ctrl-w s    將當前窗口分成水平窗口
Ctrl-w v    將當前窗口分成豎直窗口

Ctrl-w q    等同:q 結束分割出來的視窗。
Ctrl-w q!   等同:q! 結束分割出來的視窗。
Ctrl-w o    打開一個視窗並且隱藏之前的所有視窗

窗口切換

# 特別說明:Ctrl w <字母> 不需要同時按

Ctrl-w h    切換到左邊窗口
Ctrl-w l    切換到右邊窗口

Ctrl-w j    切換到下邊窗口
Ctrl-w k    切換到上邊窗口


# 特別說明:全屏模式下
:n    切換下一個窗口
:N    切換上一個窗口
:bp   切換上一個窗口

# 特別說明:非全屏模式

:bn    切換下一個窗口,就當前位置的窗口的內容變了,其他窗口不變
:bN    切換上一個窗口,就當前位置的窗口的內容變了,其他窗口不變

窗口移動

# 特別說明:Ctrl w <字母> 不需要同時按

Ctrl-w J   將當前視窗移至最下面
Ctrl-w K   將當前視窗移最上面

Ctrl-w H   將當前視窗移至最左邊
Ctrl-w L   將當前視窗移至最右邊

Ctrl-ww    按順序切換窗口

調整尺寸

# 友情提示:鍵盤切記不要處於中文狀態

Ctrl-w +   增加窗口高度
Ctrl-w -   減少窗口高度

退出窗口

:close    關閉當前窗口
:close!   強制關閉當前窗口

:q       退出,不保存
:q!      強制退出,不保存

:x       保存退出
:wq      保存退出
:wq!     強制保存退出

:w <[路徑/]文件名>        另存為
:savesa <[路徑/]文件名>   另存為

ZZ 保存並退出。

:only    關閉所有窗口,只保留當前窗口(前提:其他窗口內容有改變的話都要先保存)
:only!   關閉所有窗口,只保留當前窗口

:qall 放棄所有操作並退出
:wall 保存所有,
:wqall 保存所有並退出。

17. 文檔加密

vim -x file_name

然後輸入密碼:
確認密碼:

如果不修改內容也要保存。:wq,不然密碼設定不會生效。

18. 錄製宏

按q鍵加任意字母開始錄製,再按q鍵結束錄製(這意味著vim中的宏不可嵌套),使用的時候@加宏名,比如qa。。。q錄製名為a的宏,@a使用這個宏。

19. 執行命令

# 重複前一次命令


# 執行shell命令
:!command

# 比如列出當前目錄下文件
:!ls 

# 執行腳本
:!perl -c script.pl 檢查perl腳本語法,可以不用退出vim,非常方便。
:!perl script.pl 執行perl腳本,可以不用退出vim,非常方便。

:suspend或Ctrl - Z 掛起vim,回到shell,按fg可以返回vim。

20. 幫助命令

在Unix/Linux系統上
$ vimtutor

# 普通模式下
鍵盤輸入vim或F1

# 命令行模式下

:help     顯示整個幫助
:help xxx 顯示xxx的幫助,比如 :help i, :help CTRL-[(即Ctrl+[的幫助)。
:help  number  Vim選項的幫助用單引號括起


在Windows系統上
:help tutor

21. 配置命令

顯示當前設定

:set或者:se顯示所有修改過的配置
:set all 顯示所有的設定值
:set option? 顯示option的設定值
:set nooption 取消當期設定值
:ver   顯示vim的所有信息(包括版本和參數等)

# 需要注意:全屏模式下
:args   查看當前打開的文件列表,當前正在編輯的文件會用[]括起來

更改設定

:set nu   顯示行號

set autoindent(ai)   設置自動縮進
set autowrite(aw)    設置自動存檔,默認未打開
set backup(bk) 設置自動備份,默認未打開

set background=dark或light,設置背景風格

set cindent(cin) 設置C語言風格縮進

:set ts=4   設置tab鍵轉換為4個空格

:set ff=unix   # 修改文件dos文件為unix

:set shiftwidth?   查看縮進值
:set shiftwidth=4  設置縮進值為4

:set ignorecase  忽略大小寫的查找
:set noignorecase  不忽略大小寫的查找

:set paste  # insert模式下,粘貼格式不會亂掉

:set ruler?  查看是否設置了ruler,在.vimrc中,使用set命令設制的選項都可以通過這個命令查看

:scriptnames  查看vim腳本文件的位置,比如.vimrc文件,語法文件及plugin等。

:set list 顯示非列印字符,如tab,空格,行尾等。如果tab無法顯示,請確定用set lcs=tab:>-命令設置了.vimrc文件,並確保你的文件中的確有tab,如果開啟了expendtab,那麼tab將被擴展為空格。


:syntax        列出已經定義的語法項
:syntax clear  清除已定義的語法規則

:syntax case match    大小寫敏感,int和Int將視為不同的語法元素
:syntax case ignore   大小寫無關,int和Int將視為相同的語法元素,並使用同樣的配色方案


以上就是我使用 Vim 的一些使用總結,希望對你能有幫助。

最後,送你一張 Vim 的鍵盤圖,你可以將它設置為你的電腦桌面,對你初學 Vim 可能會有幫助。

圖1

圖2

重磅!Python交流已成立

為了給小夥伴們提供一個互相交流的技術平臺,特地開通了Python交流群。群裡有不少技術大神,不時會分享一些技術要點,更有一些資源收藏愛好者不時分享一些優質的學習資料。(免費,不賣課!)


▲長按掃碼

相關焦點

  • vim快捷鍵收藏版
    全部刪除:全部複製: 全選高亮顯示:單行複製:單行刪除:粘貼:註:vim只能粘貼50行的問題:在當前用戶主目錄(~)編輯~/.vimrc(如果不存在,新建這個文件),添加一行至於為什麼要輸入輸入』1000,這個其實不重要,最主要的是輸入<
  • linux-vi或vim命令
    vi編輯中中文亂碼,修改方法:set encoding=utf-8 或set encoding=utf8高級一些的編輯器,都會包含宏功能,vim當然不能缺少了,在vim中使用宏是非常方便的::qx 開始記錄宏,並將結果存入寄存器xq 退出記錄模式@x 播放記錄在x寄存器中的宏命令
  • vim命令使用總結
    2.2.2 vim查找默認是大小寫敏感查找在查找模式中加入\c表示大小寫不敏感查找,\C表示大小寫敏感查找例如:/foo\c 會查找所有foo、FOO、fOOD等2.2.3 查找光標所在單詞在命令模式下按下:*:匹配當前光標所在的單詞(這裡的單詞是指前後為空白字符或者點號,例如當前為foo, 可以匹配foo bar中的
  • linux中的vim命令
    如何查看命令的幫助文檔,三種方式:內置命令:help ls外部命令:ls --help,簡單的幫助文檔手冊man ls, 通過使用man查看詳細的幫助內容vim和vi命令本質上就是一個命令,這個命令是在linux命令中專門用來編輯文本文件的
  • 【評測】Vimtag小雪人智能攝像機評測
    無論是家庭防護防盜還是看顧老人小孩,智能攝像機都能幫你解決這些問題。前不久vimtag(微目騰科)推出智能雲攝像機CP1,據介紹,該款智能雲攝像機受到廣大家庭的喜愛。拿到機子後,迫不及待就打開了,現場就試用起來,我們一起來看下這款小雪人攝像頭的魅力吧。一、開箱篇
  • Linux 下 非常強大的Vim命令合集詳解
    啟動vim 在命令行窗口中輸入以下命令即可 vim 直接啟動vim vim filename 打開vim並創建名為filename的文件 文件命令 打開單個文件 vim file 同時打開多個文件 vim file1 file2 file3 ...
  • 和平精英:大神的天秀操作有哪些?學會這幾種,成為大神指日可待
    和平精英這個遊戲中,大神級別的玩家有些操作往往是普通玩家望塵莫及的,尤其是在遊戲中展示出來的各種騷操作更是讓不少萌新玩家嘆為觀止。因為萌新玩家想要打出這些操作,往往只能依靠運氣這一歐皇屬性才能實現,那麼下面就讓我們一起來看一下大神們的逆天操作吧。
  • 女人活的精彩,離不開這3句話,學會了成功離你就不遠了
    你有沒有發現你身邊有些女性,活得非常精彩,不管是她的婚姻生活還是自己的事業,都順風順水,其實不然,在這些幸福的背後,她都是付出了努力的。如果你也想像她一樣擁有一個非常精彩的人生,那麼你一定要記住以下這三句話,這三句話會在你心裡埋下種子,讓你通過不斷的灌溉水滴而茁壯成長。
  • @程式設計師,不容錯過的 Vim 實用技巧請查收!
    通常這算得上是一件好事。然而,在我看來,不斷發現新事物也許是失敗之處,因為你很難知道Vim還有哪些功能。雖然人們經常談論模態編輯或文本對象的美感,但我認為這並不是Vim的本質。Vim是一個拼湊而成的子系統,每一部分都塞滿了各種特殊用途的工具。僅在普通模式下就有超過一百種不同的鍵盤輸入命令。密集的功能成就了Vim的實用性。
  • 馬保國微信群和網友開罵:找著你打你!你離屎不遠了
    網易體育11月18日報導:昨日網曝微信名為「武林奇人谷」的武術交流群,網友「接化發大神」辱罵馬保國的母親,導致馬保國震怒。破口大罵!
  • 學會了這五道菜就真的離廚師不遠了
    >5.待蝦尾變色,加入蘆筍,鹽,現磨胡椒少許糖,檸檬片翻炒即可出鍋裝盤龍蝦濃湯(lobster bisque)我為什麼一定要標出菜的英文名字其實是有我自己的想法的,這些來自西方的菜餚,越是歷史悠久,也就越有它們自己的傳統在裡面,可是中文的名字大家只會看到這些菜的表象,所以想給大家多介紹一些,讓有興趣了解西方美食文化的小吃貨們多一點知識儲備,回頭再在餐廳吃到這些菜,你就可以和小夥伴們滔滔不絕了
  • 就算天空離我那麼遠,我還是充滿歡喜
    度用一段流光,默默將你安放,也不至於讓自己為難。2.我主動來找你,是因為我太喜歡你,我已經不主動找你,因為你每一句回復都敷衍得那麼不走心,不是不喜歡你了,只是不敢再那樣喜歡了。3.最美好的時刻,來源於想起朋友;最感動的時刻,來自被朋友想起;無論身處何方,有緣就有人惦記;沒有相逢約定,卻有默契的巧遇;相識為緣:祝朋友幸福快樂!
  • 學會一點穿搭技巧,「酒杯腿」離你不遠了!
    別小小看了「腿粗」,就是這麼一個小問題,除了會影響你的正常穿搭,還會直接影響到你的氣質,對於追求氣質的成熟女性來說,這一點尤為重要。 「腿粗」女孩怎麼穿?學會一點穿搭技巧,「酒杯腿」離你不遠了!
  • 開發者的實用 Vim 插件(一) - OSCHINA - 中文開源技術交流社區
    插件安裝設置這是為新用戶準備的,假設他們不知道如何安裝 Vim 插件。所以,首先,就是給出一些完成安裝設置的步驟。在你的Home目錄下創建 .vim 目錄,並在其中創建子目錄 autoload 和 bundle。然後,在 autoload 放置 pathogen.vim 文件,這個文件可以從此處 下載。
  • 你,離我遠一點
    首頁被《越界》刷了好久的屏,今天來介紹一下History系列的另一部劇,《離我遠一點》。
  • 十條段子:麻煩你離我遠一點
    3小白兔正在窩邊吃著胡蘿蔔,看見遠處有隻黃鼠狼朝自己走來,嚇得撒腿就跑。黃鼠狼說:「你瞎跑什麼?我又不愛吃小白兔!」驚慌的小白兔說:「我怕你搶我的胡蘿蔔!」4馬上中考了,我跟同學們說到時候會有心理輔導老師一起過來提前跟你們溝通半個小時,這時候一個同學說,老師,你不要擔心我們會跳樓,我怕你看見我們成績你會跳樓。
  • 陳楚生《我知道你離我不遠》:楚楚可聽
    文/《東方風雲榜》樂評 動感101主持人 羅毅看到陳楚生說搞錯自己星座的時候,其實我覺得這是一件非常「陳楚生」的事情:和他聊過天,這個人總是淡淡地笑慢慢地說,也許是和王嘯坤踢球的小事也許是笑對自己緋聞的自嘲
  • 超過130 個你需要了解的 vim 命令
    從 1970 年開始,vi 和 vim 就成為了程式設計師最喜愛的文本編輯器之一。
  • 做好人生的加減法,幸福就離你不遠
    當我們對自己的人生有一點了解之後,我們就要學會處理自己人生中的那些事。數學裡最基本的運算是加法和減法,人生同樣如此,要想自己的人生能夠順順利利,獲得幸福,就必須學會加法和減法。有幾樣東西,是我們一定不應該增加太多的,第一件事情就是欲望,當一個人的欲望太多太強的時候,他很容易就失去獨立的意志而被欲望控制,陷入欲望的泥潭裡無法自拔。第二件不能增加的東西是傲氣,我們常說,人不能有傲氣,但不能無傲骨,這句話是很有道理的,一個人如果總是驕傲自大,那麼他就很難取得更大的進步。
  • 《小丑》:當拉扯我們的三條線斷了,我們也就離小丑不遠了
    這是一部國內很難或者說不會公映的影片,但卻不妨礙喜歡的人們去觀看。電影是虛構的,但卻緊密聯繫著當下的社會。但是,這三根線卻相繼斷了。亞瑟患有疾病,情緒激動的時候,他就會大笑,他卻不知道,他的病是他母親縱容男友虐待的結果;亞瑟和女鄰居一見鍾情,他們之間的感情就想烈火一樣兇猛,但他一直不知道這全是假的;亞瑟崇拜喜劇明星富蘭克林,但有一天,他卻被富蘭克林當做了節目的笑料,盡興貶低,認為他永遠都不能成為一個合格的單口相聲演員。