VI的一些最常用命令和一些高階的應用(轉載)
本文旨在更有條理有歸納性地介紹VI的一些最常用命令和一些高階的應用。
[@more@]一:基本命令介紹:
1) 游標命令
k,j,h,l---上下左右游標移動命令,雖然你可以在Linux中使用鍵盤右邊的四個游標鍵,
但是記住這四個命令還有非常有用的,也就是右手在鍵盤上放置的位置部分
nG ----n為行數,該命令立即使游標跳到指定行。
Ctrl+G-----游標所在位置的行數和列數報告
w,b------使游標向前或向後跳過一個單詞
2) 編輯命令
i,a,r -------在游標的前,後,上方插入字元命令(i=insert,a=append,r=replace)
cw,dw------ 改變(置換)/刪除游標所在處的單詞的命令 (c=change,d=delete)
x,d$,dd -----刪除一個字元,游標所在處到行尾的所有字元,和整行的命令
3) 查詢命令
/string, ?string-----從游標所在處向後/向前查詢相應的字串的命令
4)複製複製命令
yy,p -----複製一行到剪貼簿/取出剪貼簿中內容的命令
進入vi(在系統提示符下面輸入以下指令):
vi 進入vi而不讀入任何檔案
二:常見問題及應用技巧
1) 在一個新檔案中讀/etc/passwd中的內容,取出使用者名稱部分
vi file
:r /etc/passwd 在開啟的檔案file中游標所在處讀入/etc/passwd
:%s/:.*//g 刪除/etc/passwd中使用者名稱後面的從冒號開始直到行尾的所有部分
:3r /etc/passwd 這是在指定的行號後面讀入檔案內容
另外一種方法刪掉檔案中所有的空行及以#開始的註釋行
#cat squid.conf.default | grep -v '^$' | grep -v '^#'
2) 在開啟一個檔案編輯後才知道登入的使用者對該檔案沒有寫權,不能存檔
vi file
:w /tmp/1 既然沒法存檔,不想放棄所做的所有修改,先臨時存到/tmp/1
:20,59w /tmp/1 或者僅僅把第20到59行之間的內容存檔成檔案/tmp/1
3) 用VI編輯一個檔案,但需要刪除大段大段的內容
vi file
Ctrl+G 把游標移到需要刪除的行的處按ctrl+G顯示行號,再到結尾處再按Ctrl+G.
:23,1045d 假定兩次行號為23和1045,則把這幾間的內容全刪除
也可以在開始和結束兩行中用ma,mb命令標記後用:'a,'bd刪除.
4) 在整個檔案或某幾行中在行首或行尾加一些字串
vi file
:3,$s/^/some string / 在檔案的第一行至最後一行的行首前插入some string
:%s/$/ some string/g 在整個檔案每一行的行尾新增 some string
:%s/string1/string2/g 在整個檔案中替換string1成string2
:3,7s/string1/string2/ 僅替換檔案中的第三到七行中的string1成string2
Note: s為substitute,%表示所有行,g表示global
5) 同時編輯兩個檔案,在兩個檔案中複製剪貼文字
vi file1 file2
yy 同時開啟兩個檔案,在檔案1的游標所在處複製所在行
:n 切換到檔案2 (n=next)
p 在檔案2的游標所在處貼上所複製的行
:N 切換回檔案1
6) 替換檔案中的路徑
:%s#/usr/bin#/bin#g 把檔案中所有路徑/usr/bin換成/bin
或者用
:%s//usr/bin//bin/g 在'/'前用符號指出'/'是真的單個字元'/'
vi filename 進入vi並讀入指定名稱的檔案(新、舊檔案均可)。
vi +n filename 進入vi並且由檔案的第幾行開始。
vi +filename 進入vi並且由檔案的最後一行開始。
vi + /word filename 進入vi並且由檔案的word這個字開始。
vi filename(s) 進入vi並且將各指定檔案列入名單內,第一個檔案先讀入。
vedit 進入vi並且在輸入方式時會在狀態行顯示“INSERT MODE"。
編輯數個檔案(利用vi filename(s))進入vi後)
:args 顯示編輯名單中的各個檔名
:n 讀入編輯名單中的下一個檔案
:rew 讀入編輯名單中的第一個檔案
:e# 讀入編輯名單內的前一個檔案
:e file 讀入另一個檔案進vi(此檔案可不在編輯名單內),若原檔案經修改還沒有存檔,則應先以: w 存檔。
:e! file 強迫讀入另一個檔案進入vi,原檔案不作存檔動作。
儲存及退出vi :w filename 存入指定檔案,但未退出vi(若未指定檔名則為當前工作的檔名)。
:wq 或者 或者zz 存檔案,並且退出vi.
:q 不作任何修改並退出vi。
:q! 放棄任何修改並退出vi。
:!command 暫時退出vi並執行shell指令,執行完畢後再回到vi。
:sh 暫時退出vi到系統下,結束時按Ctrl + d則回到vi。
加資料指令
i 在關標位置開始插入字元,結束時候按ESC鍵。
I 在游標所在行的最前面開始加字,結束時按ESC鍵。
a 在游標位置後開始加字,結束時按ESC鍵。
A 在游標所在行的最後面開始加字,結束時按ESC鍵。
o 在游標下加一空白行並開始加字,結束時按ESC鍵。
O 在游標上加一空白行並開始加字,結束時按ESC鍵。
!command 執行shell指令,並把結果加在游標所在行的下一行。
刪除指令 nx 刪除由游標位置起始的n個字元(含游標位置,按一個x表示刪除游標所在的字元)
nX 刪除由游標位置起始的n個字元(不含游標位置)。
ndw 刪除游標位置其實的n個字元組(word)。
d0 將行的開始到游標位置的字元全部刪除。
d$ 或D 將游標位置起始到行尾的字元全部刪除。
ndd 將游標位置起始的n行(整行)刪除(dd表示刪除游標所在行)。
:start,endd 刪除檔案的第start到end行。
關標移動
0 移到一行的開始
$ 移到一行的最後
[ 移到檔案開始位置
] 移到檔案結束位置
nh 往左移n位
nl或者spacebar 往右移n位
nk 向上移n行
n+ 向上移n行,游標在該行的起始
ni 向下移n行
n- 向下移n行,游標在該行的起始
H 移到螢幕的左上角
M 移到螢幕的中間行開頭
L 移到螢幕的最後一行
G 移到檔案的最後一行
nG或者:n 移到檔案的第n行
nw 右移n個字組,標點符號屬於字組
nW 右移n個字組,標點符號不屬於字組
nb 左移n個字組,標點符號屬於字組
nB 左移n個字組,標點符號不屬於字組
Ctrl + u 螢幕上卷半個選單
Ctrl + d 螢幕下卷半個選單
Ctrl + b 螢幕上卷一個選單
Ctrl + F 螢幕下卷一個選單
修改指令
r 修改游標檔案的字元
R 從游標位置開始修改,結束時按ESC鍵
new 更改n組字元,結束時按ESC鍵
ncc 從游標所在位置開始更改n行,結束時按ESC鍵
重排各行長度
i 並按Enter將該行由游標所在處斷開,並進入insert方式
J 把下一行的資料連線到本行之後
尋找指令 /text 從游標位置往下找字串text
?text 從游標位置往上找字串text
n 繼續找下一個字串(在輸入上面的尋找指令之後使用)
尋找並且取代指令
:getxt1/s/ /text2/options 將各行的text1替換為text2
option=g表示檔案中所有的text1均被取代,若未輸入任何option,則只有各行中的第一個出現的text1被取代
option=go 在螢幕顯示各取代的行
option=gc 在每個字串取代之前要求確認
Start,endgtext1/s/ / text2/options 同上,只尋找並取代第start~end行。
或:Start,ends/text1/text2/options
複製及移動檔案
:first,last co dest 將first 到last行的資料複製到目標行(dest)下面
:Start,end m dest 將start 到 end行的資料移動到目標行(dest)下。
:r filename 將指定檔案的內容讀入游標所在行下。
nY 將游標所在位置開始的n行資料暫存
p 複製暫存資料在游標的下一行
P 複製暫存資料在游標的上一行
其他命令 . 重複前一指令
u 取消前一指令
Ctrl + l 重新整理螢幕顯示
:set number 顯示檔案的行號,但不會存檔案
:set nonumber 解除行號顯示
:set ai 設定每行起始位置(以游標當前位置為起始)
:set noai 取消行起始位置設定
:f 或
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/216109/viewspace-1000117/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- react高階元件的一些運用React元件
- 關於一些nginx的高階擴充套件應用Nginx套件
- vi 的一些簡單命令(轉)
- 關於一些nginx的高階擴充套件應用薦Nginx套件
- vi常用命令(轉載)
- typedef的一些高階用法
- Nacos的一些高階功能
- VI高階命令集錦及VIM應用例項(轉)
- CSS使用的一些小技巧/高階進階CSS
- Ipython的一些高階用法(一)Python
- PWA 應用和原生應用的一些區別
- VI高階命令集錦(轉)
- 高階PHP工程師應該具備的一些技能PHP工程師
- react 高階元件的 理解和應用React元件
- 聊聊 KVC 和 KVO 的高階應用
- 使用 Google 高階搜尋的一些技巧Go
- 日期的一些應用
- 入門Java要學習的一些基本和高階工具Java
- Vim和Vi的常用命令
- javascript的高階應用JavaScript
- hive常用的一些高階函式彙總Hive函式
- ABAP Code Inspector 的一些高階功能分享
- SLAM應用的一些思考SLAM
- VI高階命令集錦 (轉自cu)
- SSH Tunnel (port forwarding) 的一些應用(轉帖)Forward
- aix 的一些常用命令AI
- Bash 指令碼程式設計的一些高階用法指令碼程式設計
- 關於高階複製的一些資料同步
- SAP中的一些FUNCTION應用Function
- 高階PHP工程師所應該具備一些技能PHP工程師
- ORACLE 11G dataguard的一些高階管理案例研究Oracle
- gradle的一些常用命令Gradle
- Linux的一些常用命令Linux
- NetMeeting高階應用 (轉)
- json格式的字串序列化和反序列化的一些高階用法JSON字串
- javascript高階函式的應用JavaScript函式
- C# 一些常用的框架分享(轉載)C#框架
- 程式設計師最應該知道的一些事程式設計師