vim基本命令
1.vim
#在命令行中輸入vim,進入vim編輯器
2.i
#按一下i鍵,下端顯示 --INSERT--
#插入命令,在vim中可能任意字符都有作用
3.Esc
#退出i(插入)命令進行其它命令使用
4.:r filename
#讀入一個文件內容,并寫入到當前編輯器中
5.:w newfilename
#將該編輯器中的內容寫入到一個新文件中
6.:w
#在編輯的過程中保存文件,相當于word中的ctrl+s
7.:! command
暫時離開 vi 到指令列模式下執行 command 的顯示結果!例如
:!ls
#在編輯過程中執行shell命令ls
8.:sh
#進入shell命令行,執行完命令后ctrl+d退出重新進入vim編輯繼續編輯
在shell命令下,執行ctral+l完成清屏
9.:wq
#保存文件并退出
10.ZZ
#保存文件并退出,同上一個命令,注意大寫
11.:q!
#強制退出,不保存
12.:set number或者:set nu
#使編輯中的文件顯示行號
13.:set nonumber或者:set nonu
#與上一條命令相反,不顯示行號
14.:help i
#查看插入命令幫助
15.u
#撤消上一步操作
16./Fedora
#查找Fedora字符
17.:s /Fedora/Redhat
#將Fedora字符替換為Redhat(只替換在光標所在的行)
18.dw
#刪除單詞
dd
#刪除行
19.o
#打開空白一行
20.vim + filename
#進行文件最后一行進行編輯
21.vim +n filename
#進入文件第n行進行編輯
22.:1,.s/redhat/fedora
#.號表示當前行,即光標所在行
#將第1行到當前行(.)第一次出現的redhat字符代替為fedora
23.:1,.s/redhat/fedora/g
#將第1行到當前行(.)所有出現的redhat字符代替為fedora,g
全局標志
24.:1,$s/redhat/fedora/g
#$表示最后一行
#將第1行到最后一行所有出現的redhat字符代替為fedora
25.:%s/redhat/fedora/g
#同上一個命令
26.:%s/\/fedora/g
#將第1行到最后一行所有出現的redhat字代替為fedora
#字,而不是字符
27.:f
#顯示文件內容,狀態等等
#同ctrl+g命令
28.:e!
#當前文件,返回到上次保存
:e file
#切換編輯文件
29.:n
#當編輯時有多個文件(比如vim file1 file2)時切換到下一個文件,與:e file
結合使用
?
??? ?? ?? ?? ?? ?? ?? ?? ???VIM命令大全
光標控制命令
命令? ?? ?? ?? ?? ?? ? 光標移動
h? ?? ?? ?? ?? ?? ? 向左移一個字符
j? ?? ?? ?? ?? ?? ? 向下移一行
k? ?? ?? ?? ?? ?? ? 向上移一行
l? ?? ?? ?? ?? ?? ? 向右移一個字符
G? ?? ?? ?? ?? ?? ? 移到文件的最后一行
w? ?? ?? ?? ?? ?? ? 移到下一個字的開頭
W? ?? ?? ?? ?? ?? ? 移到下一個字的開頭,忽略標點符號
b? ?? ?? ?? ?? ?? ? 移到前一個字的開頭
B? ?? ?? ?? ?? ?? ? 移到前一個字的開頭,忽略標點符號
L? ?? ?? ?? ?? ?? ? 移到屏幕的最后一行
M? ?? ?? ?? ?? ?? ? 移到屏幕的中間一行
H? ?? ?? ?? ?? ?? ? 移到屏幕的第一行
e? ?? ?? ?? ?? ?? ? 移到下一個字的結尾
E? ?? ?? ?? ?? ?? ? 移到下一個字的結尾,忽略標點符號
(? ?? ?? ?? ?? ?? ?? ???移到句子的開頭
)? ?? ?? ?? ?? ?? ?? ???移到句子的結尾
{? ?? ?? ?? ?? ?? ?? ???移到段落的開頭
}? ?? ?? ?? ?? ?? ?? ???移到下一個段落的開頭
0(數字), |? ?? ?? ?? ?? ? 移到當前行的第一列
^? ?? ?? ?? ?? ?? ?? ???移到當前行的第一個非空字符
$? ?? ?? ?? ?? ?? ?? ???移到當前行的最后一個字符
+, Enter? ?? ?? ?? ? 移到下一行的第一個字符
-? ?? ?? ?? ?? ?? ?? ???移到前一行的第一個非空字符
在 vi 中添加文本
命令? ?? ?? ?? ?? ?? ? 插入動作
a? ?? ?? ?? ?? ?? ? 在光標后插入文本
A? ?? ?? ?? ?? ?? ? 在當前行插入文本
i? ?? ?? ?? ?? ?? ? 在光標前插入文本
I? ?? ?? ?? ?? ?? ? 在當前行前插入文本
o? ?? ?? ?? ?? ?? ? 在當前行的下邊插入新行
O? ?? ?? ?? ?? ?? ? 在當前行的上邊插入新行
s? ?? ?? ?? ?? ?? ? 刪除光標所在處字符,并進入插入模式
S? ?? ?? ?? ?? ?? ? 刪除光標所在的行,并進入插入模式
:r file? ?? ?? ?? ? 讀入文件 file 內容,并插在當前行后
:nr file? ?? ?? ?? ?讀入文件 file 內容,并插在第 n 行后
Esc? ?? ?? ?? ?? ???回到命令模式
^v char? ?? ?? ?? ? 插入時忽略 char 的指定意義,這是為了插入特殊字符
在 vi 中刪除文本
命令? ?? ?? ?? ?? ?? ? 刪除操作
x? ?? ?? ?? ?? ?? ? 刪除光標處的字符
dw? ?? ?? ?? ?? ?? ?刪至下一個字的開頭
dG? ?? ?? ?? ?? ?? ?刪除行,直到文件結束
dd? ?? ?? ?? ?? ?? ?刪除整行
db? ?? ?? ?? ?? ?? ?刪除光標前面的字
:n,md? ?? ?? ?? ?? ?從第 m 行開始往前刪除 n 行
d, d$? ?? ?? ?? ?? ?從光標處刪除到行尾
^h, backspace? ?? ? 插入時,刪除前面的字符
^w? ?? ?? ?? ?? ?? ?插入時,刪除前面的字
修改 vi 文本
每個命令前面的數字表示該命令重復的次數
命令? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 替換操作
rchar? ?? ?? ?? ?? ?? ?? ?? ? 用 char 替換當前字符
R text escape? ?? ?? ?? ?? ???用 text 替換當前字符直到按下 Esc 鍵
stext escape? ?? ?? ?? ?? ?? ?用 text 代替當前字符
S 或 cctext escape? ?? ?? ?? ? 用 text 代替整行
cwtext escape? ?? ?? ?? ?? ???將當前字改為 text
Ctext escape? ?? ?? ?? ?? ?? ?將當前行余下的改為 text
cG escape? ?? ?? ?? ?? ?? ?? ?修改至文件的末尾
ccursor_cmd text escape? ?? ? 從當前位置處到光標命令位置處都改為 text
在 vi 中查找與替換
命令? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 查找與替換操作
/text? ?? ?? ?? ?? ?? ?? ?? ? 在文件中向前查找 text
?text? ?? ?? ?? ?? ?? ?? ?? ? 在文件中向后查找 text
n? ?? ?? ?? ?? ?? ?? ?? ?? ???在同一方向重復查找
N? ?? ?? ?? ?? ?? ?? ?? ?? ???在相反方向重復查找
ftext? ?? ?? ?? ?? ?? ?? ?? ? 在當前行向前查找 text
Ftext? ?? ?? ?? ?? ?? ?? ?? ? 在當前行向后查找 text
ttext? ?? ?? ?? ?? ?? ?? ?? ? 在當前行向前查找 text,并將光標定位在 text 的第一個字符
Ttext? ?? ?? ?? ?? ?? ?? ?? ? 在當前行向后查找 text,并將光標定位在 text 的第一個字符
:set ic? ?? ?? ?? ?? ?? ?? ???查找時忽略大小寫
:set noic? ?? ?? ?? ?? ?? ?? ?查找時對大小寫敏感
:ranges/pat1/pat2/g? ?? ?? ???用 newtext 替換 oldtext
:m,ns/oldtext/newtext? ?? ?? ?在 m 行通過 n,用 newtext 替換 oldtext
&? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 重復最后的 :s 命令
:g/text1/s/text2/text3? ?? ???查找包含 text1 的行,用 text3 替換 text2
:g/text/command? ?? ?? ?? ?? ?在所有包含 text 的行運行 command 所表示的命令
:v/text/command? ?? ?? ?? ?? ?在所有不包含 text 的行運行 command 所表示的命令
在 vi 中復制文本
命令? ?? ?? ?? ?? ?? ?? ? 復制操作
yy? ?? ?? ?? ?? ?? ???將當前行的內容放入臨時緩沖區
nyy? ?? ?? ?? ?? ?? ? 將 n 行的內容放入臨時緩沖區
p? ?? ?? ?? ?? ?? ?? ?將臨時緩沖區中的文本放入光標后
P? ?? ?? ?? ?? ?? ?? ?將臨時緩沖區中的文本放入光標前
"(a-z)nyy? ?? ?? ?? ? 復制 n 行放入名字為圓括號內的可命名緩沖區,省略 n 表示當前行
"(a-z)ndd? ?? ?? ?? ? 刪除 n 行放入名字為圓括號內的可命名緩沖區,省略 n 表示當前行
"(a-z)p? ?? ?? ?? ?? ?將名字為圓括號的可命名緩沖區的內容放入當前行后
"(a-z)P? ?? ?? ?? ?? ?將名字為圓括號的可命名緩沖區的內容放入當前行前
在 vi 中撤消與重復
命令? ?? ?? ?? ?? ?撤消操作
u? ?? ?? ?? ?? ?撤消最后一次修改
U? ?? ?? ?? ?? ?撤消當前行的所有修改
.? ?? ?? ?? ?? ?? ?重復最后一次修改
,? ?? ?? ?? ?? ?? ?以相反的方向重復前面的 f、F、t 或 T 查找命令
;? ?? ?? ?? ?? ?? ?重復前面的 f、F、t 或 T 查找命令
"np? ?? ?? ?? ? 取回最后第 n 次的刪除(緩沖區中存有一定次數的刪除內容,一般為 9)
n? ?? ?? ?? ?? ?重復前面的 / 或 ? 查找命令
N? ?? ?? ?? ?? ?以相反方向重復前面的 / 或 ? 命令
保存文本和退出 vi
命令? ?? ?? ?? ?? ?? ?? ? 保存和/或退出操作
:w? ?? ?? ?? ?? ?? ???保存文件但不退出 vi
:w file? ?? ?? ?? ?? ?將修改保存在 file 中但不退出 vi
:wq 或 ZZ 或 :x? ?? ?? ?保存文件并退出 vi
:q!? ?? ?? ?? ?? ?? ? 不保存文件,退出 vi
:e!? ?? ?? ?? ?? ?? ? 放棄所有修改,從上次保存文件開始再編輯
vi 中的選項
選項? ?? ?? ?? ?? ?? ?? ? 作用
:set all? ?? ?? ?? ???打印所有選項
:set nooption? ?? ?? ?關閉 option 選項
:set nu? ?? ?? ?? ?? ?每行前打印行號
:set showmode? ?? ?? ?顯示是輸入模式還是替換模式
:set autoindent? ?? ?? ? 繼承前一行的縮進方式,特別適用于多行注釋
:set smartindent? ?? ???為C程序提供自動縮進
:set list? ?? ?? ?? ? 顯示制表符(^I)和行尾符號
:set ts=8? ?? ?? ?? ? 為文本輸入設置 tab stops
:set window=n? ?? ?? ?設置文本窗口顯示 n 行
:set number? ?? ?? ???顯示行數
:set nonumber? ?? ?? ?取消顯示行數
vi 的狀態
選項? ?? ?? ?? ?? ?? ? 作用
:.=? ?? ?? ?? ?? ?? ?? ?打印當前行的行號
:=? ?? ?? ?? ?? ?? ?? ?打印文件中的行數
ctrl+g? ?? ?? ?? ? 顯示文件名、當前的行號、文件的總行數和文件位置的百分比
:l? ?? ?? ?? ?? ???使用字母 "l" 來顯示許多的特殊字符,如制表符和換行符
在文本中定位段落和放置標記
選項? ?? ?? ?? ?? ?? ?? ? 作用
{? ?? ?? ?? ?? ?? ?? ?? ? 在第一列插入 { 來定義一個段落
[[? ?? ?? ?? ?? ?? ?? ?? ? 回到段落的開頭處
]]? ?? ?? ?? ?? ?? ?? ?? ? 向前移到下一個段落的開頭處
m(a-z)? ?? ?? ?? ?? ? 用一個字母來標記當前位置,如用 mz 表示標記 z
'(a-z)? ?? ?? ?? ?? ? 將光標移動到指定的標記,如用 'z 表示移動到 z
在 vi 中連接行
選項? ?? ?? ?? ?? ?? ?? ? 作用
J? ?? ?? ?? ?? ?? ?? ?將下一行連接到當前行的末尾
nJ? ?? ?? ?? ?? ?? ???連接后面 n 行
光標放置與屏幕調整
選項? ?? ?? ?? ?? ?? ?? ? 作用
H? ?? ?? ?? ?? ?? ?? ?將光標移動到屏幕的頂行
nH? ?? ?? ?? ?? ?? ???將光標移動到屏幕頂行下的第 n 行
M? ?? ?? ?? ?? ?? ?? ?將光標移動到屏幕的中間
L? ?? ?? ?? ?? ?? ?? ?將光標移動到屏幕的底行
nL? ?? ?? ?? ?? ?? ???將光標移動到屏幕底行上的第 n 行
^e(ctrl+e)? ?? ?? ?? ?將屏幕上滾一行
ctrl+y? ?? ?? ?? ?? ? 將屏幕下滾一行
ctrl+u? ?? ?? ?? ?? ? 將屏幕上滾半頁
ctrl+d? ?? ?? ?? ?? ? 將屏幕下滾半頁
ctrl+b? ?? ?? ?? ?? ? 將屏幕上滾一頁
ctrl+f? ?? ?? ?? ?? ? 將屏幕下滾一頁
ctrl+l? ?? ?? ?? ?? ? 重繪屏幕
z-return? ?? ?? ?? ???將當前行置為屏幕的頂行
nz-return? ?? ?? ?? ? 將當前行下的第 n 行置為屏幕的頂行
z.? ?? ?? ?? ?? ?? ???將當前行置為屏幕的中央
nz.? ?? ?? ?? ?? ?? ? 將當前行上的第 n 行置為屏幕的中央
z-? ?? ?? ?? ?? ?? ???將當前行置為屏幕的底行
nz-? ?? ?? ?? ?? ?? ? 將當前行上的第 n 行置為屏幕的底行
vi 中的 shell 轉義命令
選項? ?? ?? ?? ?? ?? ?? ? 作用
:!command? ?? ?? ?? ? 執行 shell 的 command 命令,如 :!ls
:!!? ?? ?? ?? ?? ?? ?? ?? ? 執行前一個 shell 命令
:r!command? ?? ?? ?? ?讀取 command 命令的輸入并插入,如 :r!ls 會先執行 ls,然后讀入內容
:w!command? ?? ?? ?? ?將當前已編輯文件作為 command 命令的標準輸入并執行 command 命令,如 :w!grep all
:cd directory? ?? ?? ?將當前工作目錄更改為 directory 所表示的目錄
:sh? ?? ?? ?? ?? ?? ? 將啟動一個子 shell,使用 ^d(ctrl+d) 返回 vi
:so file? ?? ?? ?? ???在 shell 程序 file 中讀入和執行命令
vi 中的宏與縮寫
(避免使用控制鍵和符號,不要使用字符 K、V、g、q、v、*、= 和功能鍵)
選項? ?? ?? ?? ?? ?? ?? ? 作用
:map key command_seq 定義一個鍵來運行 command_seq,如 :map e ea,無論什么時候都可以 e 移到一個字的末尾來追加文本
:map? ?? ?? ?? ?? ?? ?在狀態行顯示所有已定義的宏
:umap key? ?? ?? ?? ? 刪除該鍵的宏
:ab string1 string2? ?定義一個縮寫,使得當插入 string1 時,用 string2 替換 string1。當要插入文本時,鍵入 string1 然后按 Esc 鍵,系統就插入了 string2
:ab? ?? ?? ?? ?? ?? ? 顯示所有縮寫
:una string? ?? ?? ???取消 string 的縮寫
在 vi 中縮進文本
選項? ?? ?? ?? ?? ?? ?? ?作用
ctrl+i或 tab? ???插入文本時,插入移動的寬度,移動寬度是事先定義好的
:set ai? ?? ?? ?? ?? ?打開自動縮進
:set sw=n? ?? ?? ?? ? 將移動寬度設置為 n 個字符
n>? ?? ?? ?? ?? ?? ? 使 n 行都向右移動一個寬度,例如 3>> 就將接下來的三行每行都向右移動一個移動寬度
轉載于:https://www.cnblogs.com/simpman/archive/2013/01/14/2859201.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: C# 线程手册 第五章 扩展多线程应用程
- 下一篇: Linux中的Kdump