vim文本編輯器

   vi命令是UNIX操做系統和類UNIX操做系統中最通用的全屏幕純文本編輯器。Linux中的vi編輯器叫vim,它是vi的加強版(vi Improved),與vi編輯器徹底兼容,並且實現了不少加強功能。vim

vim功能十分強大,具備不少有優勢:app

  1. 全部的unix like系統都會內置vi文本編輯器,其餘的文本編輯器則不必定會有編輯器

  2. 不少軟件的編輯接口都會主動調用vi (如:crontab,visudo等命令)ide

  3. vim具備程序編輯的能力,能夠註定以字體顏色辨別語法的正確性,方便程序設計;學習

  4. 程序簡單,編輯速度快字體


vi的使用:spa

一、使用vim打開文件操作系統

語法: vim [OPTION]... FILE...命令行

經常使用選項:設計

    +#: 打開文件後,直接讓光標處於第#行的行首

    +/PATTERN:打開文件後,直接讓光標處於第一個被PATTERN匹配到的行的行首

    vim + file 直接打開file,光標在最後一行

    vim –b file 二進制方式打開文件

    vim –d file1 file2… 比較多個文件

    vim -m file 只讀打開文件

ex file 或vim –e 直接進入ex模式

若是該文件存在,文件被打開並顯示內容

若是該文件不存在,當編輯後第一次存盤時建立它

二、vi打開文件後分爲3種模式:

①命令(通常)模式②編輯(插入)模式③擴展命令行模式(末行模式)

三種模式有三種不一樣的使用方法:

①命令模式:

使用vi打開文件後直接進入命令模式(默認的模式),在這個模式中能夠實現移動光標,剪切或刪除文本。

②編輯模式:

在命令模式中能夠剪切刪除文本,但卻沒法編輯文件內容,在命令模式中按"i,I,o,O,a,A"中任意一個鍵便可進入編輯模式,這時左下角會顯示INSERT字樣,便可編輯文本內容。編輯完成後按Esc鍵便可退回到命令模式

③擴展命令行模式:

在命令模式中,按「:,/,?」中任意一個鍵便可進入擴展命令行模式,這時光標將挪至最下面那一行,可供查找、替換字符,保存文本,退出等操做。


ESC鍵便可退出當前模式,

ESC,ESC老是返回到命令模式


模式轉換:

命令模式---->編輯模式

    i: insert, 在光標所在處輸入

    I:在當前光標所在行的行首輸入

    a: append, 在光標所在處後面輸入

    A:在當前光標所在行的行尾輸入

    o: 在當前光標所在行的下方打開一個新行

    O:在當前光標所在行的上方打開一個新行

編輯模式----> 命令模式

    ESC

命令模式----> 擴展命令行模式

    : , / , ?

擴展命令行模式----> 命令模式

    ESC

鎖定和解鎖:CTRL+s,Ctrl+q

wKiom1eq0-PBTTx1AABSDGfZ1lw241.png

命令模式相關操做:

