vim 文本编辑器
4.2 vim文本編輯器
4.2.1 簡介
vim是vi的升級版,最常見的區別是能用多種顏色顯示顯示系統文件的一些特殊信息。
- vi: Visual Interface 文本編輯器,可視化接口
- vim:vi iMproved的縮寫,即vi的增強版
vim編輯器分為三種主要模式:
- Esc建:退出當前模式
- Esc建Esc建:總是返回到命令模式
4.2.2 語法
vim [options] [file …]
vim [options] -
vim [options] -t tag
vim [options] -q [errorfile]
ex
view
gvim gview evim eview
rvim rview rgvim rgview
-
用vim打開文件用法:
例如:【vim abc.txt】打開abc.txt文件
例如:【vim +# abc.txt】打開abc.txt文件,光標定位在abc.txt文件的第#行
例如:【vim + abc.txt】打開abc.txt文件,光標定位在最后一行
例如:【vim +/PATTERN abc.txt】打開abc.txt文件,定位第一次被PATTERN(模式)匹配到的行的行首 -
模式之間的切換
注意:vim打開文件后,默認進入的模式為:命令模式:
命令模式下進入插入模式(輸入模式)輸入:【i】或者【o】或者【a】等
命令模式下進入末行模式(擴展模式)輸入:【:】
使用vim編輯多個文件
【vim FILE1 FILE2 FILE3】可以同時編輯FILE1 FILE2 FILE3這三個文件
【:next】切換至下一個文件
【:prev】切換至前一個文件
【:last】切換至最后一個文件
【:first】切換至第一個文件
4.2.3 vim的命令模式(編輯模式)常用快捷鍵
1) 模式轉換
?????????a) 【i】:在當前光標所在字符的前面,轉為輸入模式
?????????b) 【a】:在當前光標所在字符的后面,轉換為輸入模式
?????????c) 【o】:在當前光標所在行的下方,新建一行,并轉換為輸入模式:
?????????d) 【I】:在當前光標所在行的行首,轉換為輸入模式
?????????e) 【A】:在當前光標所在行的行尾,轉換為輸入模式
?????????f) 【O】:在當前光標所在行的上方,新建一行,并轉換為輸入模式;
?????????g) 【cc】刪除當前行并輸入新內容,相當于S。擴展【#cc】
?????????h) 【C】刪除當前光標到行尾,并切換成插入模式
- 改變命令
【c】修改后切換成插入模式 - 命令模式–>插入模式
【c^】刪除光標處到行首的字符,并進入插入模式
【c$】刪除光標處到行尾的字符,并進入插入模式
【c0】(c零)刪除光標處到當前行首的第一非空字符,并進入插入模式
【cb】刪除當前第一個單詞,并進入插入模式
【ce】刪除下一個單詞,并進入插入模式
【cw】刪除光標處到單詞詞尾,并進入插入模式
2) 逐字符移動
?????????a) 【h】向左
?????????b) 【l】向右(小寫的L)
?????????c) 【j】向上
?????????d) 【k】向下
?????????e) 【#COMMAND】移動#個字符
?????????例如: 【#h】向左移動#個字符
????????? 【#l】向右移動#個字符
????????? 【#j】向上移動#個字符(相當于向上移動#行)
????????? 【#k】向下移動#個字符(相當于向下移動#行)
3) 當前頁跳轉
?????????a) 【H】:當前頁的頁首
?????????b) 【M】:當前頁的中間行
?????????c) 【L】當前頁的頁底
4) 以單詞為單位移動
?????????a) 【w】移動至下一個單詞的詞首
?????????b) 【e】跳至當前或下一個單詞的詞尾
?????????c) 【b】跳至當前或前一個單詞的詞首
?????????d) 【#COMMAND】跳到第#個單詞
?????????例如: 【#w】跳轉到第#個單詞的詞首
????????? 【#e】向下跳轉到第#個單詞的詞尾
????????? 【#b】向上跳轉到第#個單詞的詞首
5) 行內跳轉
?????????a) 【0】(零) :絕對行首,光標移動到當前行的行首
?????????b) 【^】光標移動到當前行首的第一個非空白字符
?????????c) 【&】光標移動到當前行的行尾
6) 行間跳轉(相當于上下跳轉)
?????????a) 【G】跳轉到最后一行(整個文檔的最后一行)
?????????b) 【gg或者1G】跳轉到文檔的第一行
?????????c) 【#G】跳轉到第#行(文檔最上為第一行)
?????????注意:想要跳轉到最后一行可以輸入【0G】也是最后一行
7) 句間移動
?????????a) 【)】下一句
?????????b) 【(】上一句
8) 段落間移動
?????????a) 【}】下一段
?????????b) 【{】上一段
9) 常用快捷鍵滾動
?????????a) 【Ctrl + e】向下滾動一行
?????????b) 【Ctrl + y】向上滾動一行
?????????c) 【Ctrl + d】向下滾動半屏
?????????d) 【Ctrl + u】向上滾動半屏
?????????e) 【Ctrl + f】向下滾動一屏
?????????f) 【Ctrl + b】向上滾動一屏
10) 字符編輯
- 【x】刪除光標處的字符
- 【#x】刪除從光標處開始向后#個字符
- 【xp】光標所在處的字符和光標后面的字符對調位置
- 【~】轉換大小寫
- 【J】刪除當前行后的換行符
11) 替換命令(r,replace)
- 【r】替換光標所在字符
- 【R】切換成REPLACE模式
12) 刪除命令(剪切命令)
注意:d命令刪除的字符會默認復制到剪貼板
?????????a) 【d】刪除命令,可以結合光標跳轉字符,實現范圍刪除
?????????b) 【d$】刪除到行尾
?????????c) 【d^】刪除到非空行首
?????????d) 【d0】刪除到行首
?????????e) 【dd】刪除光標所在行
?????????f) 【#dd】多行刪除
?????????g) 【D】從當前光標位置一直刪除到行尾,留空行,等同于【d$】
?????????h) 【de】
?????????i) 【dw】
?????????j) 【db】
?????????k) 【#COMMAND】
?????????l) 【Shift + j】刪除兩行質檢的空行,實際上是合并兩行
插入模式(輸入模式下的剪切)
????正常模式(默認模式)下按v(逐字)或V(逐行)進入可視模式,然后用【j】【k】【l】【h】命令移動即可選擇某些行或字符,再按d即可剪切
13) 復制命令(y,yank)
?????????a) 【y】復制,可以結合光標跳轉字符,實現范圍復制(行為與d有類似之處)
?????????b) 【y$】復制到行尾
?????????c) 【y^】復制到非空行首
?????????d) 【y0】復制到行首
?????????e) 【yy】復制當前行
?????????f) 【#yy】復制多行
?????????g) 【Y】整行復制
?????????h) 【ye】
?????????i) 【yw】
?????????j) 【yb】
?????????k) 【#COMMAND】
14) 粘貼命令(p,paste)
?????????a) 【p】緩沖區存的如果為整行,則粘貼當前光標所在行的下方,否則粘貼至當前光標所在處的后面
?????????b) 【P】緩沖區存的如果為整行,則粘貼當前光標所在行的上方,否則粘貼至當前光標所在處的前面
15) 撤銷更改
?????????a) 【u】撤銷最近的更改
?????????b) 【#u】撤銷之前多次更改
?????????c) 【U】撤銷光標落在這行后所有此行的更改
?????????d) 【按Ctrl + r】重做最后的“撤銷”更改(相當于取消撤銷)
?????????e) 【.】重做前一個操作
?????????f) 【#】重復前一個操作#次
4.2.4 vim的末行模式(擴展模式)
命令模式下進入末行模式(擴展模式)輸入:【:】
4.2.4.1 退出命令
?????????【:q】退出
?????????【:x】保存退出
?????????【:wq】保存并退出
?????????【:q!】強制退出并或略所有更改
?????????【:e!】放棄所有修改,并打開源文件
注意:在默認模式的退出方法
?????????【ZZ】保存并退出
?????????【ZQ】不保存退出
附加:
【:!COMMAND】執行COMMAND命令,和shell交互
【r!COMMAND】讀入命令的輸出
【r filename】讀取filename文件內容到當前文件中
【w filename】將當前文件內容下入filename文件中
4.2.4.2 地址定界(可以用于查找和替換等)
語法:【:start_pos,end_pos】
例如:
?????????【:#】具體第#行,例如2表示第2行
?????????【#,#】從左側#表示起始行,到右側#表示結尾行
?????????【#,+#】從左側#表示的起始行,加上右側#表示的行數
例如【:2,+3】表示2到5行
?????????【.】表示當前行
?????????【$】最后一行
?????????【%】全文,相當于【1,$】
例如:【:.,$-1】表示當前行到倒數第二行
- 擴展命令模式:地址定界
注意:地址界定默認是從光標位置開始(即在默認模式進入命令模式時的光標位置)向下搜索匹配(如果查到到文件結尾,依舊沒找到,會從頭開始查找)
【:/pat1/,/pat2/】從第一次被pat1模式匹配到的行開始,一直到第一次被pat2匹配到的行結束
【:#,/pat/】從第#行開始,一直到第一次被pat匹配到的行結束
【:/pat/,$】從第一次被pat匹配到的行開始,一直到最后一行 - 地址界定后面可跟隨的編輯命令
【d】例如:【:/pat1/,/pat2/d】
????表示,從光標位置開始向下匹配,第一次匹配到“pat1”的位置開始到第一次匹配到pat2結束是的末行,刪除末行。(注意:如果匹配結果是多行,只會刪除最后一行)
【y】例如:【:/pat1/,/pat2/y】
????表示,從光標位置開始向下匹配,第一次匹配到“pat1”的位置到第一次匹配到“pat2”的位置直接,復制內容到剪貼板。
【w file】將范圍內的行另存至指定文件中。
例如:【:/pat1/,/pat2/w ./abc.txt】
????表示從光標位置開始向下匹配,第一次匹配到pat1的位置到第一次匹配到pat2的位置內容寫到當前目錄下的abc.txt文件中。
【r file】在指定位置插入指定文件中的所有內容。
例如:【:/pat1/,/pat2/r ./abc.txt】
????????表示從光標位置開始向下匹配,第一次匹配到“pat1”的位置到第一次匹配到“pat2”的位置的行末插入abc.txt文件內容
4.2.4.3 查找并替換
-
【:/PATTERN】從當前光標所在處向文件尾部查找匹配“PATTERN”相同的內容。
-
【:?PATTERN】從當前光標所在處向文件首部查找匹配“PATTERN”相同內容
-
【n】與命令同方向
-
【N】與命令反方向
擴展命令模型:查找并替換 -
【s】在擴展模式下完成查找替換操作
格式:【s/要查找的內容/替換為的內容/修飾符】- 要查找的內容:可以使用模式
- 替換為的內容:不能使用模式,單可以使用\1,\2等后向引用符號;還可以使用“&”引用前面查找時查找的整個內容
- 修飾符:
- 【i】忽略大小寫
- 【g】管局替換;默認情況下,每行只替換第一次出現
- 【gc】全局替換,每次替換前詢問
注意:查找替換中的分隔符【/】可用其他符號替代,例如【@】【#】等
例子:【s/a/Good/g】或者【s@a@Good@g】查找當前光標所在行的“a”字符,全部替換成“Good”字符
替換后:
例如:【s#/boot#/#i】將光標所在行的【/boot】替換成【/】,默認只會替換一個,匹配時會忽略大小寫
例如:【4s@^.*\(你好\).*@\1@ig】
????????在4行查找匹配“^.*\(你好\).*”這個正則表達式 能匹配到的內容,替換成“你好”
替換前:
替換后:
如果需要對全文替換可以使用如下命令
【:1,$s/^.*\(你好\).*/\1/ig】其中【1,$】為地址界定。
4.2.4.4 地址定界與查找替換擴展模式結合使用
【:4,8s/^.*\(你好\).*/\1/ig】這種為只替換第4行到第8行之間的內容,其中【4,8】表示4行到8行之間的內容
【:/par1/,/par2/s/^.*\(你好\).*/\1/ig】這種為從第一次匹配到par1到第一次匹配par2之間的內容中間,
按照【s/^.*\(你好\).*/\1/ig】命令進行匹配替換
4.2.4.5 幫助命令
- 【:help or F1】顯示整個幫助
- 【:help xxx】顯示xxx的幫助,比如:【:help I】【:help CTRL-[】即Ctrl+[的幫助
- 【:help ‘number’】Vim選項的幫助用單引號刮起
- 【:help 】特殊建的幫助用<>擴起
- 【:help –t】Vim啟動參數的幫助用-
- 【:help –i_】插入模式下Esc的幫助,某個模式下的幫助用(模式_主題)的模式
幫助文件中位于||之間的內容是超鏈接,可以用Ctrl+]進入鏈接,Ctrl+o(Ctrl + t)返回
4.2.4.6 其他非編輯命令
-
【:.】重復前一次命令
-
【:set ruler?】查看是否設置了ruler,在.vimrc中,使用set命令設置的選項都可以通過這個命令查看
-
【:scriptnames】查看vim腳本文件的位置,比如.vimrc文件,語法文件及plugin等
-
顯示非打印字符
????【:set list】顯示非打印字符,比如tab,空格,行尾等。如果tab無法顯示,請確定用set lcs=tab:>-命令設置了.vimrc文件,并確保你的文件中的確有tab,如果開啟了expendtab,那么tab將被擴展為空格。
????【:set nolist】關閉非打印字符 -
行號:
【:set number】顯示行號或者【:set nu】
【:set nu】關閉行號顯示 -
大小寫
【:set ignorecase】忽略區分大小寫或者【:set ic】
【:set noignorecase】不忽略大小寫或者【:set noic】 -
設置自動縮進
【:set autoindent】設置自動縮進或者【:set ai】
【:set noai】取消制動縮進 -
查找文本高亮顯示或取消
【:set hlsearch】設置高亮顯示
【:set nohlsearch】取消高亮顯示 -
語法高亮顯示
【:syntax on】開啟語法高亮顯示
【:synatx off】關閉語法高亮顯示 -
輔助保留格式
【:set paste】啟用復制保留格式
【:set noPaste】關閉復制保留格式 -
文件格式
【:set fileforma=doc】啟用windows格式。或者【:set ff=doc】
【:set fileforma=unix】啟用unix格式。或者【:set ff=nuix】 -
設置文本寬度
【:set textwidth=65】啟用
【:set wrapmargin=15】禁用 -
設置光標所在行的標識線
【:set cursorline】或者【:set cul】啟用標識線
【:set no cursorline】或者【:set not cul】禁用標識線 -
【:set or】查看set幫助或者【:set all】
4.2.5 vim可視化模式
默認模式下輸入:
- 【v】按照字符選取,或者【ctrl + v】
- 【V】按矩形快選取
可視化建可用于與移動建結合使用
【w】【)】【}】箭頭燈
突出顯示的文字可被刪除,復制,變更,過濾,搜索,替換等
4.2.6 vim多窗口
語法:【vim –o|-O FILE1 FILE2 …】
???????????【-o】水平分割顯示
???????????【-O】垂直分割顯示
命令模式下輸入【:qa】關閉所有窗口
窗口間切換:Ctrl+w,Arrow
- 單文件窗口分割:
- 【Ctrl+w,s】split,水平分割
- 【Ctrl+w,v】vertical,垂直分割
- 【Ctrl+w,q】取消相鄰窗口
- 【Ctrl+w,o】取消全部窗口
- 【:wqall】退出
4.2.7 vim配置文件
【/etc/vimrc】vim的全局配置文件
【~/.vimrc】用戶的vim配置文件
4.2.8 相關編輯器
文本:ASCII,Unicode
- 文本編輯器種類:
行編輯器:sed
全屏編輯器:nano,vi
vim-Vi Improved
其他編輯器:
gedit 一個簡單的圖形編輯器
gvim 一個Vim編輯器的圖形版本
4.2.9 幫助(vim --help)
[root@gdy103 ~]# vim --help VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Apr 5 2012 10:17:30)用法: vim [參數] [文件 ..] 編輯指定的文件或: vim [參數] - 從標準輸入(stdin)讀取文本或: vim [參數] -t tag 編輯 tag 定義處的文件或: vim [參數] -q [errorfile] 編輯第一個出錯處的文件參數:-- 在這以后只有文件名-v Vi 模式 (同 "vi")-e Ex 模式 (同 "ex")-s 安靜(批處理)模式 (只能與 "ex" 一起使用)-d Diff 模式 (同 "vimdiff")-y 容易模式 (同 "evim",無模式)-R 只讀模式 (同 "view")-Z 限制模式 (同 "rvim")-m 不可修改(寫入文件)-M 文本不可修改-b 二進制模式-l Lisp 模式-C 兼容傳統的 Vi: 'compatible'-N 不完全兼容傳統的 Vi: 'nocompatible'-V[N][fname] Be verbose [level N] [log messages to fname]-D 調試模式-n 不使用交換文件,只使用內存-r 列出交換文件并退出-r (跟文件名) 恢復崩潰的會話-L 同 -r-A 以 Arabic 模式啟動-H 以 Hebrew 模式啟動-F 以 Farsi 模式啟動-T <terminal> 設定終端類型為 <terminal>-u <vimrc> 使用 <vimrc> 替代任何 .vimrc--noplugin 不加載 plugin 腳本-P[N] 打開 N 個標簽頁 (默認值: 每個文件一個)-o[N] 打開 N 個窗口 (默認值: 每個文件一個)-O[N] 同 -o 但垂直分割+ 啟動后跳到文件末尾+<lnum> 啟動后跳到第 <lnum> 行--cmd <command> 加載任何 vimrc 文件前執行 <command>-c <command> 加載第一個文件后執行 <command>-S <session> 加載第一個文件后執行文件 <session>-s <scriptin> 從文件 <scriptin> 讀入正常模式的命令-w <scriptout> 將所有輸入的命令追加到文件 <scriptout>-W <scriptout> 將所有輸入的命令寫入到文件 <scriptout>-x 編輯加密的文件--startuptime <file> Write startup timing messages to <file>-i <viminfo> 使用 <viminfo> 取代 .viminfo-h 或 --help 打印幫助(本信息)并退出--version 打印版本信息并退出 [root@gdy103 ~]#總結
- 上一篇: 进程间通信IPC(一)(半双工管道和消息
- 下一篇: java学习(57):内部类