Linux 指令詳解 vi 互動式文字編輯器

來源:互聯網
上載者:User

標籤:linux   指令   工具   vi   

vi是‘Visual interface‘的簡稱,是Linux下標配的一個純字元介面的互動式文字編輯器。可以執行輸出、刪除、尋找、替換、塊操作等眾多文本操作,使用者還可以根據自己的需要對其進行定製。其所有操作都需要通過鍵盤指令來完成,如果可以熟練應用,將會是十分的方便

--------------------------------------------------------------------
工作模式:
vi有三種工作模式,Command mode,Insert mode,Last line mode
Command mode : 命令模式。(預設模式)
    進入到vi編輯器時,預設在此模式下
    在此模式下可以控制螢幕游標的移動,字元或行的複製粘貼刪除
在此模式下輸入的命令是不可見的
Insert mode  : 插入模式。
    只有在此模式下才能夠輸入文字
一般在此模式下添加刪除修改常值內容
Last line mode : 末行模式。(特殊的命令模式)
    在此模式下的操作需要斷行符號才能執行
    在此模式下可以儲存檔案退出vi
在此模式下可以設定環境變數
在此模式下可以進行尋找替換
    此模式執行完畢後自動回到命令模式

vi可以簡化成兩個模式,Command 和Insert mode。Last line可以算是特殊的Command mode

--------------------------------------------------------------------
進入vi:
1:# vi filename          : 開啟(或建立)檔案,將游標置於第一行
2:# vi +n filename     : 開啟檔案,將游標置於第n行
3:# vi + filename       : 開啟檔案,並將游標置於最後一行
4:# vi +/word1 filename      : 開啟檔案,並將游標置於第一個word1
5:# vi -r filename       : 恢複filename(若上次使用vi編輯時發生系統崩潰)
6:# vi filename1 filename2 filename3    : 開啟多個檔案,依次編輯


Ps:
1:如果filename存在,則開啟filename。如果不存在,則建立filename(儲存時建立)
2:每行前顯示波浪符號的表示該行為空白行
3:若不對檔案的修改進行儲存,則不改變原檔案的內容
4:多個使用者可以同時使用vi編輯一個檔案,最後儲存的版本將被儲存

--------------------------------------------------------------------
三種模式切換:
命令模式 到 插入模式 : ‘i‘  ‘a‘  ‘c‘  ‘o‘  ‘r‘  ‘s‘等
插入模式 到 命令模式 : ‘Esc‘

命令模式 到 末行模式 : ‘:‘  ‘/‘  ‘?‘
末行模式 到 命令模式 : ‘Esc‘

插入模式到末行模式得先切換到命令模式

--------------------------------------------------------------------
協助:
F1
:help

查看版本:
# vi --version

--------------------------------------------------------------------
螢幕翻頁:
Ctrl + f: 螢幕向'前'移動一頁(常用)Ctrl + b: 螢幕向'後'移動一頁(常用)Ctrl + d: 螢幕向'前'移動半頁Ctrl + u: 螢幕向'後'移動半頁Ctrl + e: 螢幕向前滾一行Ctrl + y: 螢幕項後滾一行

--------------------------------------------------------------------
游標移動:
Ctrl+G : 顯示光線標所在位置的行數和列數0:  游標移動到當前行首(數字零)^:  移到該行第一個非空白的字元$:  游標移動到當前行尾(常用)n$: 游標移至第n行尾(:   到句子的開頭):   到句子的末尾{:   到段落的開頭}:   到段落的末尾G:   游標移至文章的最後一行(常用)nG:  游標移至第n行首 gg:  移動文章的開頭h 或 向左方向鍵: 游標向左移動一個字元l 或 向右方向鍵: 游標向右移動一個字元k 或 向上方向鍵: 游標向上移動一個字元j 或 向下方向鍵: 游標向下移動一個字元Ctrl+p: 游標上移一行(同k)Ctrl+n: 游標下移一行(同j)Enter:    游標下移一行n<Enter>: 游標向下移動n行space:  游標右移一個字元n<space>:   游標向右移動n個字元Backspace:  游標左移一個字元n<Backspace>:  游標向左移動n個字元b:  游標左移到上個詞的開頭B:  游標左移到上個空格分隔的詞開頭w:  游標右移到下個詞的開頭W:  游標右移到下個空格分隔的詞開頭e:  游標右移到下個詞的結尾E:  游標右移到下個空格分隔的詞結尾H:  游標移至當前螢幕頂行nH: 游標移動到螢幕的第n行L:  游標移至當前屏螢幕最後行        內容超過一個螢幕時,游標移至螢幕上的最底行        內容不足一個螢幕時,游標移至檔案的最後一行nL: 游標移動到螢幕的倒數第n行M:  游標移至當前螢幕中間行        內容超過一個螢幕時,游標移至螢幕的中間行        內容不足一個螢幕時,游標移至文本的中間行dH: 刪除從游標所在行至螢幕首行的全部內容dM: 刪除從游標所在行至螢幕(檔案)中間行的全部內容dL: 刪除從游標所在行至螢幕最後一行的全部內容+:  游標移動到下一行的第一個非空白字元n+: 游標下移n行 -:  游標移動到上一行的第一個非空白字元n-: 游標上移n行z.: 把當前行作為螢幕的中間行v:  選取常值內容

