VI常用命令集合

ForTechnology發表於2012-10-19

VI常用命令集合

 

轉載自:http://blog.chinaunix.net/uid-20769502-id-112737.html

 

1、移動及跳轉:
:n 跳轉到n行,n表示行號
nG 跳轉到n行,n表示行號
CTRL-] 跳轉到當前游標所在單詞對應的主題
CTRL-O 回到前一個位置
h 左
j 下
k 上
l 右
W 向前移動一個word
b 向後移動一個word
$ 命令將游標移動到當前行行尾
^ 命令將游標移動到當前行的第一個非空白字元上
0 命令則總是把游標移動到當前行的第一個字元上
fx 在當前行上查詢下一個字元x
% 跳轉到與之匹配的括號處
gf 命令方便地跳轉到游標下的檔名所代表的檔案中
`. 跳轉到最近修改過的位置
“ 跳轉到最近游標定位的位置
m{mark} 將當前游標下的位置名之為標記{mark},從a到z一共可以使用26個自定義的標記
`{mark} 跳轉到一個你定義的{mark}標記
50%mF 到檔案的半中間(”50%”)處設定一個名為F的全域性標記
G 游標定位到最後一行上
gg 游標定位到第一行上
50% 游標定位在檔案的中間
H 游標定位在螢幕的第一行
M 游標定位在螢幕的中間
L 游標定位在螢幕的最後一行
CTRL-U 命令會使文字向下滾動半屏
CTRL-D 命令將視窗向下移動半屏
CTRL-F 命令將向前滾動一整屏(實際上是整屏去兩行)
CTRL-B 命令將向後滾動一整屏(實際上是整屏去兩行)
zz 命令會把當前行置為螢幕正中央(z字取其象形意義模擬一張紙的摺疊及變形位置重置)
zt 命令會把當前行置於螢幕頂端(t意為top)
zb 命令會把當前行置於螢幕底端(b意為bottom)
:jumps 列出關於你曾經跳轉過的位置的列表,你最後一個跳轉的位置被特別以一個”>”號標記
:marks 列出自定義的標記,包含VIM內部自定義的標識
2、搜尋
/ 命令可用於搜尋一個字串,在鍵入的過程中還可以用箭頭鍵和刪除鍵進行移動和修改
? 命令與“/”的工作相同, 只是搜尋方向相反
n 繼續搜尋下一個字串
N 命令與“n”的工作相同, 只是搜尋方向相反
* 向下完整匹配游標下的單詞
# 向上完整匹配游標下的單詞
g 向下部分匹配游標下的單詞
Ctrl-P 向前搜尋可匹配的單詞並完成
Ctrl-N 向後搜尋可匹配的單詞並完成
:set ignorecase 設定忽略大小寫
:set hlsearch 高亮顯示搜尋結果
:set incsearch 鍵入目標字串的過程中Vim就同時開始了搜尋工作
:set nowrapscan 會使搜尋過程在檔案結束時就停止
3、編輯(新增、刪除、移動、複製)
x 代表dl(刪除當前游標下的字元)
X 代表dh(刪除當前游標左邊的字元)
D 代表d$(刪除到行尾的內容)
C 代表c$(修改到行尾的內容)
s 代表cl(修改一個字元)
S 代表cc(修改一整行)
diw 刪除當前游標所在的word(不包括空白字元),意為Delete Inner Word
daw 刪除當前游標所在的word(包括空白字元),意為Delete A Word
dG 刪除當前行至檔案尾的內容
dgg 刪除當前行至檔案頭的內容
cis 修改一整個句子,意為change Inner Sentence
R 讓Vim進入replace模式,在此模式下,每個鍵入的字元都會替換掉當前游標下的字元
p 取回被刪除的內容,可以使用命令記數(在Vim中這叫put)
P 與”p”一樣取回被刪除的內容, 不過它把被取回的內容置於游標之前
yw 複製一個word,同樣可以使用命令記數,c表示change而不是copy
yy 複製一整行
y$ 複製當前游標至行尾
~ 改變當前游標下字元的大小寫
3、在vi中替換字串:
:s/vivian/sky/ 替換當前行第一個vivian為sky
:s/vivian/sky/g 替換當前行所有vivian為sky,g表示global
:n,$s/vivian/sky/ 替換第n行開始到最後一行中每一行的第一個vivian為sky,n為數字
:n,$s/vivian/sky/g 替換第n行開始到最後一行中每一行所有vivian為sky
:.,$s/vivian/sky/g 替換當前行開始到最後一行中每一行所有vivian為sky
:%s/vivian/sky/(等同於 :g/vivian/s//sky/) 替換每一行的第一個 vivian 為 sky,%表示所有行
:%s/vivian/sky/g(等同於 :g/vivian/s//sky/g)替換每一行中所有 vivian 為 sky
:s#vivian/#sky/# 替換當前行第一個vivian/為sky/,可以使用#作為分隔符,此時中間出現的/不會作為分隔符
:3,$s/^/some string/ 在檔案的第一行至最後一行的行首前插入some string
:%s/$/some string/g 在整個檔案每一行的行尾新增some string
:%s/\s\+$// 去掉所有的行尾空格,“\s”表示空白字元(空格和製表符),“\+”對前面的字元匹配一次或多次(越多越好),“$”匹配行尾(使用“\$”表示單純的 “$”字元)
:%s/\(\s*\n\)\+/\r/ 去掉所有的空白行,“\(”和“\)”對錶達式進行分組,使其被視作一個不可分割的整體。
:%s!\s*//.*!! 去掉所有的“//”註釋
:%s!\s*/\*\_.\{-}\*/\s*!!g 去掉所有的“”註釋
3、檔案處理
:w /tmp/1 既然沒法存檔,不想放棄所做的所有修改,先臨時存到/tmp/1。
:20,59w /tmp/1 或者僅僅把第20到59行之間的內容存檔成檔案/tmp/1。
:X 檔案加密,會提示輸入密碼。
vim -x exam.txt 新編輯的檔案加密,會提示輸入密碼。
vim -R file 只讀方式開啟檔案。
vimdiff main.c~ main.c 顯示兩個檔案的不同之處
:args 顯示檔案列表
:n 切換到檔案2 (n=next)。
:N 切換回檔案1。
:scriptnames 顯示VIM載入的vimrc
VIM命令的固定模式: 操作符命令+位移命令
:version 顯示VIM版本資訊,包含特性、編譯方式及配置檔案目錄
:map 列出當前已定義的對映
ptions 開啟一個新視窗, 在該視窗的最開頭的註釋下面是一個選項列表
:help E37
5、常用快捷方式:
“.”:重複上次的修改命令
“Ctrl-X Ctrl-L”:搜尋可匹配的行並完成
“Ctrl-X Ctrl-F”:搜尋可匹配的檔名並完成
“Ctrl-G”:顯示檔名,當前游標所在行的行號,總的行數,以及當前行所在檔案中的百分比和當前游標所在的列的資訊
“ZQ”:無條件退出
“ZZ”:(存檔退出)
“ga”:顯示游標下的字元在當前使用的encoding下的內碼
“guw”:游標下的單詞變為小寫
“gUw”:游標下的單詞變為大寫
“xp”:左右交換游標處兩字元的位置
“ddp”:上下交換游標處兩行的位置,p命令把它取回來(在Vim中這叫put)
“J”:兩行合併為一行, 也就是說兩行之間的換行符被刪除了
“u”:撤消上一次命令
“Ctrl+R”:重做上一次命令
“o”:在當前行的下面另起一行, 並使當前模式轉為Insert模式
6、執行外部命令
“:!命令”:可以在 Vim 中執行一個外部命令
“:r!”:命令可以在外部命令執行的結果插入到當前編輯的緩衝區中
“:%!nl”:要對包含空行的所有行進行編號
“:!echo $VIMRUNTIME” 顯示VIM的目錄(/usr/share/vim/vim63)
“vimtutor” 顯示VIM的30分鐘的教程
7、set選項:
:set list 檢視製表符,現在每個製表符都會以^I顯示. 同時每行行尾會有一個$字元。
:set key= 去掉檔案加密。
:syntax enable 開啟彩色
:set number? 顯示number的值
:set number& 恢復選項的預設值
:set autoindent 讓Vim在開始一個新行時對該行施以上一行的縮排方式
:set showcmd 在Vim視窗的右下角顯示一個完整的命令已經完成的部分
:set autowrite 設定自動存檔
:set backup 設定備份,生成的備份檔名將是原檔名後面附加一個~
:set backupext=.bak 設定備份檔名後輟

標籤
:tabnew 開啟新標籤頁.
:tabe 在新標籤頁開啟檔案.
+ PageUp, PageDown 切換標籤頁.
:tabnext, tabprev 切換標籤頁,Putty 下只能用這個.
檔案
:e 開啟檔案.
:enew 新檔案.
:w 儲存.
:wa 全部儲存.
:w 另存為.
:wq 儲存並退出.
:x 儲存並退出.
:q 退出.
:qa 全部退出.
:q! 強制退出.
文字
esc 切換命令模式 (距離太遙遠了,用 Ctrl+C 代替吧).
i 插入模式.
I 在當前行開頭插入.
R 替換模式.
a 在游標後插入.
A 在當前行尾部插入.
v Visual 模式按字元選擇.
V Visual 模式按行選擇.
游標
h 左移游標.
j 下移游標.
k 上移游標.
l 右移游標.
gg 將游標移到檔案頭部.
G 將游標移到檔案尾部.
#G 移動游標到指定行#. 例如: 5G
編輯
u 撤銷.
. 重做.
dd 刪除當前行.
#dd 刪除幾行. 例如: 3dd
d^ 刪除到行首.
d$ 刪除到行尾.
:#,&d 刪除 # 到 & 行. 例如: 3,5d
yy 拷貝當前行到剪貼簿.
#yy 拷貝 # 行到剪貼簿.
y^ 從檔案頭開始拷貝.
y$ 拷貝到檔案尾部.

:#,&y 拷貝 # 到 & 行. 例如: 4,5y
p 在游標後貼上.
P 貼上到游標前.

>> 增大縮排.
<< 減少縮排.
== 自動縮排.
查詢替換
/# 查詢 #. 例如: /printf
?# 反向查詢 #.
n 查詢下一個.
N 反向查詢下一個.
:s/old/new/g 當前行無提示替換.
:%s/old/new/g 無提示替換.
:%s/old/new/gc 確認替換.
:#,&s/old/new/g 從 # 到 & 行無提示替換.
書籤跳轉
:marks 檢視所有書籤, 輸入 ":" 可跳轉.
m 定義書籤, 如 ma 在當前行定義名為 a 的書籤.
` 跳轉到某書籤, "`" 為鍵盤 Tab 上一行第一鍵.
:jumps 檢視所有跳轉記錄, 輸入 ":" 可跳轉.
+ o 返回上一次跳轉處.
+ i 和 + o 反向轉處.
Ctags
:! ctags -R . 生成 ctags 檔案.
+ ] 檢視函式定義.
+ T 返回.
shift + k 檢視函式 man 幫助資訊.
Code
gg=G 原始碼格式化
其他
! 執行命令.
:r 插入檔案內容.
:r ! 插入命令輸出結果.
:cd 修改預設工作目錄.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-746787/,如需轉載,請註明出處,否則將追究法律責任。