Vim使用小記(一)常用操作


By francis_hao    Sep 22,2016

vim的功能自然不止如此,這里只是把日常使用頻率較高的記錄下來,若想了解vim的全部功能可查閱其幫助手冊:help,或者查詢指定命令的用法:help xx

 

選項

選項

說明

+[num]

對第一個文件,在打開后,光標將會定位在第num行,如果num沒有指定,光標將會定位在最后一行

+/<pat>

對第一個文件,光標將會定位在第一次出現pat的地方,查看":help search-pattern" 了解可用的搜索模式

-o[N]

以橫向方式同時打開N個窗口,如果沒有指定N,就為每個文件打開一個窗口

-O[N]

以縱向方式同時打開N個窗口,如果沒有指定N,就為每個文件打開一個窗口

 

基本用法

進入插入模式命令

i

在光標前開始插入文本

a

在光標后開始插入文本

o

在當前行之下新開一行

O

在當前行之上新開一行

光標移動命令

gg, :0 

光標轉到首行行首

G, :$

光標轉到末行行首

0

光標移到本行行首

$

光標移到本行行尾

n+

光標下移n行

n-

光標上移n行

nG, :n

光標移至n行行首

Ctrl+u 

上翻半屏(up)

Ctrl+d

下翻半屏(down)

Ctrl+b

上翻一屏(backwards)

Ctrl+f

下翻一屏(forward)

()

句子移動

{}

段落移動

光標定位到屏幕頂部

M

光標定位到屏幕中間

L

光標定位到屏幕底部

w

光標向前移動一個單詞(word)

b

光標向后移動一個單詞(back)

e

光標移動到當前單詞的結尾(end)

zt 

將當前行變為屏幕第一行(top)

zz

將當前行變為屏幕中間行

zb

將當前行變為屏幕尾行

Ctrl+e

屏幕上移一行但光標位置不變

Ctrl+y

屏幕下移一行但光標不變

刪除復制和替換

dd 

刪除整行

d0 

從當前位置刪至行首

d$, D

從當前位置刪至行尾

ndd

刪除n行

dl

刪除光標位置一個字符

dw

刪除當前位置至單詞結尾

cc 

刪除當前行並進入插入模式,cl,cw類似d

yy

復制當前行,yl,yw類似d

p

粘貼

r

修改光標所在位置字符

s

刪除光標所在位置字符並進入插入模式

u

撤銷上一次的操作

Ctrl+r

恢復上一次的操作

查找和替換

/pattern

從光標處開始向文件尾搜索pattern,在pattern后加\c可以不區分大小寫

?patern

從光標處開始向文件首搜索pattern

n

在同一方向重復上一次搜索命令

N

在反方向重復上一次搜索命令

: nohlsearch (noh)

取消搜索結果的高亮顯示

:s/p1/p2/g 

將當前行中所有p1用p2替代

:n1,n2s/p1/p2/g 

將第n1至n2行中所有p1均用p2替代 :1,$從第一行到末行=%

*

向文件尾搜索匹配光標所在字

#

向文件首匹配光標所在字

寄存器說明

vim里有許多寄存器,暫時只記錄平時有用過的。

"" 

默認寄存器,文本來源命令d/c/s/x/y

"0 

復制緩存,來源為yy命令

"1-"9 

刪除緩存,來源為dd命令

"a-"z

自定義的寄存器,不會被系統自動沖刷,總是存儲最后一次使用的值。

"A-"Z : 向"a-"z寄存器中追加新內容而不是覆蓋,雖然"A-"Z本身不是寄存器,但是卻可以引用。

"ayy 

復制當前行並將其存放在"a寄存器中

"_ 

黑洞寄存器,只進不出

:reg 

查看寄存器里的值(全名為:registers)

eg:

下圖左側是vi中的文字,1yy表示第一次執行yy命令,以下以此類推,右側為執行后的寄存器中的值

 

擴展部分

雜項

v

可視行

Ctrl+v

可視列

Ctrl+g

查看當前文件信息(文件名和行數)

