vi用法
VI命令可以說是Unix/linux世界裡最常用的編輯文件的命令了,但是因為它的命令集眾多,很多人都不習慣使用它,其實您只需要掌握基本命令,然後加以靈活運用,就會發現它的優勢,並會逐漸喜歡使用這種方法。本文旨在介紹VI的一些最常用命令和高級應用技巧。
一、基本命令介紹
---- 1.光標命令
k、j、h、l——上、下、左、右光標移動命令。雖然您可以在linux中使用鍵盤右邊的4個光標鍵,但是記住這4個命令還是非常有用的。這4個鍵正是右手在鍵盤上放置的基本位置。
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——刪除一個字符、刪除光標所在處到行尾的所有字符以及刪除整行的命令。
按ESC跳出編輯模式到命令模式
---- 3.查找命令
---- /string、?string——從光標所在處向後或向前查找相應的字符串的命令。
---- 4.拷貝復制命令
---- yy、p——拷貝一行到剪貼板或取出剪貼板中內容的命令。
二、常見問題及應用技巧
---- 1.在一個新文件中讀/etc/passwd中的內容,取出用戶名部分。
---- vi file
---- :r /etc/passwd 在打開的文件file中光標所在處讀入/etc/passwd
---- :%s/:.*//g 刪除/etc/passwd中用戶名後面的從冒號開始直到行尾的所有部分。
---- 您也可以在指定的行號後讀入文件內容,例如使用命令“:3r /etc/passwd”從新文件的第3行開始讀入 /etc/passwd的所有內容。
---- 我們還可以使用以下方法刪掉文件中所有的空行及以#開始的注釋行。
---- #cat squid.conf.default | grep -v '^$' | grep -v '^#'
---- 2.在打開一個文件編輯後才知道登錄的用戶對該文件沒有寫的權限,不能存盤,需要將所做修改存入臨時文件。
---- vi file
---- :w /tmp/1 保存所做的所有修改,也可以將其中的某一部分修改保存到臨時文件,例如僅僅把第20~59行之間的內容存盤成文件/tmp/1,我們可以鍵入如下命令。
---- vi file
---- :20,59w /tmp/1
---- 3.用VI編輯一個文件,但需要刪除大段的內容。
---- 首先利用編輯命令“vi file”打開文件,然後將光標移到需要刪除的行處按Ctrl+G顯示行號,再到結尾處再按Ctrl+G,顯示文件結尾的行號。(注:可以先用命令:set nu來顯示全部的行號)
---- :23,1045d 假定2次得到的行號為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/ 僅替換文件中的第3行到第7行中的“string1”成“string2”。
---- 注意: 其中s為substitute,%表示所有行,g表示global。
---- 5.同時編輯2個文件,拷貝一個文件中的文本並粘貼到另一個文件中。
---- 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”實現,其中“”是轉義字符,表明其後的“/”字符是具有實際意義的字符,不是分隔符。(linux知識寶庫)
--------------------------------------------------------------------------------------------
vi的簡單用法:
進入vi後 有兩種模式
1.編輯模式
2.命令模式
進入vi後默認是命令模式,所以不要亂按 就會得到dd的警告聲,要輸入文字的話 請按a後i 就可以開始輸入文字拉!
輸入結束後 請按esc鍵回命令模式
輸入q就是退出
輸入wq就是存盤後退出
輸入q!放棄存盤強行退出
Vi 的使用
Vi 已經是 Unix 系統中標准的文字編輯器, 每個網管人員都必須熟悉它, 因為你會在維護系統時常常遇到它.
Vi 對初學者而言, 第一印象總是不好, 覺得它難用. 其實, 大家在用慣了辦公室軟件之後, 再回過頭來用這些未見過的怪物, 難免無法適應, 這是很正常的. 但別忘了, 各位都將是學校中重要網管的人員,您的角色不再是純粹的使用者, 而是一位面對復雜網絡的管理者及問題解決者, 你必須能夠親手操控你的系統, 設定你的系統, 調整你的系統, 而這個過程, 你就不得不去面對 Vi.
不要拿 Word 的使用習慣來挑剔 Vi, 它們的作用方向不同, 風格也不同, 一旦您能上手, 也許你會喜歡上它. Vi 是網絡管理人員的標准左右手.
So, 打開你的心, 接受會比反彈更有收獲.
二. 開啟檔案, 關閉檔案
vi 檔名 開啟檔案
: 進入命令列的方法
q 離開 (命令列)
wq 存盤然後離開 (命令列)
q! 放棄存盤, 強迫離開 (命令列)
ZZ 存盤然後離開 (不在命令列使用)
:e 檔名 在 Vi 中開啟檔案
三. Vi 的操作模式:
Vi 有二種主要的操作模式, ESC 鍵為單向的切換鍵(由本文輸入模式回到編輯命令模式)
編輯命令模式 : 要 vi 做一些特定目的的動作. 如插入,附加,取代,修改,刪除,移動光標,搜尋等等. 若是存盤等動作, 則需在命令列中下達, 欲切換至命令列, 需先按 :
本文輸入模式 : 在此模式下, 任何字符, 皆被視為輸入的數據.
一開始進入 Vi 之後, 即進入編輯命令模式, 你輸入的每一個字符, 皆被預視為一個指令. 有效的指令會被接受, 若是無效的指令, 會產生 beep beep 聲, 以示警告.
若想做輸入的動作, 必須切換為本文輸入模式, 切換的方法, 只要單按一個特殊意義的字符鍵即可, 如下所示:
按 i 或 I 插入狀態
按 a 或 A 附加狀態
按 R 取代狀態R 會進行連續字符取代
按 s 或 S 刪除一個字符;刪除光標所在那一列
按 cw, c2b, c$, c0 修改狀態
按 o 或 O 新增空白列
你不必一下子全用上, 只要會 i, a, o 這個三個模式即可勝任愉快, 因為大部份時候, 你也只用這三個.
OK, 現在你可以試著在本文輸入模式下, 鍵入一些資料看看. 然後, 按 ESC 切換回編輯命令模式.
四. 移動光標:
Vi 為了適用於各種不同的終端機模式, 因此以字鍵的方式來操控光標.
k j h l 上 下 左 右
Enter 換列
w b 往前一個 word ; 倒退一個 word
0 $ 至該列開頭 ; 至該列尾端
+ - 往下一列; 往上一列
請記住一個要訣:
在 Vi 中, 大部份的命令都可以在其前面加上數字, 該數字表示重復該命令的次數.
例如: 8l 表示往右移動 8 個字符, 3w 表示往前移動三個 word, 2b 表示倒退 2 個 word
注: word 的定義, 連續英數字元形成一個 word, 而其它特殊符號則每一個字符便是一個 word(除非連續特殊字符), 例如: --classify 中含有 2 個 word, 一個是 -- ; 一個是 classify
而 -x, 則有 3 個 word.
在特殊的終端機模式下, 方向鍵也是可以使用的. 如 linux 或 vt100.
其實大部份時候, 你仍可以保有使用方向鍵的習慣. 但大概只有 local 下才能使用 PgUp , PgDn, End, Home 等鍵喔!
不過, 若你所使用的終端機模式不支持方向鍵, 那麼上表中的按鍵, 就相當重要了.
五. 卷頁:
ctrl+f 往下一頁 (forward)
ctrl+b 往上一頁 (before)
ctrl+d 往下半個屏幕(down)
ctrl+u 往上半個屏幕(up)
六. 跳列:
你可以指定跳至某一列位置. 跳動之前, 先查看一下目前所在列數是多少.
ctrl+g 可以顯示目前的位置, 如: "ls.txt" line 53 of 264 --20%-- col 16-23
上面表示, 目前是在第 53 列, 全部共有 264 列, 占該檔百分之20的位置, 目前的光標, 實際是在第23行, 但只算成第16行, 因為中間有使用 tab 鍵.
80G 或 80gg 跳至第 80 列
G 跳至文件尾
gg 跳至文件頭
七. 刪除: (但不會進入本文輸入模式)
x 刪除一個字符
dd 刪除一行
r 取代一個字符
以上皆針對光標目前的所在位置產生作用.
還有 dw, db, de, d0, d$ 等命令, 但你不須一下子全用上. 上表中這三個夠用了.
記住一個要訣: Vi 的命令繁多, 但你真正用上手的不必多, 而且這些也就夠了.
八. undo (回復動作):
若你對上一個動作反悔了, 可以使用 undo 的功能:
u 取消上一個動作所產生的改變
U 取消光標所在那一列所有的改變
:e! 取消所有的改變, 回復至未修改之前
九. 關鍵詞搜尋/取代:
/ 關鍵詞 往下搜尋關鍵詞
? 關鍵詞 往上搜尋關鍵詞
n 重復搜尋命令(不管往下或往上) (注:等於是“尋找下一個”)
N 和 n 相反方向
cw字符串 以該字符串取代原有的關鍵詞
n. 繼續取代該字符串的動作
%s/目標/取代/g 將目標字符串全換成取代字符串
十. 選取、復制與搬移:
Y 或 yy 選取光標所在那一列
5Y 或 5yy 選取光標列所在共5列(5 只是一個例子, 可改用其它數字)
p 將選取的內容, 復制至光標之後
P 將選取的內容, 復制至光標之前
cw, x, dd 等刪除命令 會將被刪除的內容放入 buffer 中, 配合 p 或 P 即可做出搬移的效果.
十一. 暫時跳出 Vi:
在編輯過程中, 你可能想要執行其它命令, 方法如下:
:! 命令 執行該令命
:sh 暫時跳出 Vi, 欲回 Vi 按 ctrl+d 或 exit