1. Vim是一個類似于Vi的著名的功能強大、高度可定制的文本編輯器,在Vi的基礎上改進
和增加了很多特性。 VIM是純粹的自由軟件。
2. vim的三種工作模式:
(1) 編輯模式:也叫命令模式,可以執行個各種快捷鍵的命令
(2) 插入模式:在文本文件中可以直接輸入內容。
(3) 末行模式:紅帽官方叫擴展命令行模式vim內置命令行接口
注:vim一開始打開文件的模式叫編輯模式,從編輯模式可以直接進入其它兩種模式,插入:可以進入末行模式,輸入相應的插入鍵可進入插入模式(i,I,o,O,a,A,s,S)插入模式按Esc鍵可以返回到編輯模式。
由編輯模式進入插入模式的字母含義:
i:在光標所在的前一個字母進入插入模式
I:在光標所在的行首進入插入模式
a:在光標所在的下一個字符進入插入模式
A:在光標所在的行尾進入插入模式
o:在光標所在行的下一行新開一行進入插入模式
O:在光標所在行的上一行進入插入模式
s:將光標所在的字符刪除并進入插入模式
S: 刪除在光標所在的行,進入插入模式
3. vim的的使用:
(1) 打開文件:vim 選項 參數
選項:
+#:直接加數字,打開文件后直接讓光標處于第#行。
+/pattern: 打開第一次匹配到的地方。
參數:
要打開的文件名字
(2)退出文件:在vim進入非編輯模式需要先退回到編輯模式,然后退出。具體操作:
:q 退出,未保存
:q! 強制退出,文件修改不需保存強制退出
:wq保存退出
: x 保存退出
:wq! 強制保存退出
:w /directory_path 文件另存為某一路徑
ZZ 快捷鍵,在編輯模式可以使用,保存并退出
ZQ:不保存退出
(3)光標移動:
光標移動除了方向鍵上下左右可以移動還可以使用快捷鍵:
字符移動:
h 左
j 下
k 上
l 右
w下一個單詞的詞首
e 當前或者下一個單詞的詞尾
b 當前或前一個單詞的詞首
# 由#指定的單詞數
當前頁的跳轉
H 頁首
M頁中間
L 頁尾
^ 跳轉至行首第一個非空字符
0(數字0)跳轉至行首
$ 跳轉至行尾
#G跳轉至#指定的行
G 最后一行
gg或1G 行首
()句子間移動
{} 段落間移動
Ctrl+f:向文件尾部翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件尾部翻半屏
(4)命令模式的操作:復制、粘貼、修改、刪除
命令模式都可以結合光標跳轉命令結合使用
y(yank)復制:
1) y#e和y#w:分別在am上的a和m上執行兩個命令黏貼在上下方,出現下面的四種情況:在字母a上執行結果都一樣,在m,也就是詞尾上,e就是當前單詞或下一個單詞的詞尾,在詞尾時,包括當前單詞,和下一個單詞,所以結果就是當前的m和下一個單詞算一個,后面還有一個thank,w則是下一個單詞詞首
y2b:復制光標到當前單詞詞首和前一個單詞
yy復制一行
y0 從光標出開始復制一直到行首,包括行首的空格也復制
y^表示復制時沒有行首的空格
y^和Y$在句子?處執行黏貼在下面
2) 刪除d,x:
x表示把當前光標的字符刪除,#x刪除本行的#個字符
在f上執行d2w后出現下面情況
同樣可以執行d2e,d^,d$,d0,dd,db,效果類似于復制。
3) paste粘貼:
p(?。┤绻彌_區為整行,則粘貼至當前光標的下方,否則粘貼至光標后方
P(大)如果緩沖區為整行,則粘貼至當前光標的上方,否則粘貼至光標前方
4) change修改c:刪除字符進入插入模式,同樣可以配合光標移動鍵使用類似于刪除只是多了一步進入了插入模式,方便做插入模式
cc刪除當前光標所在行,進入插入模式
c2w 刪除兩個單詞至詞尾進入插入模式
c2e 刪除兩個單詞至詞尾進入插入模式
c^ 刪除至行首,不刪除行首空格
c$ 刪除至行尾進入插入模式
c0 刪除至行首,包括空格,進入插入模式
(5)撤銷編輯:
u 撤銷此前的操作
#u 撤銷此前的#次操作
Ctrl+r 反撤銷
shift+R 替換模式
xp可以實現光標與光標后的字符交換位置
(6)vim可視化模式:類似于windows中鼠標操作,可以結合使用d,c,y,對選中的字符,行,塊可以進行刪除,修改,復制等操作
v(?。┕鈽俗哌^的字符
shift+V(大)光標走過的行
ctrl+v 塊選擇
(7)執行多次重復插入:
編輯模式輸入 #i ,進入插入模式后輸入要批量插入的字符,結束后按Esc鍵即可完成批量輸入。 “ .”” 可以執行上一次重復操作
如:編輯模式10i 之后輸入jack
按ESC,完成十次輸入
(8)~可以在編輯模式實現大小寫的切換,在光標選定的地方按~即可實現切換
也可以使用g+u/U切換整行大小寫
(9)末行模式擴展命令行模式:支持命令行模式,支持正則表達式支持搜索替換功能,結合xxd(小程序)可以編輯二進制文件,支持使用set對vim實現定制化
1) 內容定界:
:# 第#行
:#,# 第#到第#行
:#,+# 相對#偏移#行
: . 當前行
: $ 最后一行
: % 全文相當于1,$
2) 模式匹配:
/part1/,/part2/ 第一次part1匹配到的到part2匹配到的為至
#, /part2/ 第#行匹配到的到part2的
/part1/,$ part1到最后一行匹配到的內容
3) 查找替換:
最后行使用 / 或?進行對光標至文章尾,?對文章開頭方向查找匹配查找,使用n,N對搜索結果進行上下操作
替換參數:
i:忽略大小寫
g:全局替換,否則默認只替換每一行的第一個
c:替換之前進行詢問,交互式的替換
使用s進行替換操作,結合定位操作實現精確替換
對you進行全文替換,并替換為YOU_AND_ME,不進行交互的
使用正則表達式的替換:將jacky替換為rose。其中替換的分隔符/可以使用其它使用較少的符號替代如s@@@,s###,以@或者#來替代均可
(10) 多文件模式:
使用多文件模式可以同時打開多個文件進行同時編輯,或者可以比對兩個版本的文件的差別:如:
vim –d f1 f11
vim –o f1 f11 同時打開兩個文件,以上下排版的方式分別顯示兩個文件,-O選項可以左右顯示兩個文件
在編輯兩個文件的時候可以使用:
快捷鍵Ctrl+w ,方向鍵切換打開的多個文件,注意擊鍵方式為同時按下ctrl和w,松手后按方向鍵
或者使用命令
:next 下一個編輯的文件
:prev先前的文件
:last最后一個文件
:first第一個文件
:wall 保存所有文件
:wqall 保存并退出所有文件
也可以對一個文件進行多窗口分割:
ctrl+w s 水平分割
ctrl+w v 垂直分割
(10)對窗口屬性進行設置,可以對vim設置個性化特性:其配置文件為:
/etc/vimrc ~/.vimrc前者是對全局進行設置,后者是對當前用戶進行設置
具體常用屬性:
:set number 或set nu 顯示行號 set nonu 不顯示行號
:set showmatch 或set sm 顯示括號匹配,set nosm
:set ai 自動縮進 set noai
:set hlserach 設置語法高亮
:syntax on 語法高亮 syntax off 關閉語法高亮
:set ic 忽略字符的大小寫 setnoic
:set fileformate=unix/dos 設置文本文件類型,是unix類型還是dos類型
1. sed簡介
sed是stream editor的簡稱,主要用來對文本的行進行處理,功能類似于awk,可以完美配合正則表達式,只是其更加簡單,對文本的列處理功能較弱。處理文本時,sed將文件的一行存儲在叫“模式空間”的一個緩沖區,處理完時,就默認將緩沖區的文本送至屏幕,接著處理下一行文本,直至將整個文件處理完。
2. sed用法與參數:
sed用法: sed 選項 ‘commond’ inputfile
選項:
-e <script> 以-e指定的script來處理輸入的文本,使用多個-e可以實現多點編輯
-f <script文件>以選項指定的文件來處理輸入的文件
-n 僅顯示script處理后的結果
-r 支持使用擴展正則表達式
-I 遠處編輯
命令(分為三種命令,地址定界,編輯命令,替換標記命令):
(1)地址定界:
不給出地址:對全文進行處理
單個地址:#指定的行進行處理
/pattern/:被模式匹配的特定行進行處理
地址范圍:對給定地址范圍的進行處理
#,# 對給定的特定行號之間的文本進行處理
#,+# 對給定的行號和其行號的偏移進行處理
/pat1/,/pat2/ 對給定的兩個模式之間的文本進行處理
#,/pat1/ 對給定的行號和第一次模式匹配到的文本進行處理
步進范圍:所謂步進范圍就是類似于奇數行或者偶數行
1~2奇數行
2~2 偶數行
(2) 編輯命令:
d 刪除模式空間匹配的行
p 打印模式空間的行
a \text 在行后面追加文本
i \text 在行后面插入文本
c \text 替換單行或者多行文本
w /path 保存模式匹配至path指定的文件
r /path 讀path指定的文件至模式空間
= 為模式空間的行打印行號、
!為模式空間的行做取反操作
(3) 替換標記命令
s/// 查找替換分隔符可以使用@#等不常用的字符
g:行內全局替換
p:顯示替換成功的行
w /path 將替換成功的行保存至文件
& :已匹配字符串標記
附:sed元字符集:
^ 匹配行開始,如:/^sed/匹配所有以sed開頭的行。
$ 匹配行結束,如:/sed$/匹配所有以sed結尾的行。
. 匹配一個非換行符的任意字符,如:/s.d/匹配s后接一個任意字符,最后是d。
* 匹配0個或多個字符,如:/*sed/匹配所有模板是一個或多個空格后緊跟sed的行。
[] 匹配一個指定范圍內的字符,如/[Ss]ed/匹配sed和Sed。
[^] 匹配一個不在指定范圍內的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行。
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替換成lovers。
& 保存搜索字符用來替換其他字符,如s/love/**&**/,love這成**love**。
\< 匹配單詞的開始,如:/\ 匹配單詞的結束,如/love\>/匹配包含以love結尾的單詞的行。
x\{m\} 重復字符x,m次,如:/0\{5\}/匹配包含5個0的行。
x\{m,\} 重復字符x,至少m次,如:/0\{5,\}/匹配至少有5個0的行。
x\{m,n\} 重復字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10個0的行。
3. sed用法示例:
(1) [root@centos7 testdir]# sed '2p' info.txt //打印第二行,其他行默認打印 NOTE: If you are ever unsure about something you typed, press <ESC> to place you in Normal mode. Then retype the command you wanted. you in Normal mode. Then retype the command you wanted.
(2)
[root@centos7 testdir]# sed -n '2p' info.txt // 靜默模式,僅打印第二行 you in Normal mode. Then retype the command you wanted.
(3)[root@centos7 testdir]# sed -n '1,4p' info.txt //打印1-4行
NOTE: If you are ever unsure about something you typed, press <ESC> to place you in Normal mode. Then retype the command you wanted. NOTE: The cursor keys should also work. But using hjkl you will be able to
(4) [root@centos7 testdir]# sed -n '1,/command/p' info.txt //打印1到模式匹配到的行 NOTE: If you are ever unsure about something you typed, press <ESC> to place you in Normal mode. Then retype the command you wanted.
(5)[root@centos7 testdir]# sed -n '/^$/=' info.txt //顯示空行的行號 3 [root@centos7 testdir]# sed -n -e '/command/{p;=}' -e '/NOTE/p' info.txt //多點編輯,打印行號 NOTE: If you are ever unsure about something you typed, press <ESC> to place you in Normal mode. Then retype the command you wanted. 2 NOTE: The cursor keys should also work. But using hjkl you will be able to
(6)[root@centos7 testdir]# sed -n '/command/i \hello_world' info.txt hello_world //將匹配到的command之后行插入hello_world
(7)[root@centos7 testdir]# sed -e '/^$/d' -e '/^[[:space:]]\+$/d' info.txt //刪除空白行或包含空格tab的, NOTE: If you are ever unsure about something you typed, press <ESC> to place you in Normal mode. Then retype the command you wanted. NOTE: The cursor keys should also work. But using hjkl you will be able to move around much faster, once you get used to it. Really!
(8)[root@centos7 testdir]# sed -n '1,3 s/you/&ANDME/p' info.txt /指定范圍內的替換 NOTE: If youANDME are ever unsure about something you typed, press <ESC> to place youANDME in Normal mode. Then retype the command you wanted.
(9)[root@centos7 testdir]# sed -n 's@^[[:space:]]\+@@p' /etc/grub2.cfg //替換開頭多個空格為空 load_env set default="${next_entry}" set next_entry= save_env next_entry set boot_once=true …
(10)刪除fs.txt以#開頭,后面至少有一個空白字符的#和空格 [root@centos7 testdir]# head -n5 fs.txt # # /etc/fstab # Created by anaconda on Thu Jul 21 11:45:45 2016 # [root@centos7 testdir]# sed -n 's@#[ ]\+\(.*\)@\1@p' fs.txt /etc/fstab Created by anaconda on Thu Jul 21 11:45:45 2016 Accessible filesystems, by reference, are maintained under '/dev/disk' See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
(11)求目錄名: [root@centos7 testdir]#echo "/etc/fst/sb/" | sed -r 's@(.*/)([^/]+/?)$@\1@p' 求基名: [root@centos7 testdir]#echo "/etc/fst/sb/" | sed -r 's@(.*/)([^/]+/?)$@\2@p'
原創文章,作者:jack_cui,如若轉載,請注明出處:http://www.www58058.com/32210
文章內容充實,圖文并貌,建議可以對各級標題進行加粗,展示,這樣層次感會更明顯呢。