[華為云在線課程][Linux文本處理工具和正則表達式][第一章文本編輯之神VIM][學習筆記]
[華為云在線課程][Linux文本處理工具和正則表達式][第一章文本編輯之神VIM][學習筆記]
vi和vim簡介
在Linux中我們經常編輯修改文本文件,即由ASCII,Unicode或其它編碼的純文字的文件。之前介紹過nano,實際工作中我們會使用更為專業,功能強大的工具。
文本編輯種類:
全屏編輯器:nano(字符工具),gedit(圖形化工具),vi,vim
行編輯器:sed
vi
Visual editor,文本編輯器,是Linux必備工具之一,功能強大,學習曲線陡峭,學習難度大(從入門到放棄代表)
vim
Visual editor improved,和vi使用方法一致,但功能更為強大,不是必備條件。
官網:www.vim.org
其他相關編輯器:gvim,一個vim編輯器的圖形版本
參考鏈接:https://www.w3cschool.cn/vim/
使用vim初步
vim命令格式
vim [OPTION]... FILE...
常用選項:
+# 打開文件后,讓光標處于第#行的行首,+默認行尾 +/PATTERN 讓光標處于第一個被PATTERN匹配到的行的行首 -b file 以二進制方式打開文件 -d file1 file2 比較多個文件,相當于vimdiff -m file 以只讀方式打開文件 -e file 直接進入ex模式,相當于執行ex file -y file Easy mode(like 'evim', modeless),直接可以操作文件,ctrl+o:wq|q! 保存和不保存退出
說明:
如果該文件存在,文件被打開并顯示內容
如果該文件不存在,當編輯后第一次存盤時創建它
三種主要模式和轉換
vim是一種模式編輯器,擊鍵行為是依賴于vim的"模式"
三種常見模式:
命令或普通(Normal)模式:默認模式,可以實現移動光標,剪切/粘貼文本
插入(Insert)或編輯模式:用于修改文本
拓展命令(Extended command)或命令(末)行模式:保存,退出等操作
模式轉換:
命令模式 -> 插入模式
i insert,在光標所在處輸入 I 在當前光標所在行的行首輸入 a append,在光標所在處后面輸入 A 在當前光標所在行的行尾輸入 o 在當前光標所在行的下方行打開一個新行 O 在當前光標所在行的上方打開一個新行
插入模式 -> ESC -> 命令模式
命令模式 -> : -> 拓展命令模式
拓展命令模式 -> ESC,Enter -> 命令模式
例子:插入顏色字符
1,切換至插入模式 2,按ctrl+v+[三個鍵,顯示^[ 3,后續輸入顏色信息,如:^[[32mhello^[[0m 4,切換至拓展命令模式,保存退出 5,cat 文件可以看到顏色更改
拓展命令模式
按":"進入Ex模式,創建一個命令提示符:處于底部的屏幕左側
拓展命令模式基本命令
w 寫(存)磁盤文件 wq 寫入并退出 x 寫入并退出 X 加密 q 退出 q! 不存盤退出,即使更改都將丟失 r filename 讀文件內容到檔期那文件中 w filename 將當前文件內容寫入另一個文件 !command 執行命令 r!command 讀入命令的輸出
地址定界
格式:
:start_pos,end_pos CMD
地址定界格式
# 具體第#行,例如2表示第2行 #,# 從左側#表示起始行,到右側#表示結尾行 #,+# 從左側#表示的起始行,加上右側#表示的行數,例如2,+3 表示2到5行 . 當前行 $ 最后一行 .,$-1 當前行到倒數第二行 % 全文,相當于1,$ /pattern/ 從當前行向下查找,直到匹配pattern的第一行,即:正則表達式 /pat1/,/pat2/ 從第一次被pat1模式匹配到的行開始,一直到第一次被pat2匹配到的行結束 #,/pat/ 從指定行開始,一直找到第一個匹配pattern的行結束 /pat/,$ 向下找到第一個匹配pattern的行到整個文件的結尾的所有行
地址定界后跟一個編輯命令
d 刪除 y 復制 w file 將范圍內的行另存至指定文件中 r file 在指定位置插入指定文件中的所有內容
查找并替換
格式
s/要查找的內容/替換為的內容/修飾符
說明:
要查找的內容:可使用正則表達式模式 替換為的內容:不能使用模式,但可以使用\1,\2,...等后向引用符號;還可以使用"&"引用前面查找時查找到的整個內容
修飾符:
i 忽略大小寫(ignore) g 全局替換,默認情況下,每一行只替換第一次出現(global) gc 全局替換,每次替換前詢問(global confirm)
查找替換中的分隔符/可替換為其他字符,如:#,@
例子:
s@/etc@/var@g s#/boot#/#i
定制VIM的工作特性
拓展命令模式的配置只是對當前vim進程有效,可將配置存放在文件中持久保存
配置文件:
/etc/vimrc 全局配置 ~/.vimrc 個人配置
行號
顯示:set number,簡寫set nu 取消顯示:set nonumber,簡寫set nonu
忽略字符的大小寫
啟用:set ignorecase,簡寫set ic 不忽略:set noic
自動縮進
啟用:set autoindent,簡寫:set ai 不啟用:set noai
復制保留格式
啟用:set paste 不啟用:set nopaste
顯示Tab ^|和換行符$顯示
啟用:set list 不啟用:set nolist
高亮搜索
啟用:set hlsearch 不啟用:set nohlsearch 簡寫:nohl
語法高亮
啟用:syntax on 不啟用:syntax off
文件格式
啟用Windows格式:set fileformat=dos 啟用Unix格式:set fileformat=unix 簡寫 set ff=dos|unix
Tab用空格代替
啟用:set expandtab 默認為8個空格代替Tab 不啟用:set noexpandtab 簡寫:set et
Tab用指定格式的個數代替
啟用:set tabstop=# 指定#個空格代替Tab 簡寫:set ts=4
設置文本寬度
set textwidth=65(vim only) set wrapmargin=15
設置光標所在行的標識線
啟用:set cursorline,簡寫:set cul 不啟用:set nocursorline
加密
啟用:set key=password 不啟用:set key=
了解更多
set幫助 :help option-list :set or :set all
命令模式
命令模式,又稱為Normal模式,功能強大,只是此模式輸入指令并在屏幕上顯示,所以需要記憶大量的快捷鍵才能更好使用
退出VIM
ZZ 保存退出 ZQ 不保存退出
光標跳轉
字符間跳轉
h:左 l:右 j:下 k:上 #COMMAND:跳轉由#指定的個數的字符
單詞間跳轉
w:下一個單詞的詞首 e:當前或下一單詞的詞尾 b:當前或前一單詞的詞首 #COMMAND:由#指定一次跳轉的單詞數
當前頁跳轉:
H:頁首 M:頁中間行 L:頁底 zt:將光標所在當前行移到屏幕頂端 zz:將光標所在當前行移到屏幕中間 zb:將光標所在當前行移到屏幕底端
行首行尾跳轉:
^:跳轉至行首的第一個非空白字符 0:跳轉至行首 $:跳轉至行尾
行間移動:
#G 或者拓展命令模式下 :# 跳轉至第#行 G 最后一行 1G,gg 第一行
句間移動:
)下一句 (上一句
段落間移動:
}下一段 {上一段
命令模式翻屏操作
Ctrl+f 向文件尾部翻一屏 Ctrl+b 向文件首部翻一屏 Ctrl+d 向文件尾部翻半屏 Ctrl+u 向文件首部翻半屏
字符編輯
x 刪除光標處的字符 #x 刪除光標處起始的#個字符 xp 交換光標所在處的字符及其后面字符的位置 ~ 切換大小寫 J 刪除當前行后的換行符
替換命令(replace)
r 只替換光標所在處的一個字符 R 切換成REPLACE模式(在末行出現--REPLACE--提示),按ESC回到命令模式
刪除命令(delete)
d 刪除命令,可結合光標跳轉字符,實現范圍刪除 d$ 刪除到行尾 d^ 刪除到非空行首 d0 刪除到行首 dw de db #COMMAND dd 剪切光標所在行 #dd 多行刪除 D 從當前光標位置一直刪除到行尾,等同于d$
復制命令(yank)
y 復制,行為相似于d命令 y$ y0 y^ ye yw yb #COMMAND yy 復制行 #yy 復制多行 Y 復制整行
粘貼命令(paste)
p 緩沖區存的如果為整行,則粘貼當前光標所在行的下方;否則,則粘貼至當前光標所在處的后面 P 緩沖區寸的如果為整行,則粘貼當前光標所在行的上方;否則,則粘貼至當前光標所在處的前面
改變命令(change)
c 刪除后切換成插入模式 c$ c^ c0 cb ce cw #COMMAND cc 刪除當前行并輸入新內容,相當于S #cc C 刪除當前光標到行尾,并切換成插入模式,相當于c$
命令模式操作文本總結
查找
/PATTERN 從當前光標所在處向文件尾部查找 ?PATTERN 從當前光標所在處向文件首部查找 n 與命令同方向 N 與命令反方向
撤銷更改
u 撤銷最近的更改,相當于Windows中ctrl+z #u 撤銷之前多次更改 U 撤銷光標落在這行后所有此行的更改 Ctrl+r 重做最后的"撤銷"更改,相當于Windows中ctrl+y . 重復前一個操作 #. 重復前一個操作#次
高級用法
常見Command:y復制,d刪除,gU變大寫,gu變小寫
例子:
0y$ 命令 0 先到行頭 y 從這里開始拷貝 $ 拷貝到本行最后一個字符
例子:粘貼"wang"100次
100iwang [ESC] di" 光標在""之間,則刪除""之間的內容 yi( 光標在()之間,則復制()之間的內容 vi[ 光標在[]之間,則選中[]之間的內容 dtx 刪除字符直到遇見光標之后的第一個x字符 ytx 復制字符直到遇見光標之后的第一個x字符
可視化模式
在末行有"–VISUAL–"標識,表示處在可視化模式
允許選擇的文本塊
v 面向字符,--VISUAL-- V 面向整行,--VISUAL LINE-- ctrl+v 面向塊,--VISUAL BLOCK--
可視化鍵可用于與移動鍵結合使用
w ) } 箭頭等
突出顯示的文字可被刪除,復制,變更,過濾,搜索,替換等
例子:在文件每一行的行首插入#
1,先將光標移動到第一行的行首 2,輸入ctrl+v,進入可視化模式 3,輸入 G 跳到最后1行,選中每一行的第一個字符 4,輸入 I 切換至插入模式 5,輸入 # 6,按下 ESC 鍵
例子:在指定的塊位置插入相同的內容
1,光標定位到要操作的地方 2,Ctrl+v 進入"可視 塊"模式,選取這一列操作多少行 3,Shift+i(I) 4,輸入要插入的內容 5,按 ESC 鍵
多文件模式
vim FILE1 FILE2 FILE3 :next 下一個 :prev 前一個 :first 第一個 :last 最后一個 :wall 保存所有 :qall 不保存退出所有 :wqall 保存退出所有
多窗口模式
多文件分割
vim -o|-O FILE1 FILE2 -o:水平或上下分割 -O:垂直或左右分割(vim only) 在窗口間切換:Ctrl+w,Arrow
單文件窗口分割
Ctrl+w,s: split,水平分割,上下分屏 Ctrl+w,v: vertical,垂直分割,左右分屏 Ctrl+w,q: 取消相鄰窗口 Ctrl+w,o: 取消全部窗口 :wqall 退出
vim的寄存器
有26個命名寄存器和1個無命名寄存器,常存放不同的剪貼板內容,可以在同一個主機的不同會話(終端窗口)間共享寄存器名稱a,b,…z。格式:"寄存器 放在數字和命令之間
例子
3"tyy 表示復制3行到t寄存器中,末行顯示3 lines yanked into "t "tp 表示將t寄存器內容粘貼 未指定,將使用無命名寄存器 有10個數字寄存器,用0,1,...,9表示,0存放最近復制內容,1存放最近刪除內容。當新的文本變更和刪除時,1轉存到2,2轉存到3,以此類推。數字寄存器不能在不同會話間共享。
標記和宏(Macro)
ma 將當前位置標記為a,26個字母均可做標記,mb、mc等等 'a 跳轉到a標記的位置,實用的文檔內標記方法,文檔中跳躍編輯時很有用 qa 錄制宏a,a為宏的名稱,末行提示:recording @a q 停止錄制宏 @a 執行宏a @@ 重新執行上次執行的宏
編輯二進制文件
# 以二進制方式打開文件 vim -b binaryfile # 拓展命令模式下,利用xxd命令轉換為可讀的十六進制 :%!xxd # 切換至插入模式下,編輯二進制文件 # 切換至拓展命令模式下,利用xxd命令轉換回二進制 :%!xxd -r # 保存退出
幫助
:help :help topic use :q to exit help 輸入vimtutor打開自帶練習教程
vim總結圖
Linux 正則表達式
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。