vim編輯器及練習題

vim工作原理.jpg

命令用法:

vim [OPTION]… FILE… 

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

                                例如:[root@localhost ~]# vim +15 /etc/passwd

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

                                例如:[root@localhost ~]# vim +15/^rpc /etc/passwd

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

                                例如:[root@localhost ~]# vim + /etc/passwd

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

                                例如:[root@localhost ~]# vim -b /bin/cat

vim –d file1 file2…  比較多個文件 ;窗口模式退出之后,會自動標注至不匹配的編輯模式

                                例如:[root@localhost tmp]# vim -d passwd.out passwd

vim  -m file  只讀打開文件;防止誤操作,只能查看內容,不能修改內容

                                例如:[root@localhost tmp]# vim -m passwd.out

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

如果該文件存在,文件被打開并顯示內容 如果該文件不存在,當編輯后第一次存盤時創建它

擊鍵行為是依賴于 vim的 的“模式” 

三種主要模式:

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

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

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

·Esc鍵 退出當前模式

Esc鍵 Esc鍵 總是返回到命令模式

vi: Visual Interface,文本編輯器;文本:ASCII, Unicode 

命令模式 –> 插入模式 

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

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

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

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

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

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

模式轉換方式:

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

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

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

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

擴展模式: 

按“:”進入Ex模式

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

:q 退出 

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

:wq 保存退出 

:x  保存退出 

w  寫(存)磁盤文件 

wq 寫入并退出 

x  寫入并退出 

q  退出 

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

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

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

命令模式:

ZZ: 保存退出 

ZQ:不保存退出

字符間跳轉:

h: 左

l: 右 

j: 下 

k: 上 

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

單詞間跳轉: 

w:下一個單詞的詞首 

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

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

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

當前頁跳轉: 

H:頁首 

M:頁中間行 

L:頁底

行首行尾跳轉: 

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

0:        跳轉至行首 

$:       跳轉至行尾 

行間移動: 

 #G: 擴展模式:

#:   跳轉至由#指定行 

G:  最后一行 

1G,gg:    第一行 

句間移動: (按住ctrl實現效果)

):下一句 (:上一句 

段落間移動:(按住ctrl實現效果)

}:下一段 {:上一段

命令模式翻屏:

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

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

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

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

字符編輯: 

 x: 刪除光標處的字符; 

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

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

 ~:轉換大小寫

替換命令(r, replace) 

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

 R:切換成REPLACE模式

刪除命令:

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

 d$: 刪除到行尾 

 d^:刪除到非空行首 

 d0:刪除到行首 

 dw: de: db: #COMMAND

 dd: 刪除光標所在的行 #dd:多行刪除

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

復制命令(y, yank): 

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

 yy:復制行 #yy: 復制多行 

 Y: 復制整行

粘貼命令(p, paste):

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

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

改變命令(c, change) 

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

命令模式 –> 插入模式 

 c$ 刪除此行光標之后并插入

 c^ 刪除此行光標之前并插入

 c0 刪除此段光標之后并插入

 cb 刪除此段光標之前并插入

 ce 刪除此行光標之后的段并插入

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

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

命令使用方法:

 100iluyubo [ESC] 粘貼“luyubo”100次 

 <start position><command><end position> 

 Command: 

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

 例如 0y$ 命令意味著: 

 0 → 先到行頭 

 y → 從這里開始拷貝 

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

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

撤消更改:

 u撤銷最近的更改 

 #u撤銷之前多次更改 

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

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

 . 重復前一個操作 

 n.重復前一個操作n次

擴展模式:

地址定界:

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

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

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

 2,+3  表示2到5行 

 .: 當前行 

 $: 最后一行 

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

 %:全文, 相當于1,$

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

使用格式:(后跟一個編輯命令)

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

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

查找并替換:

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

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

 n:與命令同方向 

 N:與命令反方向

 s: 在擴展模式下完成查找替換操作 格式:s/要查找的內容/替換為的內容/修飾符 要查找的內容:可使用模式 替換為的內容:不能使用模式,但可以使用\1, \2, … 等后向引用符號;還可以使用“&”引用前面查找時查找到的整個內容  格式:s///,s@@@,s$$$

修飾符: 

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

配置文件:

  永久有效 全局:/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

練習案例:

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

[root@localhost tmp]# vim profile
擴展模式輸入:%s@^[[:space:]]\+@@

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

[root@localhost tmp]# vim functions 
擴展模式輸入:%s@^[[:space:]]@#$@

3、如何設置tab縮進為4個字符? 

set ts=4

4、復制/etc/rc.d/init.d/functions文件至/tmp目錄;替換 /tmp/functions文件中的/etc/sysconfig/init為/var/log; 

[root@localhost tmp]# vim functions 
:%s@/etc/sysconfig/init@/var/log:@

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

[root@localhost tmp]# vim functions 
:%s@^#[[:space:]]\+@#@g

6、將/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替換為enabled=1,所有gpgcheck=0替換為gpgcheck=1

:%s@\(gpgcheck\|enabled\)=1@\1=0@

原創文章,作者:鬧鐘哥,如若轉載,請注明出處:http://www.www58058.com/32837

(1)
鬧鐘哥鬧鐘哥
上一篇 2016-08-11 09:37
下一篇 2016-08-11 09:38

相關推薦

  • linux重裝grub,并且設置多重引導

    一、利用linux安裝盤(U盤,或者光盤等),啟動計算機 二、選擇troubleshotting==》Rescue a Centos system==》Continue 三、在shell中輸入如下命令     chroot /mnt/sysimage     grub2-install /dev/vda   …

    Linux干貨 2017-04-28
  • linux入門

    linux入門 Centos中分root用戶和普通用戶,root為超級管理員,幾乎具有所有的系統控制 剛進入linux系統,Ctrl+Alt+F[1-6]可以切換虛擬終端  (tty) 圖形終端:CentOS 6: Ctrl + Alt + F7       CentOS 7:在哪個終端啟動,即位于哪個虛擬終端 偽終端…

    Linux干貨 2017-02-16
  • 簡單的shell腳本第二版

    經過各位老板的指點我修改了部分內容使其更加完善        原文鏈接  http://www.www58058.com/70381 /bin/bash declare -i Inet declare -i Snet [[ $1 =~ ((2[0-4][0-9]|25[0-5]|1?[0-9]?[0…

    Linux干貨 2017-03-19
  • Linux發展及OS基礎

    開源協定:          GPL  LGPL,Apache,BSD          BSD:      …

    Linux干貨 2016-08-08
  • linux基礎知識

    基本命令,man自助使用手冊,linux文件目錄。

    Linux干貨 2017-12-11
  • 集中練習1-10個Linux運維腳本

    用戶管理、文本處理、文件管理相關

    2017-09-20
欧美性久久久久