Linux文本編輯器之 vi vim 詳談

Linux文本編輯器之 vi vim

        vi :Visual Interface,它與sed不同,sed是功能比較簡單的行編輯器,而vi是一個功能強大的全屏文本編輯器,它還有一個增強版vim (Vi IMproved).在vim里,有很多功能強大的文本編輯快捷鍵,以便你在編輯文本是能夠迅速的實現文本的查找,修改,替換,引用等操作.

vim功能,操作詳解:

打開文件:

QQ截圖20160810095415.png

    # vim [OPTION]… FILE…

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

    +/PATTERN:打開文件后,直接讓光標處于第一個被

    PATTERN匹配到的行的行首

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

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

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

    vim -m file 只讀打開文件

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

    ? 如果該文件存在,文件被打開并顯示內容

    如果該文件不存在,當編輯后第一次存盤時創建它

vim:是一個模式編輯器

QQ截圖20160810095900.png

? 三種主要模式:(模式的名稱在每個地方叫法不同,如,有人喜歡叫擴展命令模式叫末行命令模式等)

    1: 命令模式(默認):移動光標,剪切/粘貼文本

    2: 插入(編輯)模式:修改文本

    3: 擴展命令模式:保存,退出等

?  Esc鍵 :退出當前模式

?  Esc鍵 Esc鍵 : (兩下Esc鍵)返回到命令模式

    

    模式轉換

        ? 插入模式 —-> 命令模式

        ESC

        ? 命令模式 —-> 擴展模式

        :

        ? 擴展模式 —-> 命令模式

        ESC

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

    1 : 運行命令 vim /etc/inittab 默認以命令模式打開文本

blob.png

    2: 在命令模式下按快捷鍵 i 等,進入編輯模式

blob.png

    3: 在命令模式下,輸入 : 可以進入 擴展命令模式

blob.png

    關閉文件

        擴展模式:

            :q 退出

            :q! 強制退出,丟棄做出的修改

            :wq 保存退出

            :x 保存退出

        命令模式

            ZZ: 保存退出

            ZQ:不保存退出

    命令模式 –> 插入模式

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

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

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

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

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

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

     擴展模式 : 按“ :”進入Ex模式, 創建一個命令提示符:,處于底部的屏幕左側        

            命令:

            w 寫(存)磁盤文件

            wq 寫入并退出

            x 寫入并退出

            q 退出

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

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

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

            !command     //運行命令command,命令運行完之后按Enter繼續編輯文本

            r!command     //將命令command運行的結果輸入之當前光標的下方

   命令模式

      光標跳轉           ?

            h: 左 l: 右 j: 下 k: 上       // 字符間跳轉:在按鍵前先輸入數字,按數字移動,如 10h 向左移動10個字符

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

         單詞間跳轉

            w:下一個單詞的詞首

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

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

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

         當前頁跳轉

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

      翻屏操作:

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

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

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

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

      字符編輯:

x: 刪除光標處的字符;

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

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

~:轉換大小寫

? 替換命令(r, replace)

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

R:切換成REPLACE模式

?     刪除命令:

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

d$: 刪除到行尾

d^:刪除到非空行首

d0:刪除到絕對行首

dw:向后刪除一個單詞

de:向后刪除一個單詞

db:向前刪除一個單詞

#command: #為數字,command為以上的命令符

dd: 刪除光標所在的行

#dd:多行刪除

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

?     復制命令(y, yank):

y: 復制,行為相似于d命令

y$ :復制到行尾

y0 :復制到絕對行首

y^ :復制到非空行首

ye :向后復制一個單詞

yw :向后復制一個單詞

yb :向前復制一個單詞

#COMMAND:#為數字,command為以上的命令符

? yy:復制行

#yy: 復制多行

? Y: 復制整行

?     粘貼命令(p, paste):

p:緩沖區存的如果為整行,則粘貼當前光標所在行的下方;否則,則粘貼至當前光標所在處的后面

P:緩沖區存的如果為整行,則粘貼當前光標所在行的上方;否則,則粘貼至當前光標所在處的前面

?     改變命令(c, change)

c: 修改后切換成插入模式

? 命令模式 –> 插入模式

c$:替換到行尾

c^:替換到非空行首

c0:替換到絕對行首

cb:替換前一個單詞