光標跳轉:

  字符間跳轉:

    h: 左l: 右j: 下k: 上

    #COMMAND:跳轉由#指定的個數的字符;

  單詞間跳轉:

    w:下一個單詞的詞首

    e:當前或下一單詞的詞尾

    b:當前或前一個單詞的詞首

    #COMMAND:由#指定一次跳轉的單詞數

  當前頁跳轉:

    H:頁首M:頁中間行L:頁底

  行首行尾跳轉:

    ^: 跳轉至行首的第一個非空白字符;

    0: 跳轉至行首

    $: 跳轉至行尾

  行間移動:

    #G、擴展模式:# :跳轉至由#指定行

    G:最後一行

    1G, gg: 第一行

  句間移動:

    ):下一句(:上一句

  段落間移動:

    }:下一段{:上一段

翻屏操做:

    Ctrl+f: 向文件尾部翻一屏

    Ctrl+b: 向文件首部翻一屏

    Ctrl+d: 向文件尾部翻半屏

    Ctrl+u:向文件首部翻半屏

字符編輯:

    x: 刪除光標處的字符;

    #x: 刪除光標處起始的#個字符

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

    ~:轉換大小寫

替換命令(r, replace)

    r: 替換光標所在處的字符

    R:切換成REPLACE(替換)模式

刪除命令:

x,X:在一行文字中x爲向後刪除一個字符(至關於DEL鍵),X爲向前刪除一個字符(至關於   backspace鍵)

nx: n爲數字,連續向後刪除n個字符。

d: 刪除命令,可結合光標跳轉字符,實現範圍刪除;

d$: 刪除到行尾

d^:刪除到非空行首

d0:刪除到行首

dd:刪除光標所在行

dw:向後刪除一個單詞,刪除至下個單詞的詞首(刪除包括詞後空格)

de:向後刪除一個單詞,刪除之至被刪除單詞的詞尾

db:向前刪除一個單詞

ndd:n爲數字,刪除光標所在的向下n行,

D:從當前光標位置一直刪除到行尾,留空行,等同於d$

複製命令(y, yank):

y: 複製,行爲類似於d命令

y$:複製至行尾

y0:複製至行首

y^:複製至非空行首

ye:複製至詞尾

yw:複製至下個單詞詞首(複製包括詞後空格)

yb:向前複製一個單詞

yy:複製整行

#yy:複製#行

粘貼命令(p, paste):

p:緩衝區存的若是爲整行,則粘貼當前光標所在行的下方;不然,則粘貼至當前光標所在處的後面

P:緩衝區存的若是爲整行,則粘貼當前光標所在行的上方;不然,則粘貼至當前光標所在處的前面

100iwang [ESC] :粘貼「wang」100次

改變命令(c, change)

c: 修改後切換成插入模式,

    結合光標跳轉字符($,^,0,w,e,b)使用, 刪除跳轉範圍內的字符,而後進入編輯模式。

cc:刪除當前行並輸入新內容

    #cc:刪除#行並輸入新的內容

C:刪除當前光標到行尾,並切換成插入模式

區域修改

<start position><command><end position>

Command:

    y 複製、d 刪除、gU變大寫、gu變小寫

例如0y$ 命令意味着:

0 →先到行頭

y →從這裏開始拷貝

$ →拷貝到本行最後一個字符

    ye 從當前位置拷貝到本單詞的最後一個字符

撤消更改

u:撤銷最近的更改

#u:撤銷以前屢次更改

U:撤消光標落在這行後全部此行的更改

按Ctrl-r重作最後的「撤消」更改

. :重複前一個操做

n.:重複前一個操做n次


擴展命令行模式操做:

按「:」進入Ex模式

建立一個命令提示符:,處於底部的屏幕左側

命令:

    w寫(存)磁盤文件

    wq寫入並退出

    x 寫入並退出

    q 退出

    q!不存盤退出,即便更改都將丟失

    r filename 讀文件內容到當前文件中

    w filename 將當前文件內容寫入另外一個文件

    !command

    r!command

地址定界

:start_pos,end_pos

#: 具體第#行,例如2表示第2行;

#,#: 從左側#表示行起始,到右側#表示行結尾

#,+#: 從左側#表示的行起始,加上右側#表示的行數

    :2,+3 表示2到5行

.: 當前行

$: 最後一行

    .,$-1 當前行到倒數第二行

%:全文, 至關於1,$

/pat1/,/pat2/:從第一次被pat1模式匹配到的行開始,一直到第一次被pat2匹配到的行結束

    #,/pat/:從第#行到匹配到模式直間

    /pat/,$:匹配到的模式到最後

使用方式:後跟一個編輯命令

    d:將匹配界定內的內容刪除

    y:複製界定內的內容

    w file: 將範圍內的行另存至指定文件中

    r file:在指定位置插入指定文件中的全部內容

查找:

/PATTERN:從當前光標所在處向文件尾部查找

?PATTERN:從當前光標所在處向文件首部查找

n:與命令同方向

N:與命令反方向

查找並替換

s: 在擴展模式下完成查找替換操做

格式:s/要查找的內容/替換爲的內容/修飾符

    要查找的內容:可以使用模式

    替換爲的內容:不能使用模式,但可使用\1, \2, ...等後向引用符號;還可使用「&」引用前面查找時查找到的整個內容

    

修飾符:

    i: 忽略大小寫

    g: 全局替換;默認狀況下,每一行只替換第一次出現

    gc:全局替換,每次替換前詢問

查找替換中的分隔符/可替換爲其它字符,例如

    s@/etc@/var@g

    s#/boot#/#i

    

例:

一、複製/etc/profile至/tmp/目錄,用查找替換命令刪除/tmp/profile文件中的行首的空白字符

①cp /etc/profile /tmp

②vim /tmp/profile

③:鍵入擴展命令行模式,執行%s#^[[:space:]]\+##g

二、複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令爲/tmp/functions的每行開頭爲空白字符的行的行首添加一個#號

①cp /etc/rc.d/init.d/functions /tmp

②vim /tmp/functions

③:%s/^[[:space:]]/#&/g


   vim中有一個十分強大的功能,即vim寄存器,至關於與window中的剪切板,window中只有一個,可是vim中足足有27各,徹底知足用戶的各類複製剪切。

vim的寄存器

有26個命名寄存器和1個無命名寄存器,常存放不一樣的剪貼版內容,能夠不一樣會話間共享。

用a,b,…,z表示,用「寄存器表示,放在數字和命令之間

    如:3"tyy 表示複製3行到t寄存器中

    "tp 表示將t寄存器內容粘貼

未指定,將使用無命名寄存器

有10個數字寄存器,用0,1,…,9表示,0存放最近複製內容,1存放最近刪除內容。當新的文本變動和刪除時,1轉存到2,2轉存到3,以此類推。數字寄存器不能在不一樣會話間共享

編輯二進制文件

以二進制方式打開文件

    vim –b binaryfile

擴展命令模式下,利用xxd命令轉換爲可讀的十六進制

    :%!xxd

編輯二進制文件

擴展命令模式下,利用xxd命令轉換回二進制

    :%!xxd –r

保存退出

可視化模式

容許選擇的文本塊

    v面向字符

    V面向行

    ctrl-v 面向塊

可視化鍵可用於與移動鍵結合使用:

    w,),},箭頭等

