Ubuntu/Linux入門介紹-VIM簡介(轉)

BSDLite發表於2007-08-17
Ubuntu/Linux入門介紹-VIM簡介(轉)[@more@] 我們使用的大多數編輯器,都可以直接在編輯區輸入字元,並且能夠透過一些快捷鍵來完成一些控制功能,比如使用方向鍵移動游標,使用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 替換當前行中所有符合條件的字串
:,s///g 在指定行中進行替換
:%s///g 全文替換

正規表示式
----------
在搜尋和替換時,可以使用正規表示式進行匹配



--
您可以將一系列的操作錄製為一個宏,然後執行它
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 轉到上一個標籤

多數情況下,您可以使用滑鼠點選標籤進行切換。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-963441/,如需轉載,請註明出處,否則將追究法律責任。

相關文章