ce:替換后一個單詞

cw:替換后一個單詞

#COMMAND :#為數字,command為以上的命令符

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

#cc:替換多行

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

      粘貼

? 100iwang [ESC] 粘貼“ wang” 100次

    <start position><command><end position>

? Command:

y 復制、 d 刪除、 gU 變大寫、 gu 變小寫

例如 0y$ 命令意味著:

0 → 先到行頭

y → 從這里開始拷貝

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

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

撤銷更改:

? u撤銷最近的更改

? #u撤銷之前多次更改

? U 撤消光標落在這行后所有此行的更改

? 按Ctrl – r重做最后的“撤消”更改

? . 重復前一個操作

? n.重復前一個操作n次

擴展模式:地址定界

地址定界:

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

vim的寄存器

? 有26個命名寄存器和1個無命名寄存器,常存放不同的剪貼版內容,可以不同會話間共享。未指定,將使用無命名寄存器.

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

如: 3"tyy :表示復制3行到t寄存器中

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

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

vim可以編輯二進制文件

    編輯二進制文件

    ? 以二進制方式打開文件

    vim –b binaryfile

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

    :%!xxd

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

    :%!xxd –r

vim的可視化模式

    ? 允許選擇的文本塊

        v 面向字符

blob.png

        V 面向行

blob.png

        ctrl-v 面向塊

blob.png

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

        w, ) , } ,箭頭等

    ? 突出顯示的文字可以被刪除,復制,變更,過濾,搜索/替換等

多文件模式

? vim FILE1 FILE2 FILE3 …

:next 下一個

:prev 前一個

:first 第一個

:last 最后一個

:wall 保存所有

:qall 退出所有

:wqall

blob.png

使用多個窗口:

多文件分割

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的工作特性

? 配置文件:永久有效

全局: /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 (vim only)

:set wrapmargin=15

:help option-list

:set or :set all

原創文章,作者:hunter,如若轉載,請注明出處:http://www.www58058.com/32474

(0)
hunterhunter
上一篇 2016-08-15 14:31
下一篇 2016-08-15 14:31

相關推薦

  • Linux系統性能工具

    linux中幾款常用的系統性能分析工具: 1.vmstat命令 解釋: 虛擬內存信息 用法: vmstat [options] [delay [count]] vmstat 2 5 //每2秒刷新一次,一共刷新5次 輸出屬性: procs: r:可運行(正運行或等待運行)進程的個數,和核心數有關 b:處于不可中斷睡眠態的進程個數(被阻塞的隊列的長度) mem…

    Linux干貨 2017-12-19
  • 什么是CA??

       數字證書認證機構(英語:Certificate Authority,縮寫為CA),也稱為電子商務認證中心、電子商務認證授權機構,是負責發放和管理數字證書的權威機構,并作為電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任。 介紹     CA中心為每個使用公開密鑰的用戶發放一個…

    Linux干貨 2017-07-17
  • 第八周作業

    1. 寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態;     在線的主機使用綠色顯示;     不在線的主機使用紅色顯示; #!/bin/bash # for i in {1..254};do         pi…

    Linux干貨 2017-02-24
  • N27_網絡班第九周作業

    N27_網絡班第九周作業 1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現 #!/bin/bash loginuser=`grep -v ‘/sbin/nologin’ /etc/passwd | wc -l` nologin=`grep …

    2017-10-10
  • MySQL 字符集亂碼及解決方案

    1、簡介         字符集是一套符號和編碼的規則,不論是在oracle數據庫還是在mysql數據庫,都存在字符集的選擇問題,而且如果在數據庫創建階段沒有正確選擇字符集,那么可能在后期需要更換字符集,而字符集的更換是代價比較高的操作,也存在一定的風險,所以,我們推薦在應用開始階段,就按…

    Linux干貨 2015-09-27
  • 磁盤分區和腳本練習

    1、創建一個10G分區,并格式為ext4文件系統 (1)要求其block大小為2048,預留空間百分比為2,卷標為MYDATA,默認掛載屬性包含acl; mke2fs -t ext4 -b 2048 -m 2 -L MYDATA /dev/sdb5 tune2fs -o acl /dev/sdb5 (2)掛載至/etc/mydate目錄,要求掛載時禁止自動運…

    Linux干貨 2017-08-21
欧美性久久久久