vim命令大全

1. vim模式

正常模式(按Esc或Ctrl+[進入) 左下角顯示文件名或為空

插入模式(按i進入) 左下角顯示--INSERT--

可視模式(按v進入) 左下角顯示--VISUAL--

替換模式(按r或R開始) 左下角顯示 --REPLACE--

命令行模式(按:或者/或者?開始)

ex模式 沒用過,有興趣的同學可以自行了解

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 \qadrive\test\1.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 的繼續查找命令依然可以適用

精準查找:匹配單詞查找

如果文本中有?hello,helloworld,hellopython

那我使用 /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將視為相同的語法元素,并使用同樣的配色方案

?

轉載于:https://www.cnblogs.com/wanghao-boke/p/11575171.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384820.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384820.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384820.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

signal()函數

函數原型 void (*signal(int sig,void(*func)(int)))(int); 指定使用sig指定的信號編號處理信號的方法。參數func指定程序可以處理信號的三種方式之一&#xff1a; l 默認處理(SIG_DFL)&#xff1a; 信號由該特定信號的默認動作處理l 忽略信號&#xff08;SIG_IGN&a…

setitimer()函數

定時器時間函數 struct itimerval&#xff1a;struct itimerval *new_value&#xff0c;其定義如下&#xff1a;struct itimerval {struct timeval it_interval; /*next value*/struct timeval it_value; /*current value*/};struct timeval {long tv_sec; /*seconds*/lonng t…

shell編程題(三)

將一目錄下所有的文件的擴展名改為bak #! /bin/bashfor i in ls domv $i ${i%%.*}.bak done ${i%%.*} 截掉一個變量字符串第一個"."以及其右側的所有字符&#xff0c;即最短前綴匹配。 #! /bin/bashdir./ #指定文件夾for file in $dir*.txt #指定文件夾下面文件類型…

VMware安裝VMwaretools

默認點擊“安裝VMware Tools&#xff08;T&#xff09;”選項下載好安裝包 下載的安裝包放在計算機的media目錄下 進入/media/ubuntu14-04/VMware Tools目錄&#xff1a; cd /media/ubuntu14-04/VMware Tools 將安裝包復制到tmp文件夾下&#xff1a; cp VMwareTools-10.0.5-322…

shell編程題(四)

編譯當前目錄下的所有.c文件 #!/bin/bashif [ $# -lt 1 ] ;then #如果輸入參數小于1則報錯 $# C語言中的argv[0] 輸入參數個數echo "Please follow up file.c!"echo "eg: ./make.sh xxx.c"exit fiif [[ $2 "debug" ]] ;then #如果第三個參數…

stat函數

int lstat(const char *path,struct stat*buf) 當文件是一個符號鏈接時&#xff0c;lstat返回的是該符號鏈接本身的信息&#xff0c;而stat返回的是該鏈接指向的文件的信息。 struct stat {dev_t st_dev; //設備號碼ino_t st_ino; //inode節點號mo…

字符串函數參數傳入傳出(字符串反轉)

/*** strstr.c ***/ #include<stdio.h> #include<string.h>//求字符串p中abcd出現的次數 //自定義函數接口完成業務函數和main函數分開 int getCount(char *mystr,char *sub,int *ncount) {int ret 0;if(mystr NULL || sub NULL || ncount NULL){ret -1;print…

字符串函數參數傳入傳出(去空格)

字符串作為函數參數傳入傳出 /*** delSpace.c ***/ #include<stdio.h> #include<string.h>int DelSpace(char *str) {int iRet -1;int i ;int j ;int ncount 0;char *out str;if(NULL str ){printf("the point in is NULL\n");return iRet;}i 0;j …

字符串的規范使用

有一個字符串”1a2b3d4z”,&#xff1b; 要求寫一個函數實現如下功能&#xff0c; 功能1&#xff1a;把偶數位字符挑選出來&#xff0c;組成一個字符串1。valude&#xff1b;20分 功能2&#xff1a;把奇數位字符挑選出來&#xff0c;組成一個字符串2&#xff0c;valude 20 功能…

字符串的規范使用(二)

鍵值對&#xff08;”key valude”&#xff09;字符串&#xff0c;在開發中經常使用&#xff1b; 要求1&#xff1a;請自己定義一個接口&#xff0c;實現根據key獲取valude&#xff1b;40分 要求2&#xff1a;編寫測試用例。30分 要求3&#xff1a;鍵值對中間可能有n多空格&am…

字符串逆序打印

版本1 兩個指針從頭到尾和從尾到頭交換內容逆序 /*** str_reverse.c ***/ #include<stdio.h> #include<string.h>int main() {char buf[] "abcdrfg";int len strlen(buf);char *p1 buf;char *p2 buf len - 1;while(p1 < p2){char c *p1;*p1 *p…

realloc()函數

原型&#xff1a;extern void *realloc(void *mem_address, unsigned int newsize); 參數&#xff1a; mem_address&#xff1a; 要改變內存大小的指針名newsize &#xff1a; 新的內存大小。 如果分配內存減少&#xff0c;realloc僅僅改變索引的信息。 如果將…

fgets()函數

聲明&#xff1a;  char *fgets(char *str&#xff0c;int n,FILE* stream) 參數&#xff1a;  str—這是指向一個字符數組的指針&#xff0c;該數組存儲了要讀取的字符串 n – 這是要讀取的最大字符數&#xff08;包括最后的空字符&#xff09;。通常是使用以str傳遞的數組…

C語言實現文件類型統計函數

#include<dirent.h> #include<limits.h> #include<sys/stat.h> #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h>#define FTW_F 1 //標記非目錄文件 #define FTW_D 2 //標…

C語言實現多線程排序

#include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <string.h>/* 聲明變量 */ int array_length, file_length; int *array_master; FILE *freader;/* 用于從文件讀取數據 */ int *read_file(char *fname) {freader fopen(fnam…

linux線程操作

初始化條件變量 int pthread_cond_init(pthread_cond_t *cv,pthread_cond_attr *cattr); 函數返回值&#xff1a;返回0表示成功&#xff0c;返回其他表示失敗。 參數&#xff1a; pthread_cond_attr是用來設置pthread_cond_t的屬性&#xff0c;當傳入的值是NULL的時候表…

Linux下多線程模擬停車場停車

#include<stdio.h> #include<string.h> #include<unistd.h> #include<stdlib.h> #include<pthread.h>#define ONE_SECOND 1000000 #define RANGE 10 #define PERIOD 2 #define NUM_THREADS 4typedef struct {int *carpark; //用一個數組來模…

【C++學習之路】第一章——C++核心方法總論

1 C核心方法總論 1.1 核心思想 通過實際項目來學習編程&#xff0c;更高效掌握編程規則&#xff0c;以及明白各種語法規則的實際應用。 實驗思想&#xff1a;任何C的參考資料都不可能覆蓋你遇到的所有問題&#xff0c;這個時候&#xff0c;最好的辦法就是&#xff0c;編輯代…

【Verilog HDL學習之路】第一章 Verilog HDL 數字設計總論

1 Verilog HDL 數字設計總論 1.1 幾個重要的概念 EDA&#xff08;Electronic Design Automation&#xff09; 電子技術自動化 EDA工具 類似于軟件工程中的IDE&#xff08;集成開發環境&#xff09;&#xff0c;能夠使用Verilog HDL語言描述電路設計&#xff0c;并且能夠通過邏…

【學會如何學習系列】從嬰兒到大學——學習的本質從未改變過

從嬰兒到大學——學習的本質從未改變過 從我們出生一直到現在&#xff0c;其實&#xff0c;學習的本質從來都沒有改變過&#xff0c;并且&#xff0c;嬰兒時期的我們&#xff0c;是學習能力最強的時候&#xff0c;隨著我們不斷長大&#xff0c;外界的誘惑越來越多&#xff0c;…