--------------------------------------------------------------------
插入文本 
a: 在當前游標後插入字元A: 在當前行末後插入字元i: 在當前游標前插入字元I: 在當前行首前插入字元(第一個非空白字元前)o: 在當前行後面插入一空行,從游標所在處的下一行行首開始輸入字元O: 在當前行前面插入一空行,從游標所在處的上一行行首開始輸入字元r: 替換當前游標所在字元(替換後即結束)R: 替換當前字元及後面的字元,直至按ESC鍵結束替換 J: 把游標所在行的下一行追加到本行行尾:r filename   將filename中的內容添加到當前游標的下一行:r!command    將指令shell命令command的輸出結果添加到當前行xp: 交換游標位置的字元和它右邊的字元~:  改變游標所在出字元的大小寫

--------------------------------------------------------------------
刪除:
dd:  刪除游標所在行ndd: 刪除從游標所在行開始的n行 D:   刪除游標所在行游標後面的內容x:   刪除游標所在的字元X:   刪除游標前面的字元nx:  刪除從游標位置開始的n個字元nX:  刪除游標之前的n個字元dw:  刪除游標所在的單詞(實際為從游標位置開始到單詞結束)(包含空格)de:  刪除游標到單詞尾所有字元(不包含空格)d0:  刪除游標所在行游標之前的所有內容d^:  刪除當前字元到行首的所有字元(同d0)d$:  刪除游標所在行游標到行尾的所有內容d1G: 刪除游標所在行到第一行的所有資料dG:  刪除游標所在行到最後一行的所有資料dfa: 刪除從游標到第一個a字元之間的內容(包括a):nd: 刪除第n行:n1,n2d: 將第n1行到第n2行之間的內容刪除s: 刪除游標所處位置的字元,然後在後面追加任一字元S: 刪除當前行,然後在追加任一字元nS:刪除n行,然後在追加任一字元cw: 刪除游標到所在單詞尾部的字元ce: 刪除游標到所在單詞尾部的字元(和cw一樣)c$: 刪除游標到當前行行尾的字元C:  刪除游標到當前行行尾的字元(和c$一樣)c^: 刪除游標之前到行首的字元(不包括游標上的字元)cc: 刪除游標所在行(與dd不同的是cc進入insert狀態)cb: 刪除游標所在單詞的游標前的字元

--------------------------------------------------------------------
撤銷與重複
u: 撤銷上一個操作(可以執行多次)U: 撤銷對當前行的所有操作.: 重複上一個操作Ctrl + R : 還原被撤銷的操作

--------------------------------------------------------------------
尋找:
/word : 從游標開始向後尋找word(若遇到檔案尾,則從頭再開始)?word : 從游標開始向前尋找word(若遇到檔案頭,則從尾再開始)n: 在同一方向執行上次定義的尋找N: 在相反方向執行上次定義的尋找/: 向後重複尋找上次定義的尋找:set ic : 尋找時不區分大小寫:set noic : 尋找時區分大小寫

--------------------------------------------------------------------
替換:
:s/word1/word2/c     將word1換成word2,並在替換前讓使用者進行確認:s/word1/word2/g     將當前行中所有word1換成word2:n1,n2s/word1/word2/g   將第n1行到第n2行中所有word1換成word2:1,$s/word1/word2/g     將第一行到最後一行行中所有word1換成word2:g/word1/s//word2/g     將檔案中所有word1換成word2:%s/word1/word2/g    將檔案中所有word1換成word2:n1,n2s/^/word1/g    將第n1行到第n2行所有開頭加入word1:%s/ *$//            將所有行結尾的空格刪除(超級常用):%s#/dodo/1#/dodo/2     更換隔離符