:!command 

暫時退出vi,執行command命令並輸出結果

!!command

執行command命令並將執行結果輸出到當前行(覆蓋方式)

!}command

執行command命令並將執行結果輸出到當前行和之后的行中(覆蓋方式)

:r hello

將hello文件讀入當前文件中

:n1,n2 w>>fox

將n1至n2追加到fox文件中

:Ex

(:Explore)開啟目錄瀏覽,可以瀏覽當前目錄下的所有文件,可以選擇

:Sex

(:Sexplore)水平分割當前窗口,並在一個窗口中開啟目錄瀏覽器

:shell

不關閉vi切換到shell命令行,退回到vi使用:exit

.

重復上一個操作

多文件編輯

$vi f1 f2 f3

同時打開f1 f2 f3

:n

切換到下一個文件(:next)

:bn

切換到下一個文件(:bnext)

:prev

切換到上一個文件(:previous)

:bp

切換到上一個文件(:bprevious)

:n#

 

切換最近兩個文件

:e#

Ctrl+6

:buffers

顯示緩沖區的文件列表

:ls

:b buffnum

切換到buffnum的文件,buffnum是緩沖文件列表的值

:bd buffnum

關閉buffnum的文件(:bdelete )

:rewind

切換到第一個文件

:e f4

在緩沖區添加新的文件,和之前打開的文件屬於並列關系

:e!

重新載入當前文件,用在撤銷當前所有做過的修改

:mksession! [name.vim]

保存多文件會話狀態

$vim –S name.vim

vim重載之前的多文件會話狀態

:source name.vim

手動重載之前會話

多標簽

$vim –p f1 f2 f3

以多標簽的方式打開多個文件

gt

向右切換標簽

gT

向左切換標簽

:tabnew filename

添加一個新標簽

:tabc

關閉當前的tab

:tabo

關閉其他的tab只留當前一個

:tabs

查看所有打開的tab

:tabp

前一個

:tabn

后一個

 

set

vimrc

系統 vimrc 文件: "/etc/vimrc"(優先級低)

用戶 vimrc 文件: "$HOME/.vimrc"

第二用戶 vimrc 文件: "~/.vim/vimrc"

用戶 exrc 文件: "$HOME/.exrc"

 

vim的配置文件,一些配置信息可寫入此文件中,但也可以在打開的文件中使用:set以實現一次性的功能

:version

查看vim版本信息

.vimrc文件中的注釋行

:set paste

設置為粘貼模式,所見即所得,不會因為注釋亂了格式

:set 

顯示常用的設置值

:set list 

顯示不可見字符

vi編碼

set encoding=utf-8

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936

set termencoding=utf-8

程序員專用

雜項

K

跳轉到光標所在函數或命令的man手冊

J

將當前行的下一行合並到當前行

%

跳轉到匹配"{"對應的"}"的位置

gd

跳到局部的變量定義處,不能跨文件

gf

打開光標所在位置的文件名,一般是頭文件

ctrl+w f分屏打開文件

>

縮進,<:反縮進

Ctrl+o

跳轉到上一視圖,可用於搜索后、使用gg|G跳轉或tag跳轉的返回

''(兩個單引號)

在上一視圖和本視圖之間切換

ma