突出顯示的文字能夠被刪除,複製,變動,過濾,搜索/替換等

多文件模式

vim FILE1 FILE2 FILE3 ...

擴展命令行模式中命令:

    :next 下一個

    :prev前一個

    :first 第一個

    :last 最後一個

    :wall 保存全部

    :qall 退出全部

    :wqall 保存全部並退出

使用多個「窗口」

多文件分割

    vim -o|-O FILE1 FILE2 ...

    -o: 水平分割

    -O: 垂直分割

    在窗口間切換:Ctrl+w, Arrow

單文件窗口分割:

    Ctrl+w,s: split, 水平分割

    Ctrl+w,v: vertical, 垂直分割

    ctrl+w,q:取消相鄰窗口

    ctrl+w,o:取消所有窗口

    :wqall退出


爲了平時學習工做的便利也可定製適合本身的vim

定製vim的工做特性

配置文件:永久有效

    全局:/etc/vimrc

    我的:~/.vimrc

擴展模式:當前vim進程有效

(1) 行號

    顯示:set number, 簡寫爲set nu

    取消顯示:set nonumber, 簡寫爲set nonu

(2) 括號成對匹配

    匹配:set showmatch, 簡寫爲set sm

    取消:set nosm

(3) 自動縮進

    啓用:set ai

    禁用:set noai

(4) 高亮搜索

    啓用:set hlsearch

    禁用:set nohlsearch

(5) 語法高亮

    啓用:syntax on

    禁用:syntax off

(6) 忽略字符的大小寫

    啓用:set ic

    不忽略:set noic

(7) 文件格式

    啓用:fileformat=unix

    不忽略:fileformat=dos

(8) 設置文本寬度

    :set textwidth=65 (vimonly)

    :set wrapmargin=15

:help option-list

:setor:set all

vi/vim內置幫助

:help

:helptopic

Use:qto exit help

vim自帶的練習教程:vimtutor

例:

一、如何設置tab縮進爲4個字符?

set tabstop=4,簡寫set ts=4.

永久生效需寫入配置文件/etc/vimrc或~/.vimrc

二、複製/etc/rc.d/init.d/functions文件至/tmp目錄;替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log;

①cp /etc/rc.d/init.d/functions /tmp

②vim /tmp/functions

③%s@/etc/sysconfig/init@/var/log@g

wKiom1eq1smyH8r9AAAhmj1oc9c657.pngwKioL1eq1tiRUGs8AAAezslWqyU682.png

三、刪除/tmp/functions文件中全部以#開頭,且#後面至少有一個空白字符的行的行首的#號;

:%s@\(^#\)\([[:space:]]\+\)@\2@g

wKiom1eq1vSgkM-sAAATNx51uAE957.png

wKioL1eq1wGiH_OXAAARxJOZmZs552.png

相關文章
相關標籤/搜索