vi ? vim?
vi是一種計算機文本編輯器,由美國計算機科學家比爾·喬伊(Bill Joy)完成編寫蹭越,并于1976年以BSD協(xié)議授權發(fā)布诈嘿。
vi是“Visual”的不正規(guī)的縮寫抬旺,來源于另外一個文本編輯器ex的命令visual刹孔。
vi是一種模式編輯器瑞侮。不同的按鈕和鍵擊可以更改不同的“模式”收擦。在“插入模式”下鞋既,輸入的文本會直接被插入到文檔力九;當按下“退出鍵”,“插入模式”就會更改為“命令模式”邑闺,并且光標的移動和功能的編輯都由字母來響應跌前,例如:“j”用來移動光標到下一行;“k”用來移動光標到上一行陡舅,“x”可以刪除當前光標處的字符抵乓,“i”可以返回到“插入模式”(也可以使用方向鍵)。在“命令模式”下靶衍,敲入的鍵(字母)并不會插入到文檔灾炭,這給新接觸vi的用戶帶來混亂。
在“命令模式”下摊灭,多重文本編輯操作是由一組鍵(字母)來執(zhí)行咆贬,而不是同時按下<Alt>、<Ctrl>和其他特殊鍵來完成帚呼。更多復雜的編輯操作可以使用多重功能基元的組合,比如說“dw”用來刪除一個單詞皱蹦,“c2fa”可以更改當前的光標處中“a”之前的文本煤杀。這就是說:對于熟練的vi用戶可以更快的操作,因為雙手就可以不必離開鍵盤沪哺。
早期的版本中沈自,vi并沒有指示出當前的模式,用戶必須按下“退出鍵”來確認編輯器返回“命令模式”(會有聲音提示)辜妓。當前的vi版本可以在“狀態(tài)條”中(或用圖形顯示)枯途。最新的版本中,用戶可以在“終端”中設置并使用除主鍵盤以外的其他鍵籍滴,例如:PgUp酪夷,PgDn,Home孽惰,End和Del鍵晚岭。圖形化界面的vi(如gvim)可以很好的支持鼠標和菜單。
直到Emacs的出現(xiàn)(1984年以后)勋功,vi幾乎是所有“黑客”所使用的標準UNIX編輯器坦报。從2006年開始库说,作為“單一UNIX規(guī)范”(Single UNIX Specification)的一部分,vi或vi的一種變形版本一定會在UNIX中找到片择。
直到現(xiàn)在潜的,vi仍然被廣泛的使用,并且贏得1991年在USENET的票選字管;vi比Emacs的Bulkier版本啟動的更快夏块,并且占內(nèi)存更少。因此纤掸,甚至Emacs的追隨者又重新使用vi脐供,并且作為郵件編輯器和其他小型編輯工作的首選。1999年時借跪,著名的歐萊禮出版社(O'reilly)賣出了比emacs更多的vi參考書政己。
當救急軟盤作為恢復硬盤崩潰的介質以來,vi通常被用戶選擇掏愁,因為一張軟盤正好存儲下vi歇由,并且?guī)缀跛腥硕伎梢院茌p松的使用vi。
在編輯器的大戰(zhàn)中果港,vi和Emacs是作戰(zhàn)的雙方沦泌。
Emacs???
Emacs(/?i?m?ks/,源自Editor MACroS辛掠,宏編輯器)谢谦,是一個文本編輯器家族,具有強大的可擴展性萝衩,在程序員和其他以技術工作為主的計算機用戶中廣受歡迎回挽。最初由Richard Stallman于1975年在MIT協(xié)同蓋伊·史提爾二世共同完成。這一創(chuàng)意的靈感來源于TECO宏編輯器TECMAC和TMACS猩谊,它們是由蓋伊·史提爾二世钥弯、Dave Moon记餐、Richard Greenblatt厨疙、Charles Frankston等人編寫的宏文本編輯器赡磅。
自誕生以來,Emacs演化出了眾多分支暗甥,其中使用最廣泛的兩種分別是:1984年由理查·斯托曼發(fā)起并由他維護至2008年的GNU Emacs喜滨,以及1991年發(fā)起的XEmacs。XEmacs是GNU Emacs的分支淋袖,至今仍保持著相當?shù)募嫒菪院枋小K鼈兌际褂昧?a target="_blank">Emacs Lisp這種有著極強擴展性的編程語言,從而實現(xiàn)了包括編程、編譯乃至網(wǎng)絡瀏覽等等功能的擴展焰情。
在Unix文化里陌凳,Emacs是黑客們關于編輯器之戰(zhàn)的兩大主角之一,它的對手是vi(Vim)内舟。
Emacs不僅僅是一個編輯器合敦,它是一個集成環(huán)境,或可稱它為集成開發(fā)環(huán)境验游,這些功能如讓用戶置身于全功能的操作系統(tǒng)中充岛。Emacs可以:
- 收發(fā)電子郵件、上新聞組(Gnus)
- 無縫直接編輯遠程文件(Tramp)
- 通過Telnet登錄遠程主機
- 操作殼層(M-x EShell耕蝉,Term)
- 結合git, mercurial等版本控制系統(tǒng)并直接操作(Magit崔梗,VC)
- 上Twitter(Twittering-mode)
- 登陸IRC和朋友交流(M-x ERC,rcirc)
- 電子數(shù)據(jù)表
- 模擬其他編輯器垒在,如vi(Evil-mode)蒜魄、WordStar、EDT场躯、TPU等
- 編輯Wiki (Wikipedia-mode)
- 對多種編程語言的編輯谈为,如C/C++、Perl踢关、Python伞鲫、Lisp等等
- 調(diào)試程序,結合GDB签舞,EDebug等秕脓。
- 玩游戲
- 計算器
- 心理咨詢(M-x doctor)
- 煮咖啡
- 記筆記、日記(Org-mode)
- 管理日程瘪菌,Task撒会,待辦事項(ToDo),約會等GTD(Org-mode)
- 寫作與出版(Org-mode师妙,Muse-mode)
- 目錄管理(Dired)
- 文件比較、合并(Ediff)
- 閱讀info和man文檔(M-x info屹培,woman)
- 瀏覽網(wǎng)站(M-x eww)
- 為各種程序(TeX默穴、LaTeX等)提供統(tǒng)一的操作界面
- …
總結
煮不了咖啡的編輯器不是一個好用的瀏覽器 :joy:
回歸正題
vim 是 vi 的拓展,Vim(Vi IMproved) 是一種升級版褪秀,是vi的派生物之一蓄诽,其他還有Elvis ,Vigor。
Vim的第一個版本由布萊姆·米勒在1991年發(fā)布媒吗。最初的簡稱是Vi IMitation仑氛,隨著功能的不斷增加,正式名稱改成了Vi IMproved。現(xiàn)在是在開放源代碼方式下發(fā)行的自由軟件锯岖。
一個現(xiàn)實的開源協(xié)議介袜,
目前,VIM是按照VIM許可證發(fā)布的開源軟件出吹,這個協(xié)議兼容GPL[[4]](https://zh.wikipedia.org/wiki/Vim#cite_note-Vim協(xié)議文本與對GPL的兼容性-4)遇伞。它的協(xié)議中包含一些慈善條款,建議用戶向荷蘭ICCF捐款捶牢,用于幫助烏干達的艾滋病患者鸠珠。VIM啟動時會顯示「Help poor children in Uganda!」的字樣,在中文版本中則是「請幫助烏干達的可憐孩童!」[5]秋麸。
學習曲線
我一開是接觸這個是從解決git的沖突說起渐排,pull代碼進入這種狀態(tài),非常無厘頭:monkey_face::first_quarter_moon_with_face:灸蟆,各種退出ssh然后處理驯耻。
后來發(fā)現(xiàn) 命令行里竟然藏著一個編輯器。感謝度娘:japanese_ogre:
其實這里面藏著很多東西 次乓,需要我們?nèi)グl(fā)現(xiàn)吓歇。
許多unix系統(tǒng) 執(zhí)行命令vimtutor
或者Windows在vim軟件中看vim教學圖標即可。
可在vim中輸入:help user-manual
試了下那個命令在centos迷你版里都沒有
還是靠搜
vim 是一種模式編輯器 下面簡單羅列一些
-
普通模式 用戶啟動后的默認模式 一些快捷方法
- i 票腰、a城看、o 均可進入插入模式
- esc 插入模式退出到 普通模式
- cw 刪除一個單詞
- c$ 從當前焦點 刪除一行到行尾
- c^ 刪除到行頭
- dd 刪除一行
- ...
-
插入模式
- 編輯文本時 都處在這個模式
-
命令行模式
普通模式輸入 : 就可進入命令行模式
:w filename 指定文件名保存
:wq 保存并退出 :wq! 感嘆號 表示強制操作 q! 表示強制退出 不保存
:set number 顯示行號
-
替換
- :s/old/new - 用new替換當前行第一個old。
- :s/old/new/g - 用new替換當前行所有的old杏慰。
- :n1,n2s/old/new/g - 用new替換文件n1行到n2行所有的old测柠。
- :%s/old/new/g - 用new替換文件中所有的old。
- :%s/^/xxx/g - 在每一行的行首插入xxx缘滥,^表示行首轰胁。
- :%s/
表示行尾朝扼。
-
搜索關鍵詞 例如修改某個配置文件赃阀,
:/searchword
在后面的文本找:/searchword
向前查找/pattern/+number: 將光標停在包含pattern的行后面第number行上。
/pattern/-number: 將光標停在包含pattern的行前面第number行上擎颖。
n: 向后查找下一個榛斯。
N: 向前查找下一個。
-
可以用grep或vimgrep查找一個模式都在哪些地方出現(xiàn)過搂捧,
其中:grep是調(diào)用外部的grep程序驮俗,而:vimgrep是vim自己的查找算法。
用法為: :vim[grep]/pattern/[g] [j] files
g的含義是如果一個模式在一行中多次出現(xiàn)允跑,則這一行也在結果中多次出現(xiàn)王凑。
j的含義是grep結束后搪柑,結果停在第j項,默認是停在第一項索烹。
vimgrep前面可以加數(shù)字限定搜索結果的上限工碾,如
:1vim/pattern/ % 只查找那個模式在本文件中的第一個出現(xiàn)。
其實vimgrep在讀純文本電子書時特別有用术荤,可以生成導航的目錄倚喂。
比如電子書中每一節(jié)的標題形式為:n. xxxx。你就可以這樣:
:vim/^d{1,}./ %
然后用:cw或:copen查看結果瓣戚,可以用C-w H把quickfix窗口移到左側端圈,
就更像個目錄了。
可以打開多個文件
vi a.txt b.txt c.txt
使用:next(:n)編輯下一個文件子库。
:2n 編輯下2個文件舱权。
使用:previous或:N編輯上一個文件。
使用:wnext仑嗅,保存當前文件宴倍,并編輯下一個文件。
使用:wprevious仓技,保存當前文件鸵贬,并編輯上一個文件。
使用:args 顯示文件列表脖捻。
:n filenames或:args filenames 指定新的文件列表阔逼。
vi -o filenames 在水平分割的多個窗口中編輯多個文件。
-
vi -O filenames 在垂直分割的多個窗口中編輯多個文件地沮。
-
文件比較
可以逐行的對文本文件進行比較嗜浮。Vim可以并排顯示兩個版本的文件,同時以各種各樣的顏色來表示有差別部分摩疑。改變過危融、新增的或者是被刪除的行會以顏色高亮來強調(diào),沒有改變過的部分則會被自動折疊表示雷袋。
對于已經(jīng)在vim中打開的兩個緩沖區(qū)吉殃,分別使用:diffthis之后將會對這兩個緩沖區(qū)的內(nèi)容進行比較,被比較的緩沖區(qū)可以是一個尚未存盤的內(nèi)存中的緩沖區(qū)楷怒。
在比較兩個文件的不同之處時寨腔,可以用:diffget和:diffput命令對每一處不同進行雙向的同步,也可以在比較不同時對內(nèi)容進行其它編輯率寡,然后用:diffupdate對最新內(nèi)容重新進行比較。
在瀏覽兩個文件的不同之處時倚搬,可以用[c和]c兩個Normal模式的命令直接跳轉到上一個和下一個不同之處冶共。
可以通過diffopt等選項更精細地控制哪些區(qū)別被認為是真正的不同之處,比如可以設置比較時忽略空白字符數(shù)量的不同。
Unix下可以用vimdiff命令來使用這個功能捅僵。
不足之處
- 大文件讀取速度很慢(可在vim.org下載并安裝名為LargeFile的Script來優(yōu)化)LargeFile
- 即使文件不大家卖,如果有非常長的行的話,處理也會變慢(同上)
- vim自己的腳本語言處理速度不快庙楚,若是安插過多腳本包上荡,引導速度會變慢。
- 存在類似Ctrl-1等不能被映射的鍵(限于某些字符終端的性能)