不加g,只對搜尋字串的第一次出現進行替換
g在命令最後,對搜尋字串所在行的每次出現進行替換
g在命令開頭,對文中所有的行進行替換

--------------------------------------------------------------------
儲存退出:
:w :  儲存當前檔案:q :  直接退出(對檔案沒有修改的前提):wq : 儲存並退出:x  : 儲存並退出:q! : 不儲存直接退出(不想儲存檔案的修改):w! : 強制儲存該檔案(對於唯讀檔案)SHIFT+zz : 儲存並退出(其實就是ZZ):w filename        將修改後的檔案儲存到filename中(若filename存在則會報錯):n1,n2w filename   將第n1行到第n2行的內容儲存filename檔案中

--------------------------------------------------------------------
隱藏顯示行號:
:set nu    顯示行號:set nonu  取消顯示行號Ctrl+G :  列出游標所在行的行號

--------------------------------------------------------------------
複製粘貼:
yy: 複製游標所在行(常用)nyy:複製從游標所在行開始向下n行y1G:複製從游標所在行到第一行的所有行yG: 複製從游標所在行到最後一行的所有行yw: 複製單詞從游標所在位置開始到單詞尾字元y$: 複製從游標開始到行尾的內容y^: 複製從游標開始到行首的內容y0: 複製從游標開始到行首的內容(同y^)p: 粘貼在當前行的下一行(小寫)P: 粘貼在當前行的上一行(大寫)

註:所有‘y‘的複製都必須與‘p‘結合才能完成複製與粘貼

:n1,n2 co n3   將n1~n2的內容複寫到第n3行。:n1,n2 co $   將n1~n2行的內容複寫到最後一行。:n1,n2 mo $   將n1~n2行的內容移動到最後一行。

buffer使用(要注意buffer名字不要和指令名衝突)
vi中有buffer功能,可將資料存在buffer中
cyy: 複製當前行放入buffer c中cp:  粘貼放在buffer a中的內容


--------------------------------------------------------------------
修改檔案格式
:set fileformat=unix
:set ff=unix
將檔案修改為unix格式(如win下面的文字檔在linux下會出現^M,從而導致亂碼)


--------------------------------------------------------------------
其他指令:
:! Command : 執行命令shell指令command!! : 重新執行上次的(:! Command子命令)<<: 把當前行向左移動一個 tab>>: 把當前行向右移動一個 tabn>>: 從當前行開始的n行向右移動一個 tab:n1,n2>: 把第n1行到n2行都向右移動一個 tab:n1,n2>>>: 把第n1行到n2行都向右移動三個 tab


--------------------------------------------------------------------

環境變數設定
1、通過末行模式來設定
比如  :set autoindent
通過末行模式的設定是臨時的,退出vi之後就沒有了

2、要使這些設定永久儲存,可以將選項設定儲存到如下幾個檔案,這樣在每次vi時都有效:
/etc/virc或者~/.virc
~/.exrc或者當前工作目錄下的.exrc

常見的選項如下,只要添加到檔案中即可
set tabstop=4        #設定tab跳過的空格數為4(預設為8)set number           #設定顯示本文行號set ignorecase       #在搜尋命令中忽略大小寫(縮寫:ic)set noignorecase     #在搜尋命令中區別大小寫set scroll=20        #設定指令模式下使用'Ctrl+d'命令翻滾的行數set showmode         #設定在螢幕右角顯示vi編輯器模式(縮寫:smd)set ruler            #設定在螢幕底部顯示光線標所在行、列的位置set terse            #設定只顯示簡短的警告資訊set nomagic          #設定在搜尋模式中,允許使用前面不帶'\'的特殊字元(符號不再有特殊含義)syntax on            #設定文法加亮顯示set autoindent       #設定每一行都和前一行有相同的縮排量(縮寫:ai)set smartindent      #設定每一行都和前一行有相同的縮排量,但是遇到'{'和'}'以及'#'則不採用縮排(縮寫:si)set cindent          #採用標準的C語言的縮排形式(C,C++,Java)(縮寫:ci)set shiftwidth=2     #設定縮排空格數為2(縮寫:sw)set report           #告知使用者最後一個命令作用行的行號set wrapmargin=80    #設定行長度為80(縮寫:wm)


Linux 指令詳解 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.