1. 程式人生 > 實用技巧 >文字編輯之Vim

文字編輯之Vim

一、Vim、Vi文字編輯器

1️⃣:vi: Visual Interface,文字編輯器

2️⃣:文字:ASCII, Unicode

3️⃣:VIM - Vi IMproved

二、Vim、vi的特點

1️⃣:vi/vim是一種純文字編輯器,它不像word可以排版,可以調整字型大小,可以改變字型等等,vi/vim只是一個文字編輯工具,它只能對文字的內容進行操作,比如新增內容、修改內容、刪除內容等等

2️⃣:vi是一個全螢幕的文字編輯器,在編輯文字時它將佔據整個螢幕

三、Vim、Vi的三種編輯模式

1、基本模式

1️⃣:命令模式

2️⃣:編輯模式

3️⃣:末行模式(內建的命令列介面)

2、開啟檔案

vim [OPTION]... filename...
    +#: 開啟檔案後,直接讓游標處於第#行的行首
    +/pattern:開啟檔案後,直接讓游標處於第一個被pattern匹配到的行的行首

3、模式轉換

命令模式 --> 編輯模式
    i: insert, 在游標所在處輸入;
    a: append, 在游標所在處後面輸入;
    o: 在當前游標所在行的下方開啟一個新行;
    I:在當前游標所在行的行首輸入;
    A:在當前游標所在行的行尾輸入;
    O:在當前游標所在行的上方開啟一個新行;

編輯模式 --> 命令模式
    :按ESC鍵(鍵盤最左上角)

命令模式 --> 末行模式
    :(Shift+:)

末行模式 --> 命令模式
    :按ESC鍵(鍵盤最左上角的)

四、檔案關閉

關閉檔案:在末行模式下
    :q 退出
    :q! 強制退出,丟棄做出的修改;
    :wq 儲存退出
    :x 儲存退出
    :w /PATH/TO/SOMEWHERE
    :r /PATH/TO/SOMEWHERE    

五、游標移動

游標跳轉:在命令模式下
    字元間跳轉:h, j, k, l
            h: 左
            j:下
            k:上
            l:右

    單詞間跳轉:
            w:下一個單詞的詞首
            e:當前或下一單詞的詞尾
            b:當前或前一個單詞的詞首
            #w:以當前游標為起點跳至第#個單詞的詞首
            #e:以當前游標為起點跳至第#個單詞的詞尾
            #b:以當前游標為起點跳至第#個單詞的詞首

    行內跳轉
            ^: 跳轉至行首的第一個非空白字元
            0: 跳轉至行首
            $: 跳轉至行尾

    行間跳轉
            gg:直接跳轉到第一行的行首
            G:直接跳轉到最後一行的行尾
            #gg:直接跳轉到第#行(向行首跳轉)
            #G:直接跳轉到第#行(向行尾跳轉)

翻屏
        ctrl+f:向下翻一屏
        ctrl+b:向上翻一屏  

六、字元編輯  

1、命令模式下字元編輯

x: 刪除游標處的字元
#x: 刪除游標處起始的#個字元

xp: 交換游標所在處的字元及其後面字元的位置

2、刪除命令(d)

d: 刪除命令,可結合游標跳轉字元,實現範圍刪除;
    dd: 刪除游標所在的行
    #dd:刪除包括當前游標所在行在內的#行(多行刪除)
    
    d$: 刪除到某一行的結尾 
    d^:刪除到某一行的第一個字元位置(不包括空格或TAB字元)
    d0:刪除到某一行的開始位置

    dw:刪除當前游標所在單詞的詞首到該單詞的結尾位置(刪除某個單詞,游標必須位於單詞的詞首)
    db:刪除當前游標所在單詞的詞尾該單詞的詞首位置 (刪除某個單詞,游標必須位於單詞的詞尾)
    //在linux中單詞是指一串字元,以空格隔開;另外有特殊字元也算是一個單詞,例如:=

    dl:刪除當前字元(與x命令功能相同)

末行模式下d命令的使用
    語法:Startadd,Endadd(這裡的StartADD與EndADD是指一個範圍)
示例
    1,5d:表示刪除第1到第5行

3、複製、貼上命令(y、p、P)

複製命令(y, yank)
    yy:複製行
    yw  複製一個單詞
    y$  複製至行尾
    y^  複製至行首
    
    #yy: 複製多行

貼上命令(p、P\put, paste)
    p:小寫p
        若刪除或複製的為整行內容,則貼上至游標所在行的下方
        若刪除或複製的為非整行,則貼上至游標所在字元的後面
    P:大寫p
        若刪除或複製的為整行內容,則貼上至游標所在行的上方
        若刪除或複製的為非整行,則貼上至游標所在字元的前面

4、替換命令

替換命令:r
    r#:將當前游標的字元替換為#,這裡的#可以是任何字元
    R:替換模式,替換多個字元

5、範圍表示方法

.       游標所在當前行
$       最後一行
+#      游標所在行往後#行
$-#     倒數第#行
%       全文

6、撤銷編輯(u)

u:撤銷前一次的編輯操作,連線u命令可以撤銷此前的n次編輯操作
#u:直接撤銷此前的#次編輯操作
ctrl+r:還原最近一次的撤銷操作

7、視覺化模式

視覺化模式下可以對選取的內容進行編輯
    v:按字元選取內容
    V:按矩形塊(行)選取內容

8、拓展

文字之間複製:在末行模式下
    :1,5write >> /root/test.txt   //將第1行至第5行復制到/root下的test.txt檔案中
或者
    先在file1檔案的末行模式下複製:
        :1,5yy   (回車)
    然後退出去到另個檔案file2中,直接在命令模式下按:p && P

9、文字查詢

/pattern:從上往下查詢匹配的內容
?pattern:從下往上查詢匹配的內容
    n:從上往下查詢匹配到的內容的下一條
    N:從下往上查詢匹配到的內容的下一條

10、查詢並替換

s: 在末行模式下完成查詢替換操作

語法:s/要查詢的內容/替換為的內容/修飾符
        修飾符
            i: 忽略大小寫
            g: 全域性替換;預設情況下,每一行只替換第一次出現
            
示例
    1,5 s/abc/def/g:表示把第一行到第五行的所有abc替換為def

11、末行模式下顯示或取消顯示行號

set nu(number):顯示行號
set nonu(number):取消顯示行號