使用vi編輯器的時候發現,ESC鍵不能返回到預設模式,輸入:help命令,發現ubuntu預設安裝的vim-tiny,很多功能不完善。所有為了方便,需要安裝完整的vim。注意:在ubuntu系統中vi和vim命令實際上是都是使用vim。
Vim 有以下幾個模式:
- 正常(normal)模式,預設的編輯模式;下面如果不加特殊說明,提到的命令都直接在正常模式下輸入;任何其它模式中都可以通過鍵盤上的 Esc 鍵回到正常模式。
- 命令(command)模式,用於執行較長、較複雜的命令;在正常模式下輸入“:”(一般命令)、“/”(正向搜尋)或“?”(反向搜尋)即可進入該模式;命令模式下的命令要輸入斷行符號鍵(Enter)才算完成。
- 插入(insert)模式,輸入文本時使用;在正常模式下鍵入“i”(insert)或“a”(append)即可進入插入模式(也有另外一些命令,如“c”,也可以進入插入模式,但這些命令有其它的作用)。
- 可視(visual)模式,用於選定文字區塊;可以在正常模式下輸入“v”(小寫)來按字元選定,輸入“V”(大寫)來按行選定,或輸入“Ctrl-V”來按方塊選定。
- 選擇(select)模式,與普通的 Windows 編輯器較為接近的選擇文字區塊的方式;在以可視模式和選擇模式之一選定文字區塊之後,可以使用“Ctrl-G”切換到另一模式——該模式很少在 Linux 上使用,本文中就不再介紹了。
安裝方法:
方法一:apt-get install vim
系統將安裝vim, vim-runtime 軟體包,系統推薦安裝vim-scripts,vim-doc,ctags,最好安裝這些推薦的軟體包,因為它們可以使vim支援文法高亮顯示。
方法二:使用synaptic package manager (新立得軟體包管理器)
安裝vim,vim-runtime,vim-scripts,vim-gnome,vim-doc,exuberant-ctags軟體包。
安裝完畢後,在終端輸入vim命令即可,安裝的版本是7.2.245。輸入:help命令顯示如下:
~ VIM - Vi IMproved
~
~ version 7.2.245
~ by Bram Moolenaar et al.
~ Vim is open source and freely distributable
~
~ Become a registered Vim user!
~ type :help register for information
~
~ type :q to exit
~ type :help or for on-line help
~ type :help version7 for version info
Vi 和 vim 區別
vim的這些優勢主要體現在以下幾個方面:
1、多層復原我們知道在vi裡,按 u只能撤消上次命令,而在vim裡可以無限制的撤消。
2、易用性vi只能運行於unix中,而vim不僅可以運行於unix,windows ,mac等多操作平台。
3、文法加亮vim可以用不同的顏色來加亮你的代碼。
4、可視化操作就是說vim不僅可以在終端運行,也可以運行於x window、 mac os、 windows。
5、對vi的完全相容某些情況下,你可以把vim當成vi來使用。
VIM和Emacs比較
----------------------------------------------------------------------------
VIM和Emacs的相似之處:
首先都是全功能的編輯器
縮排,重新編排格式
文法高亮
無限制的"撤消"和"重做"
多個剪下,粘貼板
拼字檢查
多語言支援
可擴充性強
宏,函數
自訂鍵
自己定製.emacs和.vimrc(很多人的這兩個檔案都寫得跟天書似的,可能主要考察一下記憶力)
操作文本串,多行,矩形塊
幾乎可以識別任何文字檔類型
沒有行長度和檔案大小的限制(作業系統有限制除外)
自動識別UNIX,MAC,MSWIN的行結尾符
二進位檔案編輯
都有很好的協助和使用者手冊以及免費的電子書
都有TTY和GUI版本
可以在很多作業系統上運行(*nix,win32,Mac...)
都有父老兄弟:Emacs有Xemacs及其派生的Epsilon,JOVE等;VIM有其老頭子VI和兄Nvi,Vile,Elvis等
都是FREE SOFTWARE,可以方便地得到
-----------------------------------------------------------------------------
VIM 和 Emacs的不同:
vim主要設計用來寫程式的,當然也可操作眾多的文字檔;Emacs主要設計用來文本操作的
vim體積小啟動快;相反,Emacs體積大,啟動慢
VIM專註於文本編輯;而Emacs功能強大:除了VIM常乾的事外,還有排版,收發郵件,IDE,播放MP3,排程,系統管理,瀏覽網頁,甚至教你做一道精美的川菜....,功能強大到BT的地步. 故若說VIM是一種工具的話,則Emacs則可認為是一種"生活平台"
VIM學習曲線陡峭而較短;Emacs 學習曲線平緩而較長
VIM是有模式的編輯器;而Emacs是沒有模式的(現在的很多編輯器和word處理器都是無模式的)
"無模式"的優缺點
常見而顯得親近
對於標準的下拉式功能表式GUI程式,容易適應
其命令有複雜的文法和很難敲的多個鍵的組合,因鍵盤上的鍵是有限的,所以恨不得加個腳踏
甚至有些鍵在標準鍵盤上都沒有
"有模式"的優缺點
容易迷惑現在在那個模式下:Normal mode ,Visual mode ,Select mode ,Insert mode ,Command-line mode, ex mode ; ^X mode, operator-pending mode, Replace mode, Insert normal mode, Insert Visual mode, Insert Select mode我能想起的mode就這些---這麼多,頭都大了.
在模式間頻繁轉換是令人討厭的
可以有更多的按鍵用於命令
幾乎所有的時間手指一般都停留在"normal position",故而效率高
Emacs的GUI更容易操作大體積的文本工作;gvim與Xwindow接合得更好--看起來感覺更舒服一些:好看一些的字型,好一點的文法高亮,好看一點的工具條等等. Emacs的TTY版本與GUI版本看起來非常相似, 而VIM的TTY版本和GUI版本(gvim)就有很大的不同。
下面是兩位高手的文章:(王垠之《Emacs是一種信仰!世界最強編輯器介紹》,Dieken之《程式員的編輯器——Vim》
關於window下使用vim的使用請看:http://blog.sina.com.cn/s/blog_46dac66f010005kw.html
VIM使用說明
我們使用的大多數編輯器,都可以直接在編輯區輸入字元,並且能夠通過一些快速鍵來完成一些控制功能,比如使用方向鍵移動游標,使用BackSpack或者Delete鍵刪除文字,使用PgUp和PgDn翻頁,使用Home和End來定位行首和行末……
而Vim是一個帶模式的編輯器,同樣的按鍵,在不同模式下,具有不同的功能定義。例如h、j、k、l在編輯模式下輸入相應的字元,在普通模式下卻相當於方向鍵的作用。
由於需要切換模式,Vim的使用起來略顯繁瑣。不過優點也顯而易見:您只要把手安安穩穩的放在打字區就可以了,而不需要使用諸如方向鍵、排版鍵、小鍵盤等需要挪開雙手的鍵位,從而提高了您的效率和專註程度。事實上,Vim的前身Vi誕生的時候,鍵盤上還沒有方向鍵、排版鍵和小鍵盤:)
命令
----
vi [檔案名稱]
vim [檔案名稱]
使用Vim編輯檔案
vimtutor [語言]
vim教程,相當於使用Vim編輯器以唯讀模式開啟教程檔案。您無論對這個檔案作了什麼,都會在退出後恢複原來的樣貌。與唯讀模式的區別在於,它不會沒有眼色的提醒您,現在的狀態為唯讀模式。您可以使用它作一些練習
您可以指定教程檔案的語言,如果使用本地語言(ZH_cn)出現亂碼,您可以嘗試使用英語
vimtutor en
vimdiff [檔案1] [檔案2] [其它檔案]……
設定檔
--------
Vim的全域設定檔為“/etc/vim/vimrc”,使用者設定檔為“~/.vimrc”,“ " ”起始的行為注釋行。我們提供的配置項,您直接加入設定檔就可以了
您可以先對Vim進行一些簡單的配置:
"設定檔案編碼
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
"開啟文法加亮
syntax on
"配色風格
colorscheme pablo
"設定行距 GUI介面中生效
set linespace=4
"設定GUI選項
"set guioptions=gmrLtT m:菜單 T:工具列
set guioptions=gmrLt
"設定Tab鍵縮排的空格數
set tabstop=4
"設定編輯器將多少空格視為一個縮排
set shiftwidth=4
"設定摺疊方式
"set foldmethod=indent
"以下字元將被視為單詞的一部分 (ASCII):
"set iskeyword+=33-47,58-64,91-96,123-128
模式介紹
--------
Vim常見的模式有:普通模式、插入模式、命令模式,另外我們也會經常用到可視模式。
Vim啟動時進入普通模式;或者在其它模式下,按下Esc鍵,便可以回到普通模式。
使用“vimtutor en”命令進入教程,現在是普通模式。隨便按幾下“j、k、l、h”鍵,您會發現游標的位置發生改變。
按下“i”鍵,編輯器底部出現了“-- 插入 --”或者“-- insert --”,您進入了插入模式。隨便按幾下“j、k、l、h”,您會發現相應的字元出現在編輯區,現在還可以通過方向鍵來移動游標。
可能您覺得使用方向鍵移動游標不是什麼問題,但是習慣了Vim後,您會認為方向鍵太麻煩了,簡單不能容忍!好了,現在按下Esc鍵回到普通模式,我們又可以使用“j、k、h、l”來移動游標了。
在普通模式下,按下“:”鍵(也就是Shift+;),在編輯器底部出現了一個“:”,您進入了命令模式。在“:”後輸入一個命令“new”,斷行符號後,編輯器被分割為上下兩欄。
為了方便起見,我們在命令前加一個“:”來表示命令模式下輸入的命令,像這樣
:vnew
一個命令能夠以一些規則簡化,上面的命令也可以寫為這種形式
:vne
現在您的編輯區一定弄的四分五裂,您可以使用命令“:quit”來關閉當前欄,直接用簡寫就可以了
:q
這個命令是退出編輯器,如果編輯區被分成多欄,則是退出當前欄。
執行完一個命令(按下斷行符號後),編輯器會自動回到普通模式。如果您想不執行當前命令,直接回到普通模式,您可以按下Esc鍵。
按下“v”鍵,您進入了可視模式,可以使用“j、k、l、h”移動游標,高亮選取文本 。
事實上,可視模式相當於高亮選取文本後的普通模式。
可視模式具有子模式,以行為單位進行選取的可視行模式,使用“V”鍵進入(也就是Shift+v);和以塊為單位進行選取的可視塊模式,使用“Ctrl+v”鍵進入。
模式切換
--------
好了,現在我們總結一下模式間切換的方法
其它模式==>普通模式
Esc
普通模式==>插入模式
i 在游標前插入 I 在行首插入
a 在游標後插入 A 在行末插入
o 在當前行之下建立行 O 在當前行之上建立行
r 替換當前字元 R 從當前字元開始替換
普通模式==>命令模式
:
普通模式==>可視模式
v 可視模式
V 可視塊模式
可視塊模式
移動
----
在普通模式中,您可以使用以下方式移動游標
j 向下
k 向上 k
l 向右 h l
h 向左 j
您可以使用其它更有效率的方式移動游標
w 下一個單詞詞首 W 將特殊符號視為單詞的一部分
b 上一個單詞詞首 B 同上
e 單詞末尾 E 同上
0 行首 ^ 行首文字(行首空格之後)
$ 行末
H 頁面頂部
M 頁面中部
L 頁面底部
在其它模式中,您可以使用方向鍵移動游標,不過我們不推薦您那樣作,您可以在設定檔中綁定插入模式下的功能鍵
noremap!
noremap!
noremap!
noremap!
………………
<作用範圍> <鍵位> <功能>
其中,map!綁定的鍵盤對應,作用於所有模式;inoremap!綁定的映射,僅作用於插入模式。
數字參數
--------
您也可以使用數字參數,來重複執行。例如
100j 執行100次j鍵,向下100行
標記
----
您可以在當前游標處作一個標記,以便快速返回
m<標記名稱> 定義標記。標記名稱為一個字元
`<標記名稱> 返回標記
mx 將當前游標處定義為標記 x
`x 返回標記 x
瀏覽
----
下翻一頁 下翻半頁
上翻一頁 上翻半頁
gg 檔案首行
G 檔案末行
<行號>G 按行號轉到相應行
<1~100>% 按百分比轉到相應的行數
zz 將游標所在行調整至頁面中間
下卷一行
上卷一行
Tips:gg定位到檔案首行,V進入可視行模式,G定位到檔案末行,實作類別似“全選”的功能。依次按下 g g V(Shift+v) G(Shift+g)
編輯
----
x 剪下當前字元
dd 剪下當前行
y 複製可視模式選取字元
yy 複製當前行
p 在游標後粘貼 P 在游標前粘貼
u 撤消
重做
逐字複製上一行內容
逐字複製下一行內容
寄存器操作
----------
Vim可以將不同欄位剪下或複製到不同寄存器中,您可以從不同寄存器中取出內容後粘貼
"<寄存器名稱> 按下“"”鍵和另一個字元鍵,便可以定義一個寄存器。例如:
"a "1
定義寄存器後直接進行操作
"ayy 將當前行複製到寄存器 a 中
"ap 將寄存器 a 中的內容粘貼到游標之後
Tips:通常情況下,寄存器 + (" +(Shift+=))對應X下的剪貼簿。您在其它程式中複製的內容,可以使用 "+p 粘貼到Vim中;您在Vim中,可以使用 "+y 將內容複寫到剪貼簿,再粘貼到其它程式中
沒有指定寄存器時,Vim使用“無名寄存器”儲存內容
搜尋和替換
----------
按下“/”鍵,編輯器底部會出現“/”符號,接著輸入字串,便可以進行搜尋
/ 向下搜尋 ? 向上搜尋
n 搜尋下一個
N 搜尋上一個
:s/<源字串>/<目標字串> 將源字串替換為目標字串
:s/<源字串>/<目標字串>/g 替換當前行中所有合格字串
:<行號1>,<行號2>s/<源字串>/<目標字串>/g 在指定行中進行替換
:%s/<源字串>/<目標字串>/g 全文替換
Regex
----------
在搜尋和替換時,可以使用Regex進行匹配
宏
--
您可以將一系列的動作記錄為一個宏,然後執行它
q<宏名稱> 開始錄製宏。宏名稱為一個字元
q 錄製中按下“q”鍵,結束錄製
@<宏名稱> 執行宏
插入模式下的快速鍵
------------------
<寄存器名稱> 輸入指定寄存器內容
<2個字元> 輸入二合字元
<數字> 通過數字編碼輸入字元
<鍵位> 輸入鍵位的名稱
鍵綁定、縮寫
------------
前面我們已經向您介紹了鍵綁定,
map!
角括弧及其中的內容,為Vim設定檔的約定,分別描述了按鍵和功能,表示將功能編寫到按鍵上。如果綁定的只是一般字元,例如:
map! xxx XXXXX
表示將“XXXXX”綁定到“xxx”上。當您鍵入“xxx”時,編輯器會自動替換為“XXXXX”。
如果您只是想將字串綁定為縮寫,方便輸入,我們建議您使用“iabbrev”來綁定。例如:
iabbrev ubt Ubuntu
在插入模式下鍵入“ubt”,編輯器會自動替換為“Ubuntu”。
您可以將“iabbrev”命令縮寫為“iab”,例如:
iab ubt Ubuntu
以上命令,您可以直接在命令模式下輸入,臨時啟用。也可以寫入設定檔,永久啟用。
單詞補全
--------
下一個匹配項
上一個匹配項
您可以在設定檔中定義補全的方式
"自動補全方式:(使用逗號分隔)
set complete=k,.
" . 當前檔案
" b 已被裝緩衝區,但是沒有在視窗內的檔案
" d 在當前的檔案中定義和由#include包含進來的檔案
" i 由#include包含進來的檔案
" k 由dictionary選項定義的檔案
" kfile 名為{file}的檔案
" t 標記(tags)檔案
" u 沒有載入的緩衝區
" w 在其他視窗中的檔案
"設定自動補全字典 :
set dictionary=path
命令模式
--------
前面介紹了普通模式和插入模式。我們發現,普通模式主要用來瀏覽和修改常值內容,而插入模式則用來向文本中新增內容。
而命令模式則多用於操作文字檔(而不是操作文字檔的內容),例如儲存檔案;或者用來改變編輯器本身的狀態,例如設定多欄視窗、標籤或者退出編輯器……
w(rote) 將改變寫入檔案
:w
q(uit) 退出編輯器
:q
某些情況下,編輯器會阻止命令的執行。例如您修改了檔案,而沒有儲存,那麼您使用“:q”命令退出時,編輯器就不會執行這條命令,而是提醒您儲存檔案。
這個時候,您可以在命令末尾追加“!”來強制執行命令
:<命令>!
例如“:q!”,即便您沒有儲存已修改的檔案,使用此命令,編輯器也會放棄修改而強行退出
以“!”引導一個Shell命令,則可以從Vim臨時切換到Shell中,執行一個Shell
:!<命令>
例如“:!ls”
多欄視窗
--------
您可以使用以下命令,將當前視窗水平分為兩欄
:new
建立一欄空白視窗
:split
將當前檔案分兩欄顯示
同理,您可以使用下列命令,將當前視窗水平分為兩欄
:vnew
:vsplit
先按下鍵,再按下方向鍵“j、k、l、h”,您可以切換到其它欄;在當前欄中使用“:q”命令,可以退出當前欄,也可以使用其它命令,對當前欄作出修改
如果您希望當前命令在所有欄中生效,您可以在命令的末尾追加“all”
:<命令>all
例如:
:qall
如果您希望這條命令強制執行,那麼“!”位於命令的最末
:<命令>all!
例如:
:qall! 強行退出所有欄視窗
標籤頁
------
Vim在7以後的版本,開始支援標籤頁的功能
:tabnew 建立一個標籤
:tabnext 轉到下一個標籤
:tabprevious 轉到上一個標籤
多數情況下,您可以使用滑鼠點擊標籤進行切換。