http://cygwin.com/index.html 還是看官網!
很多用windows的朋友不習慣於用linux的開發環境。雖然很樂意嘗試一下,但是往往怕 linux系統打亂了自己的正常生活:1〉裝linux系統把windows系統給搞壞了,導致自己無法正常生活;2>linux開發上手太難,寫出第一個helloworld不亞於java的難度,環境配置摸不著頭腦。對於此,我的看法是:路不管平還是陡,終歸你要走的,如果你願意投入到linux開發的社群中來,不會安裝linux系統,不會配置工作環境是不能想象的。(事實上,確實要瞭解很多東西的原理,不然很難排錯:諸如,硬碟引導器的引導原理、分區結構原理及linux分區結構和檔案系統、環境變數的設定、種類繁多的壓縮包安裝包的解壓安裝方法、使用者系統管理權限管理等常用命令、以至於驅動安裝系統中文化等等異常瑣碎的東東)。
(http://www.fanqiang.com)
本文試圖跳過這個難走的步驟,啟用一個win環境下的linux模擬器(和linux下面的命令列開發環境基本一致),用短短的20分鐘的時間,教你做出一個純正的linux下gcc編譯的helloworld。就象是買點心前先嘗嘗味道,不也是一件很愉快的事情嗎?(註:cygwin事實上不僅有此類比功能,它也是移植unix<-->win程式的一個很有效工具,也有人用它來做嵌入式系統開發)
一、cygwin是什嗎?
這個問題你最好google一下"cygwin的曆史",或許能夠獲得更為詳盡的答案。簡而言之,cygwin是一個在windows平台上啟動並執行 linux類比環境,是cygnus solutions公司開發的自由軟體(該公司開發了很多好東西,著名的還有eCos,不過現已被Redhat收購)。插一句廢話,很多朋友不明白 linux和unix的區別和聯絡,在此也簡要介紹一下。UNIX是一個註冊商標,是要滿足一大堆條件並且支付可觀費用才能夠被授權使用的一個作業系統; linux是unix的複製版本,是由其創始人Linus和諸多世界知名的駭客手工打造的一個作業系統。為什麼linux和unix之間有很多軟體可以很輕鬆的移植?因為linux也滿足POSIX規範,所以在運行機制上跟unix相近。
以下引用網上的一段話(出處:http://blog.csdn.net/glock18/archive/2004/07/10/38275.aspx),
用於說明cygwin的工作機制:cygnus當初首先把gcc,gdb,gas等開發工具進行了改進,使他們能夠產生並解釋win32的目標檔案。然後,他們要把這些工具移植到windows平台上去。一種方案是基於win32 api對這些工具的原始碼進行大幅修改,這樣做顯然需要大量工作。因此,他們採取了一種不同的方法——他們寫了一個共用庫(就是cygwin dll),把win32 api中沒有的unix風格的調用(如fork,spawn,signals,select,sockets等)封裝在裡面,也就是說,他們基於
win32 api寫了一個unix系統庫的類比層。這樣,只要把這些工具的原始碼和這個共用庫串連到一起,就可以使用unix主機上的交叉編譯器來產生可以在 windows平台上啟動並執行工具集。以這些移植到windows平台上的開發工具為基礎,cygnus又逐步把其他的工具(幾乎不需要對原始碼進行修改,只需要修改他們的配置指令碼)軟體移植到windows上來。這樣,在windows平台上運行bash和開發工具、使用者工具,感覺好像在unix上工作。關於cygwin實現的更詳細描述,請參考http://cygwin.com/cygwin-ug-net/highlights.html
二、cygwin的安裝。
cygwin的安裝檔案很容易通過google找到。目前國內的網站上有"網路安裝版"和"本地安裝版"兩種。標準的發行版應該是 網路安裝版。兩者並無大不同,下面介紹一下安裝的過程。
step1. 下載後,點擊安裝檔案(setup.exe)進行安裝,第一個畫面是GNU著作權說明,點"下一步(N)—>",
進入安裝模式選擇畫面。
step2. 安裝模式有"Install from Internet"、"Download form Internet"、
"Install from Local Directory" 三種。"Install form Internet"就是直接從internet上裝,適用於網速較快的情況。如果你和我一樣網速不是很快,或者說裝過之後想把下載的安裝檔案儲存起來,下次不再下載了直接安裝,就應該選擇"Download form Internet",下載安裝的檔案(大約40M左右)。
事實上,所謂的"本地安裝版",也是別人從網上下載全部檔案後打的包(適用於中國國情嘛^_^)
step3. 接下來是選擇安裝目的路徑和安裝源檔案所在的路徑,之後就進入了選擇安裝包所在的路徑。
注意了阿,這裡可是重頭戲。我第一安裝的時候就是沒有看清這一步,結果沒有把gcc裝進去,導致沒法編譯檔案。
+ All Default
+ Admin Default
....
+ Devel Default
+ Editors Default
....
如所示,你在這個TreeView的某個節點上雙擊,就可以改變它的狀態,如Default、Install、Uninstall、Reinstall四種狀態。預設的都是Default狀態,很多工具的預設狀態都是不安裝。
在這裡我選擇了在All這一行上後面的Default上點Install,全部安裝,以免後患。(注意:這裡的樹形控制項和win下面的不同,你試試驗在All上點 和 在All這一行後面的Default上點,會有不同的響應)
step4. 點下一步,安裝成功。它會自動在你的案頭上建立一個捷徑。
好了,下面就開始我的linux旅程了。雙擊cygwin的捷徑進入系統。
首先介紹幾個簡單的linux命令。
pwd 顯示當前的路徑
cd 改變當前路徑,無參數時進入對應使用者的home目錄
ls 列出目前的目錄下的檔案。此命令有N多參數,比如ls -al
ps 列出當前系統進程
kill 殺死某個進程
mkdir 建立目錄
rmdir 刪除目錄
rm 刪除檔案
mv 檔案改名或目錄改名
man 線上說明
less 顯示檔案的最末幾行
由於linux下面的命令大多都有很多參數,可以組合使用。所以,每當你不會或者記不清楚改用那個參數,那個開關的時候,可以用man來尋找,比如,我想尋找ls怎麼使用,可以鍵入
$ man ls
系統回顯資訊如下:
LS(1) FSF LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by
default). Sort entries alphabetically if none of -cftuSUX
nor --sort.
-a, --all
do not hide entries starting with .
-A, --almost-all
do not list implied . and ..
-b, --escape
print octal escapes for nongraphic characters
--block-size=SIZE
use SIZE-byte blocks
:
很全是吧,嘿嘿。
好了,多說無意,讓我們來寫一個hello world程式。
# cd
進入了/home/administrator目錄,我當前的登陸帳號是administrator
# mkdir source
建立一個叫做source的子目錄
# cd source
進入 /home/administrator/source
# vim hello.c
啟動vim編輯器,來編寫程式。好了,現在有必要簡要介紹一下vim。
在linux界,有兩大編輯器最有曆史。其一是vi,其二是emacs。vi現在已經演化成了vim,比當前的vi更為強大。vim和emacs是兩種截然不同的東西,vim強調用簡潔的命令來完成功能,無論是尋找、替換、
Regex匹配、編譯、連結、排錯、函數間跳轉等等等等都在命令列中完成,並且它把方向鍵也整合在了hjkl四個鍵之上,可以說,用了vim基本上可以不用滑鼠了:p emacs則是在功能強大上做文章,版本控制、類比多種編輯環境、對文本進行各種操作,可謂之一個強大的文本處理系統。emacs是用諸如Ctrl+ Alt+K 之類的按鍵組合來控制的;vim則是用se(set 的縮寫)等簡潔命令來控制的。
由於cygwin中只提供了vim(能不能自己裝emacs我還沒有試過),我們就先體驗一下vim吧:p
vim載入文字檔後分為命令模式和插入模式兩種。插入模式,顧名思義就是輸入編輯文本;命令模式,則是輸入各種vim的控制命令,常用的有:
i 進入編輯模式
h 左移
j 下移
k 上移
l 右移
w 存檔
q 退出
! 強調執行
有些命令是可以組合使用的,如果你修改了某個檔案,想存檔退出,則可以使用wq;如果你想放棄存檔,直接退出則可以使用q! 好了大家體驗一下吧,記住:從編輯模式退回命令模式按"Esc",再按":",在輸入指令,從命令模式進入編輯模式用i,初次使用vim肯定很難受,嘿嘿,不過用多了就習慣了,確實很省勁。
我們編輯hello.c檔案,輸入:
#include
int main(void) {
printf( "Hello World!");
}
然後,輸入wq命令退到命令列。
輸入編譯指令:
# gcc hello.c -o hello
編譯成功後可以看一下
# ls
看到hello.exe了吧,嘿嘿。
好,讓我們運行看看。
# ./hello
效果如何?不錯吧?
okey,現在玩一個C++的hello world,
# vim world.cpp
輸入:
#include
using namespace std;
void main() {
cout << "Hello World!";
}
編譯C++程式要用g++
# g++ world.cpp -o world
運行一下哈,
# ./world
如何,效果不錯吧?諸位都是高手,走到這步應該編些簡單程式都不成問題了吧:p
好了,關於如何編寫makefile檔案,如何用gdb下次再說了。VIM 使用簡介來源:http://elephant.linux.net.cn/articles/vim.php?lang=zh
Vi IMproved (VIM) 是 Bram Moolenaar 開發的與 UNIX 下的通用文字編輯器 vi 相容並且更加強大的文字編輯器。它支援文法變色、正規運算式匹配與替換、插入補全、自訂鍵等等功能,為編輯文本尤其是編寫程式提供了極大方便。VIM 可以運行在“任何”作業系統上,包括我們常用的 Windows 和 UNIX/Linux。一旦掌握了 VIM,你就掌握了一項跨平台的利器。
儘管 VIM 功能十分強大,但對於剛接觸它的人尤其是用慣類似 Windows 的 notepad 的人來說,VIM 並不十分易於掌握,畢竟它相容的是 vi 而不是 notepad。本文旨在介紹 VIM 中我所瞭解的用法,希望有更多的人喜歡 VIM。應該指出的是,VIM 中有太多的功能和命令,有許多你並不用的著,因此沒有記的必要,有些我也不知道,這要靠你來發現,關鍵是多看 :help ,多試。另外,取決於你的 VIM 的版本以及編譯安裝時的設定,文中講述的某些功能或命令在你的 VIM 中也許並不存在,如有需要請升級。
1. vi 的基本用法
vi 的螢幕地區分為兩個部分:最下面一行是命令列,一般用於提示資訊或命令列輸入;除此之外為本文顯示地區。跟 notepad 不同的是,vi 中存在兩種模式:普通(Normal)模式和插入(Insert)模式。
進入 vi 後預設即為普通模式。新手一般初次進入 vi 後就想輸入一串字元,結果發現 vi 一連串莫名其妙的反應。其實,在 vi 的普通模式下,任何按鍵包括一般字元都表示某個命令,並不表示在當前游標處插入字元。常用的命令有:(注意區分大小寫)
: 進入命令列
i 或 a 進入插入模式。區別是:i 進入插入模式後,游標在當前字元前面; a 進入插入模式後,游標在當前字元後面
h j k l 分別是游標左移、下移、上移、右移(一般來說你不會用到它們來移動游標,按方向鍵就可以了)
x 刪除一個字元
dd 刪除一行
J 刪除本行的斷行符號符,把下一行併入本行末尾
r字元 替換游標所在字元為新字元
^ $ 分別是游標移到行首和行末
數字G 移動游標到第若干行,如果直接按 G 則移動到最後一行
在普通模式中,命令以按鍵形式輸入。而在命令列中,命令以字串形式輸入。下面是常用的命令列:
:q 退出! (更確切的說應該是關閉當前檔案)
:w 檔案名稱 存檔。如果還是儲存為當前檔案,不必寫檔案名稱
:wq 存檔退出
:new 檔案名稱 開啟或建立檔案(同時關閉當前檔案)。如果不指定檔案名稱或者檔案名稱不存在則是建立檔案
:help 協助! 看完後用 :q 關掉視窗。可以在 help 後面加某個說明主題的名稱,如 :help dd 或 :help help
還有一點是,如果某個命令得到警告(拒絕執行),則要在命令的命令詞後加歎號表示強制執行。比如你修改過檔案,但又想放棄存檔並退出,如果輸入 :q, vi 會告訴你檔案已修改,這時,你只能輸入 :q! 退出。又如用 :w! a.txt 表示把當前檔案存為 a.txt 而不管 a.txt 是否已經存在。
插入模式就不用多說了,添加你的新內容吧。不過,你也許會發現 BackSpace 鍵和 Delete 鍵的運用很受限制,也不能像 notepad 那樣選擇、複製和粘貼。這些都是由於這是 vi 的標準,後面我們將看到 VIM 擴充的功能可以解決這些問題。記住按 ESC 退出插入模式,回到普通模式。
2. 複製和粘貼
為了便於選取文本,VIM 引入了可視(Visual)模式。要選取一段文本,首先將游標移到段首,在普通模式下按 v 進入可視模式,然後把游標移到段末。需要注意,游標所在字元是包含在選區中的。這時可以對所選的文本進行一些操作,常用的(可視模式)命令有:
x 或 d 剪下(即刪除,同時所選的文本進入剪貼簿)
y 複製
r字元 所有字元替換為新字元
u U ~ 分別是所有字母變小寫、變大寫、反轉大小寫
> < 分別是縮排和反縮排
當輸入了命令以後,VIM 將回到普通模式,這時可以按 p 或 P 進行粘貼。普通模式下有關複製和粘貼的命令:
v 進入可視模式
p 或 P 在當前位置粘貼剪貼簿的內容,p 粘在游標所在字元後面,P 粘在前面
不得不承認,雖然引入了可視模式,複製和粘貼在 VIM 中仍然是比較麻煩的操作,這也許是 VIM 唯一的缺點。:-) 此外,VIM 還引入了選擇 (Select)模式,跟可視模式類似。結合一些鍵的定義和選項設定,可以實現跟 notepad 相同的複製和粘貼的使用習慣。限於篇幅和水平,在此不提。
3. VIM 的定製
VIM 在 vi 的基礎上擴充了許多功能和命令,提供了許多選項。但是有些功能預設是關閉的,有些選項可能也不符合個人的使用習慣。為此,我們需要編寫一個 vimrc 檔案。在 DOS/Windows 版本的 VIM 中,這個檔案應放在 VIM 的目錄下,檔案名稱為“_vimrc”。在 UNIX 版本 的 VIM 中,這個檔案一般可以放在使用者的個人主目錄下,檔案名稱為“.vimrc”。VIM 啟動時將會把 vimrc 檔案中的每一行作為命令列依次執行,我們可以在該檔案中加入若干命令,使 VIM 啟動時自動開啟一些有用的功能,定義一些常用的快速鍵等。
下面是一個 vimrc 檔案的樣本:(請注意區分瀏覽器的換行與實際的換行。)
" 設定 Backspace 和 Delete 的靈活程度,backspace=2 則沒有任何限制
set backspace=2
" 設定在哪些模式下使用滑鼠功能,mouse=a 表示所有模式
set mouse=a
" 設定路徑,在 f 等命令中涉及此參數
" 對於 Windows 編程,path 可設為如
" set path=.,"C:/Program Files/Microsoft Visual Studio/vc98/Include",,
" 對於 UNIX 編程,path 可設為如下
set path=.,/usr/include,/usr/include/qt,,
" 開啟游標的行列位置顯示功能
set ruler
" 設定跳格距離
set tabstop=4
" 設定自動縮排格數
set shiftwidth=4
" 開啟自動縮排功能
set autoindent
" 設定哪些鍵可以行間繞轉,如下設定則 Backspace 和方向鍵等均可行間繞轉
set whichwrap=b,s,h,l,<,>,[,]
" 根據當前檔案文法自動變色。VIM 識別上百種文字檔的文法,如 html、c++、java 等
syntax on
" 以下是個人習慣,定義 等鍵,便於插入模式和可視模式之間的切換
" (1) 使 x d y 自動返回插入模式
vnoremap y "ryi
vnoremap x "rxi
vnoremap d di
" (2) 普通模式和插入模式下均可按 粘貼
imap :if col(".")!=1 exe 'normal "rp'elseexe 'normal "rP'endif`[i
nmap "rP
" (3) 普通模式和插入模式下均可按 進入可視模式
imap :if col(".")!=1 exe 'normal lv'elseexe 'normal v'endif
nmap v
下面給出我常用的 vimrc 檔案。另外,你的 VIM 安裝目錄下很可能也帶有一個預設的 vimrc 檔案,你都可以參考。如果遇到沒有見過的命令或者參數,可以自己看看 :help 。
* vimrc
4. VIM 的其它命令
要真正使用 VIM,光靠 vi 的基本命令當然不行,下面就來介紹更多的命令。以下的命令,有些是 VIM 特有的,有些在 vi 中也存在,我就不加區分了。其中,以“:”開頭表示該命令在命令列輸入,以“i”開頭表示這是插入模式下的命令,其它則是普通模式下的命令。表示按 Ctrl+X。
4.1 使用協助
在 :help 中,遇到超串連可以按 Ctrl+] 跳轉
在 :help 中,按 Ctrl+T 往回跳轉
4.2 開啟多個檔案
:split 檔案名稱 切分出一個新視窗,開啟指定檔案。如果省略檔案名稱,則仍顯示當前檔案,可用於同時觀察檔案的不同部分。(注意跟 :new 的區別)
f 切分顯示光線標所指的檔案名稱,VIM 會在 path 中搜尋該檔案名稱,比如常用它開啟 #include 語句中的檔案
當同時開啟幾個檔案時,按 在各視窗之間切換
_ 當同時開啟幾個檔案時,按 _ 使當前視窗最大化
:set scrollbind 設定捲動綁定屬性。所有設定了捲動綁定屬性的視窗將一起捲動。可以用 :set noscrollbind 解除綁定
4.3 撤銷和恢複
編輯過程中出現錯誤在所難免,不過沒有關係,VIM 允許無限次的撤銷。只要你沒有關閉檔案,你甚至可以一直撤銷下去,回到幾個小時以前剛開啟這個檔案開始工作時的狀態。
u 撤銷(Undo)上次所做的修改
恢複(Redo)上次撤銷的內容
4.4 字串搜尋替換
/字串 向下搜尋字串
?字串 向上搜尋字串
* # 分別是向下和向上搜尋游標所指的詞
n 重複上一次搜尋
:起始行,結束行s/搜尋串/替換串/g 從起始行到結束行,把所有的搜尋串替換為替換串
:set ignorecase 設定忽略字母大小寫。可以用 :set noignorecase 取消忽略字母大小寫
例如 /hello 從當前游標位置開始向下搜尋 hello,不帶字串的命令 / 可重複上一次搜尋,相當於 n。又如 :1,$ s/hello/hi/g 把全文中的 hello 改為 hi,其中 $ 表示最後一行。另外,你還可以先進入可視模式選擇一段文本,按:進入命令列並輸入 s/hello/hi/g ,VIM 將在選區中進行替換操作。
搜尋字串用的是正規運算式(Regular expression),其中許多字元都有特殊含義:
/ 取消後面所跟字元的特殊含義。比如 /[vim/] 匹配字串“[vim]”
[] 匹配其中之一。比如 [vim] 匹配字母“v”、“i”或者“m”,[a-zA-Z] 匹配任意字母
[^] 匹配非其中之一。比如 [^vim] 匹配除字母“v”、“i”和“m”之外的所有字元
. 匹配任一字元
* 匹配前一字元大於等於零遍。比如 vi*m 匹配“vm”、“vim”、“viim”……
/+ 匹配前一字元大於等於一遍。比如 vi/+m 匹配“vim”、“viim”、“viiim”……
/? 匹配前一字元零遍或者一遍。比如 vi/?m 匹配“vm”或者“vim”
^ 匹配行首。例如 /^hello 尋找出現在行首的單詞 hello
$ 匹配行末。例如 /hello$ 尋找出現在行末的單詞 hello
/(/) 括住某段正規運算式
/數字 重複匹配前面某段括住的運算式。例如 /(hello/).*/1 匹配一個開始和末尾都是“hello”,中間是任一字元串的字串
對於替換字串,可以用“&”代表整個搜尋字串,或者用“/數字”代表搜尋字串中的某段括住的運算式。
舉一個複雜的例子,把文中的所有字串“abc……xyz”替換為“xyz……abc”可以有下列寫法:
:%s/abc/(.*/)xyz/xyz/1abc/g
:%s//(abc/)/(.*/)/(xyz/)//3/2/1/g
其它關於正規運算式搜尋替換的更詳細準確的說明請看 :help pattern 。
4.5 插入補全
在插入模式下,為了減少重複的擊鍵輸入,VIM 提供了若干快速鍵,當你要輸入某個上下文曾經輸入過的字串時,你只要輸入開頭若干字元,使用快速鍵, VIM 將搜尋上下文,找到匹配字串,把剩下的字元補全,你就不必敲了。這樣,編程式時你起多長的變數名都沒關係了,:-) 而且還可以減少輸入錯誤。我認為,插入補全是 VIM 最為突出的一項功能。
i 向上搜尋,補全一個詞。例如,上文中出現過 filename 這個詞,當你想再輸入 filename 時,只要按 f 即可。假如 VIM 向上搜尋,找到以 f 開頭的第一個匹配不是 filename,你可以繼續按搜尋下一個匹配進行補全。當然,如果你想一次就成功,你可以多輸入幾個字元比如 filen 再按補全
i 向下搜尋,補全一個詞
i 補全一行。比如你寫過一行 for (int i = 0; i <> 即可。如果補全出來的不是你想要的那一行,你可以按 或 選擇上一個或下一個匹配行
i 在檔案系統中搜尋,補全一個檔案名稱
如果按 或 補全一個詞,在當前檔案中沒有找到匹配,VIM 將搜尋 #include 語句中的檔案,而檔案的位置將在 path 中搜尋。
4.6 鍵的定義
在 VIM 中你可以定義一個鍵,按了這個鍵等於按了某一串預定的鍵。比如
:map! ddi
表示如果你在插入模式下按 就相當於連續按了 ddi,這將會使 VIM 退回到普通模式,刪除一行,再進入插入模式。
map 命令有許多變化形式,每種變化形式所定義的鍵只在某些模式下有效,而在其它模式下無效。你需要根據情況使用正確的變化形式:
:nmap 鍵只對普通模式有效
:imap 鍵只對插入模式有效
:vmap 鍵只對可視模式有效
:cmap 鍵只在命令列下有效
:map 鍵在普通模式和可視模式都有效
:map! 鍵在插入模式和命令列下都有效
還要注意,如果你定義 :map d di 這將引起迴圈定義錯誤。這時,你需要使用 :noremap d di 來定義。同樣,noremap 也有對不同模式的變化形式。
比如,你想在檔案的每一行的倒數第二個字元處插入字串“abc”,你可以定義
:nmap $hiabcj
在普通模式下按一次將會:游標移到行末,游標左移一格,進入插入模式,輸入“abc”,退回到普通模式,游標下移一行。不停地按將解決問題。這是我臨時處理多行重複操作的常用手段,當然,這是一種笨辦法。:-) 而上文寫到的對 的定義則是 map 更複雜的用法。你還可以定義
:map :w:!gcc -o %< -I/usr/include/qt -lqt %
:map :!./%<
實現按 編譯當前檔案,按 執行。
在插入補全當中提到的補全一行需要按 ,如果你覺得麻煩,你可以定義
:inoremap
減少擊鍵次數。同樣,對 也可以作類似定義。
4.7 其它命令
:!命令列 執行一條外部命令
. 在游標當前位置處重複上一次操作
i後續字元 輸入特殊的 ASCII 字元或鍵。除了插入模式外,也適用於命令列。後續字元可以是鍵盤上的任意鍵,也可以是三位的十進位數字表示字元的 ASCII 碼
i命令 執行一個普通模式的命令,執行完畢後回到插入模式
i 跳轉到游標所指標識符的定義行。比如你在編程時遇到一個函數 CreateWindow,想看它的定義語句,你就可以在它上面按 i,VIM 將開啟新視窗,把游標移到它定義的地方。當然,前提是在當前檔案或它的 #include 檔案中存在 CreateWindow 的定義。這也牽涉到 path 的設定。不過,VIM 找得不一定很准
K 看游標所指標識符的 man 協助頁
i 把上一行對應列的字元抄下來
i 把下一行對應列的字元抄上來(寫這一行時我就用了 )
游標所指整數加一
游標所指整數減一
游標返回到以前的位置。相當於游標移動的“撤銷”
游標返回到後來的位置。相當於游標移動的“恢複”
進入可視模式,選取一個矩形地區。該命令通常用於對多行進行列操作。接著按 I 可以在塊前的每一行同時插入字元;按 A 可以在塊後的每一行同時插入字元;按 x、d 或 y 可以剪下或複製;等等
:X 對當前檔案加密
5. VIM 6.0 的一些新特性
2001 年 9 月 26 日發布的 VIM 6.0 增加了一些以往沒有的新特性。下面僅僅是一些簡單的介紹,更詳細的描述請自己看 :help 。
* 開啟目錄
在 VIM 6.0 中,:new 和 :split 等命令不但可以開啟普通檔案,還可以開啟目錄。一個目錄開啟以後將列出裡面的檔案資訊,可以按斷行符號繼續開啟相應的檔案或者子目錄,也可以按 ? 得到其它目錄操作(修改檔案名稱,刪除檔案等)的協助。
* 摺疊
當一個文本太長而你又對其中很長一大段內容不關心的話,可以把你不關心的那些行摺疊起來,讓它們從你的視線中消失。被摺疊的行將以一行顯示代替,例如:
+--217 行:2. VIM 的定製---------------------
摺疊可以有多種方式控制,可以通過設定 foldmethod 選項的值來改變。預設情況下 foldmethod=manual 為手工摺疊。下面介紹幾個使用摺疊的最簡單的命令:
(可視模式下) zf 手工建立摺疊。在可視模式下選擇一段文本,然後按 zf 可以手工建立一個摺疊
方向鍵左或右 開啟摺疊。普通或插入模式下,在摺疊行上橫向移動游標將開啟被摺疊的行
zc 關閉摺疊
* 垂直切分視窗
:vsplit 檔案名稱 垂直切分視窗。跟 :split 命令相似,但新視窗與原視窗左右並列。
* 更多的正規運算式
VIM 6.0 比以前增加了許多新的正規運算式,其中我認為最有用的是換行匹配符 /n。以前的版本中,正規運算式只能在同一行上匹配。現在,只要顯式地給出 /n,正規運算式可以跨多行。
* diff 模式
專門用於比較編輯兩個或多個內容相近的檔案的模式。一般來說,比如你要比較編輯 A 跟 B 兩個檔案,你可以命令列啟動 vim - d A B 或者這樣:先開啟檔案 A,然後 :vsplit 開啟檔案 B,對檔案 A 和 B 都輸入命令 :diffthis。這時 VIM 將非常清晰的對比顯示出兩個檔案的不同之處,編輯起來十分方便。
仔細一看,這個 diff 模式動用了 VIM 許許多多的特性,包括捲動綁定,摺疊和文法變色等等。好進階啊!
我所熟悉的 VIM 的功能已經介紹得差不多,剩下的要靠你自己來學習了。其實,VIM 的功能還有很多很多。還是那句話,多看 :help ,多試。 VIM 的協助還是挺容易看的,相信你看了以後會有更多的驚喜。另外,VIM 的首頁上有不少有用的技巧提示,也是一個很好的去處。如果你有什麼心得或者新發現,歡迎跟我討論。
希望你喜歡 VIM。