設置標簽a,之后可以通過`a跳轉到設置的標簽a處,類似的標簽:a-z

~

可轉換光標所在位置的字母大小寫

gg=G

整個文件重置縮進

2G=15G

第二行至第15行重置縮進

:set ft=c

設置文件類型是c (filetype)

:filetype

顯示當前文件類型相關的設置

文件比較

$vimdiff f1 f2

直觀的比較f1和f2的不同(vimdiff是shell下一個鏈接命令,指向vim)

:vertical diffsplit xxx

垂直方式比較當前文件和xxx文件

zo 

打開光標下面的一個折疊(open)

zO

打開光標下面的所有折疊

zc 

關閉光標下面的一個折疊(close)

zC

關閉光標下面的所有折疊

:set noscrollbind

取消文件比較中的同步滾屏功能

]c

跳到下一個修改點

[c

跳到上一個修改點

:diffupdate

在比較過程中,修改過一個文件后更新比較狀態

dp

把光標所在窗口的差異改到另一個窗口(:diffput)

do

把光標所在窗口的差異改為另一個窗口的(:diffget) o=obtain

:diffoff!

強制關閉比較模式

窗口分割

:split xxx

打開xxx並與當前文件水平排列

:vsplit xxx

打開xxx並與當前文件垂直排列,

:15split xxx

以占據15行的窗口打開文件xxx

:new [xxx]

新建(打開)一個與當前文件水平排列的文件

:vnew [xxx]

新建(打開)一個與當前文件垂直排列的文件

ctrl+w w

在打開的文件中跳轉

Ctrl+w [hjkl]

跳轉到[左下上右]的窗口

Ctrl+w [tb]

跳轉到最上/最下的窗口

Ctrl+w [HJKL]

把當前窗口移動到最[左下上右]邊

Ctrl+w +

擴大窗口(默認一行),5ctrl+w +(擴大5行)

Ctrl+w =

平分窗口

Ctrl+w _

擴大窗口到最大,帶參數{height}ctrl+w _

:res(ize) num

窗口大小調整為num行

:res(ize) +num

窗口大小增加num行

:vertical res(ize) num

窗口大小調整為num列

:close

關閉當前的(不能是最后一個)的窗口

Ctrl+w c

:only

關閉除當前窗口外的所有窗口

:qall

關閉所有打開的窗口

:wall

保存所有的打開的窗口文件

:wqall

保存並退出

$vim –o f1 f2 f3

以水平排列方式打開三個文件

$vim –O f1 f2 f3

以垂直排列方式打開三個文件

:all 

將已經打開的多個文件分配水平的窗口

:vertical all

將已經打開的多個文件分配垂直的窗口

Ctrl+w o

只顯示當前窗口,

ctags

$ctags --list-languages

顯示ctags支持的語言

$ctags --list-maps

默認支持的文件擴展名

$ctags -R

給當前文件夾下的所有文件建立tags

~set tags=/tags

在.vimrc文件中設置tags的路徑,如果有多個tags可以用","分割,或者set tags+=/tags進行添加。

:tag main

可以從打開的文件中跳到main函數處,即使打開的文件中沒有main函數(在別的文件中也可以跳過去)

Ctrl+]

以光標所在位置的單詞為tag跳轉

Ctrl+t

跳回到之前的位置,可以在前面加上跳轉的深度,3ctrl+t:跳回之前三層之上的位置

:tags

列出已經跳轉到過哪些tag了

:tag /^block<tab>

查找以block開頭的可能的tag

Ctrl+w+]

分割當前窗口並跳轉到光標所在位置的tag處

:stag xxx

$vim –t tag 

找到tag(函數,結構體等)所在文件並打開

:tn

多個匹配tags時跳轉下一個(:tnext)

:tp

多個匹配tags時跳轉上一個(:tprevious)

 

 


本文由 劉英皓 創作,采用 知識共享 署名-非商業性使用-相同方式共享 3.0 中國大陸 許可協議進行許可。歡迎轉載,請注明出處:
轉載自:http://www.cnblogs.com/yinghao1991/p/6517071.html

 

 

參考

 

【1】VIM使用系列:寄存器與復制粘貼緩沖區:https://my.oschina.net/shelllife/blog/144357

【2】VIM字符編碼設置:http://www.cnblogs.com/freewater/archive/2011/08/26/2154602.html

【3】linux下vim中文亂碼的解決方法:http://www.cnblogs.com/joeyupdo/archive/2013/03/03/2941737.html

【4】VIM技巧之分隔窗口:http://blog.chinaunix.net/uid-24673811-id-1994607.html

【5】vim中多標簽和多窗口的使用https://my.oschina.net/kutengshe/blog/464602

【6】開啟文件類型檢測:http://easwy.com/blog/archives/advanced-vim-skills-filetype-on/

【7】man vim


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM