VI常用實用命令學習

來源:互聯網
上載者:User

目標:[通過此練習學習通夠利用VI編輯器,對系統設定檔進行修改或編寫簡單的指令碼程式]

命令列或命令模式:在最後一行沒有顯示--INSERT--或--REPLACE--字樣的時候。

#:   是指常用的命令

一般模式:游標移動
h 或 ->     游標向左移動一個字元
------------------------------------------------------------
l 或 <-     游標向右移動一個字元
------------------------------------------------------------
k 或 向上方向鍵    游標向上移動一個字元
------------------------------------------------------------
j 或 向下方向鍵    游標向下移動一個字元
------------------------------------------------------------
Ctrl+f         #  螢幕向前翻動一頁
--------------------------------------------------------
Ctrl+b         #  螢幕向後翻動一頁
--------------------------------------------------------
Ctrl+d     螢幕向前翻動半頁
--------------------------------------------------------
Ctrl+u     螢幕向後翻動半頁
--------------------------------------------------------
+     游標移動到非空格符的下一列
------------------------------------------------------------------
-     游標移動到非空格符的上一列
-------------------------------------------------------------------
n    按下數字鍵後再按空格鍵,游標會向右移動這一行的n個字元。
     (例如20,則游標會向右移動20個字元)
----------------------------------------------------------------------------------------------
0        #   (這是數字0)移動到這一行的第一個字元處
-----------------------------------------------------------------------------
$        #   移動到這一行的最後一個字元處
--------------------------------------------------------------------
H     游標移動到這個螢幕最上方的那一行
------------------------------------------------------------------------
M     游標移動到這個螢幕中央的那一行
----------------------------------------------------------------------
L     游標移動到這個螢幕最下方的那一行
------------------------------------------------------------------------
G        #   移動到這個檔案的最後一行
----------------------------------------------------------------
nG     移動到這個檔案的第n行。
     例如20G,則會移動到這個檔案的第20行(可配合:set nu)
----------------------------------------------------------------------------------------------
n       #   游標向下移動n行
-------------------------------------------------------

一般模式:尋找與替換

/word        #   在游標之後尋找一個名為word的字串
--------------------------------------------------------------------------
?word     在游標之前尋找一個名為word的字串
--------------------------------------------------------------------------
:n1,n2s/word1/word2/g      #   在第n1與n2行之間尋找word1這個字串,並將該字串替換為word2
----------------------------------------------------------------------------------------------------
:1,$s/word1/word2/g      #   從第一行到最後一行尋找word1字串,並將該字串替換為word2
--------------------------------------------------------------------------------------------------
:1,$s/word1/word2/gc      #   從第一行到最後一行尋找word1字串,並將該字串替換為word2,
     且在替換前顯示提示符讓使用者確認(confirm)
---------------------------------------------------------------------------------------------------

一般模式:刪除、複製與粘貼

x,X        #   x為向後刪除一個字元,X為向前刪除一個字元
--------------------------------------------------------------------------------
nx     向後刪除n個字元
-------------------------------------------------------
dd        #   刪除游標所在的那一整行 
--------------------------------------------------------------
ndd        #   刪除游標所在列的向下n列,例如,20dd則是刪除20列
---------------------------------------------------------------------------------------
d1G     刪除游標所在行到第一行的所有資料
------------------------------------------------------------------------
dG     刪除游標所在行到最後一行的所有資料
--------------------------------------------------------------------------
yy        #   複製游標所在行
------------------------------------------------------
nyy        #   複製游標所在列的向下n列,例如,20yy則是複製20列
---------------------------------------------------------------------------------------
y1G     複製游標所在列到第一列的所有資料
------------------------------------------------------------------------
yG     複製游標所在列到最後一列的所有資料
--------------------------------------------------------------------------
p,P        #   p為複製的資料粘貼在游標下一行,P為粘貼在游標上一行
------------------------------------------------------------------------------------------
J     將游標所在列與下一列的資料結合成一行
-----------------------------------------------------------------------------
u        #   恢複前一個動作
------------------------------------------------------

 

編輯模式:

i,I        #   插入:在當前游標所在處插入輸入的文字,已存在的字元會向後退
--------------------------------------------------------------------------------------------------
a,A        #   添加:由當前游標所在處的下一個字元開始輸入,已存在的字元會向後退
-------------------------------------------------------------------------------------------------------
o,O        #   插入新的一行:從游標所在處的下一行行首開始輸入字元
------------------------------------------------------------------------------------------
r,R        #   替換:r會替換游標所指的那一個字元;R會一直替換游標所指的文字,直到按下Esc為止
---------------------------------------------------------------------------------------------------------------------
Esc        #   退出編輯模式,回到一般模式
------------------------------------------------------------------

命令列模式:

:w        #   將編輯的資料寫入硬碟檔案中
------------------------------------------------------------------
:w!     若檔案屬性為唯讀,強制寫入該檔案
------------------------------------------------------------------------
:q        #   退出vi
----------------------------------------------
q!     若曾修改過檔案,又不想儲存,使用!為強制退出不儲存檔案
---------------------------------------------------------------------------------------------
:wq        #   儲存後退出,若為:wq!,則為強制儲存後退出
---------------------------------------------------------------------------------
:w[filename]    將編輯資料儲存為另一個檔案(類似另存新檔新文檔):x也是儲存
------------------------------------------------------------------------------------
:r[filename]    在編輯的資料中,讀入另一個檔案的資料,亦即將filename這個檔案內容加到游標所在行的後面
----------------------------------------------------------------------------------------------------------------------------
:set nu     顯示行號,設定之後,會在每一行的前面顯示該行的行號
------------------------------------------------------------------------------------------
:set nonu    與set nu相反,為取消行號
----------------------------------------------------------------
n1,n2w[filename]   將n1到n2的內容儲存為filename這個檔案
----------------------------------------------------------------------------

練習:
1.請在/root目錄下建立一個名為supxmen的目錄;
2.進入supxmen目錄中;
3.將/etc/man.config複製到本目錄下;
4.使用vi開啟本目錄下的man.config檔案;
5.在vi中設定行號.
6.移動到第63行,向右移動29個字元,請問您在雙引號中看到的是什麼目錄?
7.移到第一行,並且向下搜尋teTeX字串,請問它在第幾行?
8.接下來,將50到100行之間的man改為MAN,要求是逐個尋找修改,請問如何輸入指令?
9.修改完後,突然反悔,要全部複原,有哪些方法?
10.複製51到60行這10行的內容,並且粘貼到最後一行之後;
11.刪除11到30行之間的20行內容;
12.將這個檔案另存新檔檔案名稱為man.supxmen.config的檔案;
13.轉到第29行,並且刪除15個字元;
14.請問目前的檔案有多少行,多少字元?
15.儲存後退出.
答案是:134 3846
如果結果正確,那你使用vi就沒有太大的問題了.

1.從命令模式進入命令模式:
i: 游標在當前位置進入文字模式:
I: 游標跳到行首並進入文本輸入模式
a: 游標後退一格並進入文本輸入模式
A: 游標退到行尾並進入文本輸入模式
o: 在游標所在行下新起一行並進入文字模式
O: 在游標所在行上新起一行並進入文字模式
s: 刪除游標所在字元並進入文字模式
S: 刪除游標所在行並進入文本輸入模式.

eg:
:1, $s/A/a/g 從檔案第一行到末尾,將大寫的A換成a
注:一般我用i,o用的比較多.

2.VI開啟多個檔案
vi -o passwd shadow

儲存離開檔案:
:wq/:x/ZZ 儲存當前檔案退出.
:w,:q,
:r
:e 檔案名稱   開啟別一檔案並開始編輯.
注:r,e常用.

3.刪除字元與塊操作
在vi中刪除:
x/<del>:刪除一個字元
nx:刪除/剪下下n個字元
dd:刪除/剪下當前行
dw:刪除/剪下到詞尾
ndw:刪除/剪下後n個詞
d$:刪除/剪下至行尾
nd$:刪除/剪下後n行

在vi 中剪下/粘貼:
yy:選定游標所在行複製
yw:選定游標所在詞複製
nyw:選定游標所在位置到之後n個單詞複製.
y$:選定游標所在位置到行尾的部分複製.
p:貼在游標所在位置之右.
P:貼在游標所在位置之左.

4.取消操作:
u:取消上一個更動
U:取消一行內的所有更動
ctrl-r:重做
:e!:放棄所有更動,重新編輯.

Linux進階命令.
分隔視窗
選項設定
#vi -o file1.txt file2.txt 水平分割視窗編輯file1.txt,和file2.txt
#vi -O file1.txt file2.txt 垂直分割
注:在不同的視窗間移動:ctrl+w

VI中搜尋文本關鍵字:
/str1 尋找str1字串
n     尋找下一個str1字元

?str1 反向尋找str1字元.

命令模式的輸入選項:
:r 檔案名稱  所檔案插入到游標處
:r!命令    所命令的輸出插入到當前文本中
:nr 檔案   把檔案插入到第n行
:!命令    運行命令.
:sh  轉到shell
:so 檔案 讀取檔案,再執行檔案裡面的命令.

VI命令列表:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.