很多用windows的朋友不习惯于用linux的开发环境。虽然很乐意尝试一下,但是往往怕 linux系统打乱了自己的正常生活:1〉装linux系统把windows系统给搞坏了,导致自己无法正常生活;2>linux开发上手太难,写出第一个helloworld不亚于java的难度,环境配置摸不着头脑。对于此,我的看法是:路不管平还是陡,终归你要走的,如果你愿意投入到linux开发的社群中来,不会安装linux系统,不会配置工作环境是不能想象的。(事实上,确实要了解很多东西的原理,不然很难排错:诸如,硬盘引导器的引导原理、分区结构原理及linux分区结构和文件系统、环境变量的设置、种类繁多的压缩包安装包的解压安装方法、用户管理权限管理等常用命令、以至于驱动安装系统中文化等等异常琐碎的东东)。
本文试图跳过这个难走的步骤,启用一个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相近。
以下引用网上的一段话(出处:javascript:void(0)),
用于说明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强调用简洁的命令来完成功能,无论是查找、替换、
正则表达式匹配、编译、链接、排错、函数间跳转等等等等都在命令行中完成,并且它把方向键也集成在了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。