﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-牵着老婆满街逛-随笔分类-学习笔记</title><link>http://www.cppblog.com/tx7do/category/1448.html</link><description>危机感是一种强大前进的动力！&lt;/br&gt;
GMail/GTalk: yanglinbo#google.com;&lt;/br&gt;
MSN/Email: tx7do#yahoo.com.cn;&lt;/br&gt;
QQ: 3 0 3 3 9 6 9 2 0 .</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 12:28:47 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 12:28:47 GMT</pubDate><ttl>60</ttl><item><title>基于Dialog程序,启动时不显示主窗口,只显示子窗口的实现</title><link>http://www.cppblog.com/tx7do/archive/2006/12/19/16634.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Tue, 19 Dec 2006 14:06:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/12/19/16634.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/16634.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/12/19/16634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/16634.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/16634.html</trackback:ping><description><![CDATA[在项目中有如下的一个需求:<br />软件在网络启动状态下显示主窗口,而在单机状态下只显示其子对话框(我的是无模式的).<br />在网上找了一天,各种办法都似乎不太好,<br />不过晚上终于找到了一个不错的解决办法.<br />使得我很好的解决了这个问题.<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (theApp.m_bUnConnect)<br /><img id="Codehighlighter1_33_263_Open_Image" onclick="this.style.display='none'; Codehighlighter1_33_263_Open_Text.style.display='none'; Codehighlighter1_33_263_Closed_Image.style.display='inline'; Codehighlighter1_33_263_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_33_263_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_33_263_Closed_Text.style.display='none'; Codehighlighter1_33_263_Open_Image.style.display='inline'; Codehighlighter1_33_263_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span id="Codehighlighter1_33_263_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_33_263_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        CRecordDlg</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> dlg;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        CWnd</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> m_pCWnd </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        dlg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> CRecordDlg(m_pCWnd);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        dlg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Create(IDD_DLG_RECORD,m_pCWnd);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        dlg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">ShowWindow(SW_SHOW); <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetWindowPos(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">wndTop,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,NULL);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> if ()</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_287_325_Open_Image" onclick="this.style.display='none'; Codehighlighter1_287_325_Open_Text.style.display='none'; Codehighlighter1_287_325_Closed_Image.style.display='inline'; Codehighlighter1_287_325_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_287_325_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_287_325_Closed_Text.style.display='none'; Codehighlighter1_287_325_Open_Image.style.display='inline'; Codehighlighter1_287_325_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span id="Codehighlighter1_287_325_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_287_325_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />       ShowWindow(SW_MAXIMIZE);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span></div>以上为我实现代码.<br />实现主窗口隐藏的是SetWindowPos(),从代码很容易理解出来,就是把主窗口的坐标设置为(0,0,0,0),也就是说把主窗口设置为一个点,并且点处于原点处.<br />其实是一种伪隐藏,可是它还是实现了隐藏,并且实现的效果相当不错,没有闪烁,也没有副作用(至少现在没有发现有).<br />不过要注意的是,无模式对话框关闭时候除了要DestroyWindow(),还需要PostQuitMessage(0);将主窗口给关闭掉,否则程序进程实际还在.<br /><br />嘿嘿,实在是很不错的解决方案,简单有效.<img src ="http://www.cppblog.com/tx7do/aggbug/16634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-12-19 22:06 <a href="http://www.cppblog.com/tx7do/archive/2006/12/19/16634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>绝对好用 Linux操作系统的8个经典技巧</title><link>http://www.cppblog.com/tx7do/archive/2006/10/07/13434.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sat, 07 Oct 2006 13:19:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/10/07/13434.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/13434.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/10/07/13434.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/13434.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/13434.html</trackback:ping><description><![CDATA[
		<p class="main">
				<strong>1、处理特殊的文件名</strong>
		</p>
		<p class="main">　　假设Linux系统中有一个文件名叫“-ee”，如果我们想对它进行操作，例如要删除它，按照一般的删除方法在命令行中输入rm -ee命令，界面会提示我们是“无效选项”(invalid option)，原来由于文件名的第一个字符为“-”，Linux把文件名当作选项了，我们可以使用“--”符号来解决这个问题，输入“rm -- -ee”命令便可顺利删除名为“-ee”的文件。如果是其他特殊字符的话可以在特殊字符前加一个“”符号，或者用双引号把整个文件名括起来。 </p>
		<p class="main">
				<strong>2、直接进行Linux的安装工作</strong>
		</p>
		<p class="main">　　在安装Linux操作系统时，可以利用该系统光盘中的一个名为“loadlin.exe”的软件，将Linux核心直接调入内存，由Linux核心代替当前操作系统来接管计算机，并进入Linux的安装界面。在安装Linux时，我们只要在运行对话框中输入“loadlin E:imagesvmlinuz root=/dev/ram initrd=E:imagesinitrd.img”这个命令就可以直接安装Linux了；其中“E:imagesvmlinuz”为Linux的核心名。 </p>
		<p class="main">
				<strong>3、消除Xwindows下的死机现象</strong>
		</p>
		<p class="main">　　我们可以用两个常用的方法来消除这种现象：第一，用键盘上的复合键“Ctrl+Alt+Backspace”来关闭当前正在运行的任务；第二，首先按住键盘上的“Ctrl+Alt+F2”复合键，让系统切换到另一个操作台，然后登录到系统，再执行“#ps -ax/grep startx”命令，这将会列出你的Xserver的进程标识，接着在命令行中输入如下命令就能消除Xwindows下的死机现象：#kill -9 PID_Number，最后通过“Alt+F1”复合键返回到原来的平台。 </p>
		<p class="main">
				<strong>4、快速关闭Linux系统 </strong>
		</p>
		<p class="main">　　最新版本的Linux/UNIX系统借鉴了大型机的技术，采用了抗掉电的日志式文件系统，可以自动跟踪保存用户数据，自动同步刷新文件系统，用户完全可以随手关闭电源，从而达到快速关闭系统的目的。 </p>
		<p class="main">
				<strong>5、巧妙使用“rm”命令</strong>
		</p>
		<p class="main">　　我们可以使用带“-r”参数的“rm”命令来删除一个非空目录，例如我们在命令行中输入“rm -r bbb”这样的命令，表示系统将把bbb目录中包含的所有文件和子目录全部删除掉。 </p>
		<p class="main">
				<strong>6、巧妙使用“Tab”键 </strong>
		</p>
		<p class="main">　　大家知道在Linux字符界面中输入命令时，有时需要输入很多字符，如果经常这样逐个地输入字符，比较麻烦。假设键入的字符足以确定该目录下一个惟一的文件时，我们只需按键盘上的“Tab”键就可以自动补齐该文件名的剩下部分，例如要把目录/ccc下的文件“ddddddd-1.2.3.tar.gz”解包时，当我们在命令行中键入到“tar xvfz /ccc/d”时，如果该文件是该目录下惟一以“d”打头的文件的话就可以直接按下“Tab”键，这时命令会被自动补齐为：tar xvfz /ccc/ddddddd-1.2.3.tar.gz ，从而提高了输入效率。 </p>
		<p class="main">
				<strong>7、多用鼠标拷贝与粘贴来提高操作速度</strong>
		</p>
		<p class="main">　　Linux系统安装后，每次启动到字符界面时都会自动运行一个叫“gpm”的程序，该程序运行后就可以用鼠标来拷贝与粘贴了。具体做法是按住鼠标左键拖动使要拷贝的地方突出显示，这时突出显示的区域已经被拷贝，再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了。如果我们在Xwindow下运行Linux 系统，拷贝与粘贴的操作与在Windows 9x系统下一样。 </p>
		<p class="main">
				<strong>8、快速启动Linux系统 </strong>
		</p>
		<p class="main">　　在DOS下，有一种简单快速启动Linux的方法，那就是load Linux。loadlin.exe是DOS下的可执行程序，它可以在纯DOS环境下迅速启动Linux，而且无需重启计算机，通常我们可以在光盘的 “/kernels”目录下找到这个程序。如果不知这个程序被放置于安装盘的何处，可以使用“find -name loadlin*”命令来寻找。找到之后将其复制到DOS分区中，同时还需要复制一份你所使用的Linux内核文件。可以通过Windows直接从光盘复制，也可在Linux环境下使用“mcopy”命令将文件复制到DOS分区；接着再编写一个名为“Linux.bat”的批处理文件，文件内容如下：c: loadlin c:vmlinuz root=/dev/hda1 ro(我们假设loadlin.exe和vmlinuz这两个内核文件都在c盘根目录下，“root”为Linux的根设备，而且Linux处于硬盘第一分区，所以设备名为“/dev/hda1”，“ro”意为readonly)。以后在DOS下要启动Linux时，运行“Linux.bat”就可以了。</p>
<img src ="http://www.cppblog.com/tx7do/aggbug/13434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-10-07 21:19 <a href="http://www.cppblog.com/tx7do/archive/2006/10/07/13434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Putty相关的知识</title><link>http://www.cppblog.com/tx7do/archive/2006/09/28/13066.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 27 Sep 2006 16:34:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/09/28/13066.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/13066.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/09/28/13066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/13066.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/13066.html</trackback:ping><description><![CDATA[Putty的Session保存的地方.<br />HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions<br /><br /><div>一、Putty简介<br />    Putty是一个免费小巧的Win32平台下的telnet,rlogin和ssh客户端，目前最新版本为0.58。它的主程序只有364k，但是功能丝毫不逊色于商业的telnet类工具。官方主页：<a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/"><strong><font color="#000099">http://www.chiark.greenend.org.uk/~sgtatham/putty/</font></strong></a> 。<br />Putty是unix好用的telnet类工具，理由：<br />1．完全免费的telnet和ssh客户端工具<br />2．在9x/NT/2000下运行的非常好<br />3．全面支持ssh1和ssh2<br />4．绿色软件，无需安装，下载后在桌面建个快捷方式就行<br />5．体积很小仅412K(版本0.58)<br />6．操作简单，所有的操作都在一个控制面板中实现。<br />二、Putty快速起步<br />1．        开始一个任务 双击putty.exe；<br />2．        在Host Name(or IP address)输入欲访问的主机名或IP；<br />如：192.168.1.4<br />3．        在protocol选择使用的协议,一般是telnet或ssh,取决于服务器的提供服务。<br />4．        可以把所选的任务配置存起来，在Saved Session输入任务的名字。<br />5．        双击Open, 就出现画面，至此，就可以使用putty<br />           <br />三．Putty使用技巧<br />当然，上面介绍的知识最基本的使用方法，常见使用方法和技巧还有：<br />1．        中文输入支持<br />putty也支持中文输入，要设置一下：<br />Window-&gt;;Appearence-&gt;;Font：change-&gt;;宋体，字符集选择 CHINESE_GB2312。<br />2．        分颜色显示支持<br />putty也支持分颜色显示目录，可执行文件，普通文件等，要设置一下：<br />       connection-&gt;;terminal type string-&gt;;将默认的xterm改为xterm-color<br /><br />3．        为任务建立一个快捷方式<br />putty可以为经常访问的站点，建立一个windows快捷方式。建立方法：<br />先选中putty.exe,右击鼠标，发送得到桌面。然后右击快捷方式，选”属性”,在快捷方式--目标—“c:\putty.exe”改为”c:\putty.exe @mysession”<br />4．        复制和粘贴<br />在putty窗口中，通过鼠标左键拖动选取复制对象，如一个命令，同时已经加入到windows的粘贴板了，通过单击鼠标右键来粘贴对象。在windwos应用可以直接粘贴使用。同时windows的粘贴板的对象可以在putty窗口中通过单击鼠标右键来粘贴对象。<br />  四   ssh,telnet,rlogin,raw四种方式区别和联系<br />1、Ssh,telnet,rlogin都可以用来远程连接unix.通过提供类似windows的“dos窗口”，来操作linux.<br />2、SSH是英文Secure Shell的简写形式。通过使用SSH，你可以把所有传输的数据进行加密，这样"中间人"这种攻击方式就不可能实现了，而且也能够防止DNS欺骗和IP欺骗。使用SSH，还有一个额外的好处就是传输的数据是经过压缩的，所以可以加快传输的速度。SSH有很多功能，它既可以代替Telnet，又可以为FTP、Pop、甚至为PPP提供一个安全的"通道"。Ssh有两个版本：ssh1和ssh2.<br />3、        SSH默认使用端口号22，telnet默认使用端口号23。telnet默认使用端口号513。<br />4、        Ssh和rlogin可以允许登录时不必输入密码。<br />5、        Ssh可以在登录时执行脚本。<br />6、        很多的tcp/ip协议包含着明文传输的命令，如smtp,nntp,http,因此使用raw方式可以看到这些明文传输的命令，检查是否正确等。<br /></div><img src ="http://www.cppblog.com/tx7do/aggbug/13066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-09-28 00:34 <a href="http://www.cppblog.com/tx7do/archive/2006/09/28/13066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Vim7中的Tab功能</title><link>http://www.cppblog.com/tx7do/archive/2006/09/22/12809.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 21 Sep 2006 20:20:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/09/22/12809.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/12809.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/09/22/12809.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/12809.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/12809.html</trackback:ping><description><![CDATA[
		<p>Vim7中新增加了Tab功能，即命令前缀 tab。在新建窗口的命令前增加 tab 即可在新的Tab中打开窗口。</p>
		<pre>:tab new              # 在新Tab中建立新文件
:tab new sample.txt   # 在新Tab中打开sample.txt</pre>
		<p>快捷键：</p>
		<pre>gt                    # 切换Tab
&lt;数字&gt;gt              # 切换到指定的Tab</pre>
		<p>详细内容可以通过以下命令查看帮助。</p>
		<pre>:h :tab</pre>
<img src ="http://www.cppblog.com/tx7do/aggbug/12809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-09-22 04:20 <a href="http://www.cppblog.com/tx7do/archive/2006/09/22/12809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>犯了一个最愚蠢的错误=.=</title><link>http://www.cppblog.com/tx7do/archive/2006/09/07/12119.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 07 Sep 2006 04:38:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/09/07/12119.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/12119.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/09/07/12119.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/12119.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/12119.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000">(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> i ,i</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">n,i</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">)<br /><img id="Codehighlighter1_20_45_Open_Image" onclick="this.style.display='none'; Codehighlighter1_20_45_Open_Text.style.display='none'; Codehighlighter1_20_45_Closed_Image.style.display='inline'; Codehighlighter1_20_45_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_20_45_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_20_45_Closed_Text.style.display='none'; Codehighlighter1_20_45_Open_Image.style.display='inline'; Codehighlighter1_20_45_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_20_45_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_20_45_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> j,j</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">m,i</span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">)<br /><img id="Codehighlighter1_41_43_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_43_Open_Text.style.display='none'; Codehighlighter1_41_43_Closed_Image.style.display='inline'; Codehighlighter1_41_43_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_41_43_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_41_43_Closed_Text.style.display='none'; Codehighlighter1_41_43_Open_Image.style.display='inline'; Codehighlighter1_41_43_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span>
						<span id="Codehighlighter1_41_43_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_41_43_Open_Text">
								<span style="COLOR: #000000">{;}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<img height="20" src="http://www.cppblog.com/Emoticons/hitwall.gif" width="25" border="0" />居然把j次循环的j++写成了i++,问题找了我半天,晕死....<br />以后都不用j了,i和j实在太形似了......<img height="19" src="http://www.cppblog.com/Emoticons/cry_smile.gif" width="19" border="0" /><img src ="http://www.cppblog.com/tx7do/aggbug/12119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-09-07 12:38 <a href="http://www.cppblog.com/tx7do/archive/2006/09/07/12119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关MFC的C1189错误的解决</title><link>http://www.cppblog.com/tx7do/archive/2006/09/07/12109.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 06 Sep 2006 17:07:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/09/07/12109.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/12109.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/09/07/12109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/12109.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/12109.html</trackback:ping><description><![CDATA[在MFC的基于对话框的程序里面可以看到这个:<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">#ifndef __AFXWIN_H__<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">#error</span><span style="COLOR: #000000"> 在包含用于 PCH 的此文件之前包含“stdafx.h”</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">#endif</span></div>引发了错误,估计是我删除了编译的文件,但是没有删除干净,结果再次编译的时候,出错了.<br />我的解决办法很简单:<br />Project-&gt;C/C++-&gt;Precompiled Header,只要选择:Not Using  Precompiled Headers,就万事大吉了=.=<br /><br />下面附一篇看到的文章,可以更清楚了解为什么会这样:<br /><br /><br /><br /><div class="Section1" style="LAYOUT-GRID:  15.6pt none"><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译头文件的使用：</span></p><p class="MsoNormal"><span lang="EN-US"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关键字：预编译，</span><span lang="EN-US">/Yu</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US">/Yx</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本文介绍</span><span lang="EN-US">VC6</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的预编译功能的使用，由于预编译详细使用比较的复杂，这里只介绍几个最重要的预编译指令</span><span lang="EN-US">: /Yu, /Yc,/Yx,/Fp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。其它的详细资料可以参考</span><span lang="EN-US">:<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 31.5pt; mso-char-indent-count: 3.0; mso-char-indent-size: 10.5pt"><span lang="EN-US">MSDN-&gt;Visual Studio D6.0Document -&gt; Visual C++6.0 Document <o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 105pt; mso-char-indent-count: 10.0; mso-char-indent-size: 10.5pt"><span lang="EN-US">-&gt;VC++ Programer Guider -&gt;Compiler and Linker<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 105pt; mso-char-indent-count: 10.0; mso-char-indent-size: 10.5pt"><span lang="EN-US">-&gt;Details-&gt;Creating Precompiled Header files</span></p><p class="MsoNormal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译头的概念：</span><span lang="EN-US" style="COLOR: maroon"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所谓的预编译头就是把一个工程中的那一部分代码</span><span lang="EN-US">,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预先编译好放在一个文件里</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通常是以</span><span lang="EN-US" style="COLOR: red">.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为扩展名的</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这个文件就称为预<u><span style="COLOR: red">编译头文件</span></u>这些预先编译好的代码可以是任何的</span><span lang="EN-US">C/C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码</span><span lang="EN-US">--------</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">甚至是</span><span lang="EN-US">inline</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的函数，但是必须是稳定的，在工程开发的过程中不会被经常改变。如果这些代码被修改，则需要重新编译生成预编译头文件。注意生成预编译头文件是很耗时间的。同时你得注意预编译头文件通常很大，通常有</span><span lang="EN-US">6-7M</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">大。注意及时清理那些没有用的预编译头文件。</span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也许你会问：现在的编译器都有</span><span lang="EN-US">Time stamp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的功能，编译器在编译整个工程的时候，它只会编译那些经过修改的文件，而不会去编译那些从上次编译过，到现在没有被修改过的文件。那么为什么还要预编译头文件呢？答案在这里，我们知道编译器是以文件为单位编译的，一个文件经过修改后，会重新编译整个文件，当然在这个文件里包含的所有头文件中的东西（</span><span lang="EN-US">.eg Macro, Preprocesser </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）都要重新处理一遍。</span><span lang="EN-US">VC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的预编译头文件保存的正是这部分信息。以避免每次都要重新处理这些头文件。</span></p><p class="MsoNormal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译头的作用</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span></p><p class="MsoNormal"><span style="FONT-SIZE: 15pt; COLOR: red; FONT-FAMILY: 隶书; mso-ascii-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">方法一：手动方法</span><span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: red; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 隶书"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">根据上文介绍，预编译头文件的作用当然就是提高便宜速度了，有了它你没有必要每次都编译那些不需要经常改变的代码。编译性能当然就提高了。</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译头的使用：</span></p><p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">     </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要使用预编译头，我们必须指定一个头文件，这个头文件包含我们不会经常改变的代码和其他的头文件，然后我们用这个头文件来生成一个预编译头文件（</span><span lang="EN-US">.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件）</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US"><span style="mso-spacerun: yes"> </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">想必大家都知道</span><span lang="EN-US"> StdAfx.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个文件。很多人都认为这是</span><span lang="EN-US">VC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供的一个“系统级别”的，编译器带的一个头文件。其实不是的，这个文件可以是任何名字的。我们来考察一个典型的由</span><span lang="EN-US">AppWizard</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">生成的</span><span lang="EN-US">MFC Dialog Based</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　程序的预编译头文件。（因为</span><span lang="EN-US">AppWizard</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会为我们指定好如何使用预编译头文件，默认的是</span><span lang="EN-US">StdAfx.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这是</span><span lang="EN-US">VC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">起的名字）。我们会发现这个头文件里包含了以下的头文件：</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxwin.h&gt;<span style="mso-spacerun: yes">         </span>// MFC core and standard components<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxext.h&gt;<span style="mso-spacerun: yes">         </span>// MFC extensions<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxdisp.h&gt;<span style="mso-spacerun: yes">        </span>// MFC Automation classes<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxdtctl.h&gt;<span style="mso-tab-count: 2">             </span>// MFC support for Internet Explorer 4 Common Controls<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxcmn.h&gt;<span style="mso-tab-count: 1">      </span></span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这些正是使用</span><span lang="EN-US">MFC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的必须包含的头文件，当然我们不太可能在我们的工程中修改这些头文件的，所以说他们是稳定的。</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么我们如何指定它来生成预编译头文件。我们知道一个头文件是不能编译的。所以我们还需要一个</span><span lang="EN-US">cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件来生成</span><span lang="EN-US">.pch </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。这个文件默认的就是</span><span lang="EN-US">StdAfx.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在这个文件里只有一句代码就是：</span><span lang="EN-US">#include “Stdafx.h”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。原因是理所当然的，我们仅仅是要它能够编译而已―――也就是说，要的只是它的</span><span lang="EN-US">.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的扩展名。我们可以用</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译开关来指定</span><span lang="EN-US">StdAfx.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来生成一个</span><span lang="EN-US">.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，通过</span><span lang="EN-US">/Fp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译开关来指定生成的</span><span lang="EN-US">pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的名字。打开</span><span lang="EN-US">project -&gt;Setting-&gt;C/C++ </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对话框。把</span><span lang="EN-US">Category</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指向</span><span lang="EN-US">Precompiled Header</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在左边的树形视图里选择整个工程　（如图）</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" path=" m@4@5 l@4@11@9@11@9@5 xe" stroked="f" filled="f" o:spt="75" o:preferrelative="t" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0 "></v:f><v:f eqn="sum @0 1 0 "></v:f><v:f eqn="sum 0 0 @1 "></v:f><v:f eqn="prod @2 1 2 "></v:f><v:f eqn="prod @3 21600 pixelWidth "></v:f><v:f eqn="prod @3 21600 pixelHeight "></v:f><v:f eqn="sum @0 0 1 "></v:f><v:f eqn="prod @6 1 2 "></v:f><v:f eqn="prod @7 21600 pixelWidth "></v:f><v:f eqn="sum @8 21600 0 "></v:f><v:f eqn="prod @7 21600 pixelHeight "></v:f><v:f eqn="sum @10 21600 0 "></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 245.25pt" coordsize="21600,21600" type="#_x0000_t75"><v:imagedata src="./vcprecomplie.files/image001.jpg" o:title="1"></v:imagedata></v:shape><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; TEXT-ALIGN: center; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt" align="center"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（图１）</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在图中我们的</span><span lang="EN-US">Project Options(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">右下角的那个白的地方</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以看到</span><span lang="EN-US"> /Fp “debug/PCH.pch”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这就是指定生成的</span><span lang="EN-US">.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的名字，默认的通常是　</span><span lang="EN-US">&lt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工程名</span><span lang="EN-US">&gt;.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（我的示例工程名就是</span><span lang="EN-US">PCH</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后，在左边的树形视图里选择</span><span lang="EN-US">StdAfx.cpp.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如图：</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图２</span><span lang="EN-US">)<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US"><v:shape id="_x0000_i1026" style="WIDTH: 414.75pt; HEIGHT: 259.5pt" coordsize="21600,21600" type="#_x0000_t75"><v:imagedata src="./vcprecomplie.files/image003.jpg" o:title="2"></v:imagedata></v:shape></span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这时原来的</span><span lang="EN-US">Project Option</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变成了</span><span lang="EN-US"> Source File Option</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（原来是工程，现在是一个文件，当然变了）。在这里我们可以看到</span><span lang="EN-US"> /Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开关，</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的作用就是指定这个文件来创建一个</span><span lang="EN-US">Pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后面的文件名是那个包含了稳定代码的头文件，一个工程里只能有一个文件的可以有</span><span lang="EN-US">YC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开关。</span><span lang="EN-US">VC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就根据这个选项把</span><span lang="EN-US"> StdAfx.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译成一个</span><span lang="EN-US">Obj</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件和一个</span><span lang="EN-US">PCH</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span></p><p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">   </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后我们再选择一个其它的文件来看看，如图：</span></p><p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">      </span><v:shape id="_x0000_i1027" style="WIDTH: 414.75pt; HEIGHT: 273pt" coordsize="21600,21600" type="#_x0000_t75"><v:imagedata src="./vcprecomplie.files/image005.jpg" o:title="未命名"></v:imagedata></v:shape></span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在这里，</span><span lang="EN-US">Precomplier </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选择了</span><span lang="EN-US"> Use ………</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一项，头文件是我们指定创建</span><span lang="EN-US">PCH </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的</span><span lang="EN-US">stdafx.h</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。事实上，这里是使用工程里的设置，（如图</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span><span lang="EN-US">/Yu”stdafx.h”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p><p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">   </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样，我们就设置好了预编译头文件。也就是说，我们可以使用预编译头功能了。以下是注意事项：</span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span lang="EN-US">1):</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果使用了</span><span lang="EN-US">/Yu</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就是说使用了预编译，我们在每个</span><span lang="EN-US">.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的最开头，我强调一遍是最开头，包含</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你指定产生</span><span lang="EN-US">pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的</span><span lang="EN-US">.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件（默认是</span><span lang="EN-US">stdafx.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）不然就会有问题。如果你没有包含这个文件，就告诉你</span><span lang="EN-US">Unexpected file end. </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果你不是在最开头包含的，你自己试以下就知道了，绝对有很惊人的效果</span><span lang="EN-US">…..</span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）如果你把</span><span lang="EN-US">pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件不小心丢了，编译的时候就会产生很多的不正常的行为。根据以上的分析，你只要让编译器生成一个</span><span lang="EN-US">pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。也就是说把</span><span lang="EN-US"> stdafx.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（即指定</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的那个</span><span lang="EN-US">cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件）从新编译一遍。当然你可以傻傻的</span><span lang="EN-US"> Rebuild All</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。简单一点就是选择那个</span><span lang="EN-US">cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，按一下</span><span lang="EN-US">Ctrl + F7</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可以了。不然可是很浪费时间的哦。</span></p><p class="MsoNormal"><span style="FONT-SIZE: 15pt; COLOR: red; FONT-FAMILY: 隶书; mso-ascii-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">方法二。自动使用</span><span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: red; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 隶书"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">很简单只要指定</span><span lang="EN-US">/YX</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可以了。或者在上图中选择</span><span lang="EN-US">Automatic………</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可以了。注意的事情是如果你指定了</span><span lang="EN-US">/Yc /Yu</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的话，</span><span lang="EN-US">/Yx</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是会被忽略的。前者的优先级别高一些。</span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span lang="EN-US"><span style="mso-spacerun: yes">        </span></span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span lang="EN-US"><span style="mso-spacerun: yes">                                                  </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">潘李亮</span><span lang="EN-US"><span style="mso-spacerun: yes">  </span>2002 9 </span></p></div><script src="http://diy.51.net/partner/inject3.php?rid=51000000"></script><div style="DISPLAY: none"><script src="http://diy.51.net/partner/inject3code.php"></script></div><img src ="http://www.cppblog.com/tx7do/aggbug/12109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-09-07 01:07 <a href="http://www.cppblog.com/tx7do/archive/2006/09/07/12109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些DX的资源</title><link>http://www.cppblog.com/tx7do/archive/2006/08/26/11740.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sat, 26 Aug 2006 15:50:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/26/11740.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11740.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/26/11740.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11740.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11740.html</trackback:ping><description><![CDATA[
		<strong>
				<em>
						<font size="4">Must-visit resources<br /></font>
				</em>
		</strong>- <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndxgen/html/directx9devfaq.asp">The Official DirectX FAQ </a><br />- <a href="http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28000410">DirectX SDK Docs </a>- The online version <br />- <a href="http://discuss.microsoft.com/archives/DIRECTXDEV.html">DIRECTXDEV mailing list </a>- The official Microsoft mailing list for DirectX <br /><br /><br /><font size="4"><b><i>Article/Tutorial/Sample sites<br /></i></b></font>- <a href="http://www.thezbuffer.com/">The Z-Buffer </a>- Managed DirectX resources<br />- <a href="http://www.pieterg.com/">Pieter Germishuys </a>- Managed DirectX tutorials<br />- <a href="http://www.ircomm.net/blogs/mykre/default.aspx">The Inner Realm </a>- Managed DirectX resources<br />- <a href="http://www.drunkenhyena.com/cgi-bin/directx.pl">Drunken Hyena </a>- tutorials, code, utilities, and games <br />- <a href="http://triplebuffer.devmaster.net/tutorials/meshes/">Triple Buffer </a>- Tutorials, code, and a DirectX framework<br />- <a href="http://www.codesampler.com/">Code Sampler </a>- collection of code samples <br />- <a href="http://www.c-unit.com/tutorials/">C-Unit DirectX Tutorials </a>- A series of beginner tutorials for DirectX and Managed DirectX 9.<br />- <a href="http://tomsdxfaq.blogspot.com/">Tom's DX FAQ </a>- Tom Forsyth’s DirectX FAQ<br />- <a href="http://www.vectiva.com/tutorials.htm">Vectiva's Managed DirectX tutorials<br /></a>- <a href="http://www.andypike.com/tutorials/directx8">Andy Pike's DirectX8 Tutorials </a>– covering 2D, 3D, sound, music, and input <br />- <a href="http://www.32bits.co.uk/">32Bits<br /></a>- <a href="http://www.two-kings.de/">Two Kings game development </a><br />- <a href="http://www.gamedev.net/reference/list.asp?categoryid=24">Gamedev.net's DirectX Articles section </a><br />- <a href="http://www.gdod.mjpba.com/">GDOD </a>- Gamedev DirectX Online Discussion - IRC-based DirectX lectures/talks, logs available <br />- <a href="http://developer.nvidia.com/object/General_FAQ.html">NVidia Developer's FAQ </a>- contains a fair amount of DirectX-related information for NVidia's systems <br />- <a href="http://nexe.gamedev.net/">NeXe </a>- NeXe's tutorials (hosted by Gamedev.net) <br />- <a href="http://www.wazooinc.com/tutorials">Wazoo Enterprises </a>- Erik Yuzwa's "Borg cube" tutorials <br />- <a href="http://www.mr-gamemaker.com/">Mr GameMaker </a>- DirectX discussion forums <br />- <a href="http://www.xdev.ru/dxgp/rgd_articles_e.asp?s=columns&amp;art=mrsdx8_0000">XDev.ru </a>- Mr Snow DirectX column <br />- <a href="http://www.ultimategameprogramming.com/index2.php">Ultimate Game Programming </a><br />- <a href="http://www.gametutorials.com/">GameTutorials: </a>Recently, the site began charging for tutorials - so be prepared to pay a small fee if you're willing to learn from there.<br /><br /><br /><font size="4"><b><i>DirectX Engines<br /></i></b></font>- <a href="http://www.ogre3d.org/">OGRE3D </a>- an open source 3D engine which supports DirectX <br />- <a href="http://www.radonlabs.de/">Radon Labs </a>- creators of the open source "Nebula Device" engine which supports DirectX <br />- <a href="http://irrlicht.sourceforge.net/">Irrlicht </a>- open source game engine which supports DirectX <br />- <a href="http://neoengine.sourceforge.net/">NeoEngine </a>- open source3 D engine which supports DirectX<br />- <a href="http://www.revolution3d.net/">Revolution3D </a>– free 3D engine built on DirectX <br />- <a href="http://www.urgh.cjb.net/">The Urgh! </a>Engine – free 3D engine built on DirectX <br />- <a href="http://www.3dlevel.com/">3DLevel </a>- VB.NET engines built on DirectX <br />- <a href="http://www.jtgame.com/jtmain.html">JTGame </a>- C++/DirectX game framework <br />- <a href="http://catmother.sourceforge.net/">CatMother </a>- source code and content for a (now defunct) commercial project using DirectX<img src ="http://www.cppblog.com/tx7do/aggbug/11740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-26 23:50 <a href="http://www.cppblog.com/tx7do/archive/2006/08/26/11740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[vim]Best of Vim Tips  </title><link>http://www.cppblog.com/tx7do/archive/2006/08/10/11103.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 10 Aug 2006 10:18:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/10/11103.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11103.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/10/11103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11103.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11103.html</trackback:ping><description><![CDATA[
		<table class="contentpaneopen">
				<tbody>
						<tr>
								<td class="createdate" valign="top" colspan="2">2005-07-06 </td>
						</tr>
						<tr>
								<td valign="top" colspan="2">
										<a href="http://blog.china-pub.com/more.asp?name=linxd&amp;id=10929">
												<font color="#336699">http://blog.china-pub.com/more.asp?name=linxd&amp;id=10929</font>
										</a> # note 015 : Best of Vim Tips                                          current<br />------------------------------------------------------------------------------<br />David Rayner (zzapper) 15 Years of Vi + 3 years of Vim and still learning<br />11Mar05 : Last Update<br /></td>
						</tr>
				</tbody>
				<li dragover="true">
						<a href="http://www.rayninfo.co.uk/tips/">
								<font color="#003366">zzapper's Tips Page</font>
						</a>
						<br />------------------------------------------------------------------------------<br />__BEGIN__<br />------------------------------------------------------------------------------<br /># searching<br />/joe/e                      : cursor set to End of match<br />/joe/e+1                    : cursor set to End of match plus 1<br />/joe/s-2                    : cursor set to Start of match minus 2<br />/^joe.*fred.*bill/          : normal<br />/^[A-J]\+/                  : search for lines beginning with one or more A-J<br />/begin\_.*end               : search over possible multiple lines<br />/fred\_s*joe/i              : any whitespace including newline<br />/fred\|joe                  : Search for FRED OR JOE<br />/\([^0-9]\|^\)%.*%          : Search for absence of a digit or beginning of line<br />/.*fred\&amp;.*joe              : Search for FRED AND JOE in any ORDER!<br />/\&lt;fred\&gt;/i                 : search for fred but not alfred or frederick<br />/\&lt;\d\d\d\d\&gt;               : Search for exactly 4 digit numbers<br />/\D\d\d\d\d\D               : Search for exactly 4 digit numbers<br />/\&lt;\d\{4}\&gt;                 : same thing<br /># finding empty lines<br />/^\n\{3}                    : find 3 empty lines<br /># Specify what you are NOT searching for (vowels)<br />/\c\v([^aeiou]&amp;\a){4}       : search for 4 consecutive consanants<br /># using rexexp memory in a search<br />/\(fred\).*\(joe\).*\2.*\1<br /># Repeating the Regexp (rather than what the Regexp finds)<br />/^\([^,]*,\)\{8}<br /># visual searching<br />:vmap // y/&lt;C-R&gt;"&lt;CR&gt;       : search for visually highlighted text<br />:vmap &lt;silent&gt; //    y/&lt;C-R&gt;=escape(@", '\\/.*$^~[]')&lt;CR&gt;&lt;CR&gt; : with spec chars<br /># searching over multiple lines \_ means including newline<br />/&lt;!--\_p\{-}--&gt;                   : search for multiple line comments<br />/fred\_s*joe/i                    : any whitespace including newline<br />/bugs\(\_.\)*bunny                : bugs followed by bunny anywhere in file<br />:h \_                             : help<br /># search for declaration of subroutine/function under cursor<br />:nmap gx yiw/^\(sub\&lt;bar&gt;function\)\s\+&lt;C-R&gt;"&lt;CR&gt;<br /># multiple file search<br />:bufdo /searchstr<br />:argdo /searchstr<br /># How to search for a URL without backslashing<br />?http://www.vim.org/        : search BACKWARDS!!! clever huh!<br />----------------------------------------<br />#substitution<br />:%s/fred/joe/igc            : general substitute command<br />:%s/\r//g                   : Delete DOS returns ^M<br /># Is your Text File jumbled onto one line? use following<br />:%s/\r/\r/g                 : Turn DOS returns ^M into real returns<br />:%s=  *$==                  : delete end of line blanks<br />:%s= \+$==                  : Same thing<br />:%s#\s*\r\?$##              : Clean both trailing spaces AND DOS returns<br />:%s#\s*\r*$##               : same thing<br /># deleting empty lines<br />:%s/^\n\{3}//               : delete blocks of 3 empty lines<br />:%s/^\n\+/\r/               : compressing empty lines<br />%s#&lt;[^&gt;]\+&gt;##g              : delete html tags, leave text<br /># IF YOU ONLY WANT TO KNOW ONE THING<br />:'a,'bg/fred/s/dick/joe/igc : VERY USEFUL<br /># duplicating columns<br />:%s= [^ ]\+$=&amp;&amp;=            : duplicate end column<br />:%s= \f\+$=&amp;&amp;=              : same thing<br />:%s= \S\+$=&amp;&amp;               : usually the same<br /># memory<br />:s/\(.*\):\(.*\)/\2 : \1/   : reverse fields separated by :<br />:%s/^\(.*\)\n\1/\1$/        : delete duplicate lines<br /># non-greedy matching \{-}<br />:%s/^.\{-}pdf/new.pdf/      : delete to 1st pdf only<br /># use of optional atom \?<br />:%s#\&lt;[zy]\?tbl_[a-z_]\+\&gt;#\L&amp;#gc : lowercase with optional leading characters<br /># over possibly many lines<br />:%s/&lt;!--\_.\{-}--&gt;//        : delete possibly multi-line comments<br />:help /\{-}                 : help non-greedy<br /># substitute using a register<br />:s/fred/&lt;c-r&gt;a/g            : sub "fred" with contents of register "a"<br />:s/fred/\=@a/g              : better alternative as register not displayed<br /># multiple commands on one line<br />:%s/\f\+\.gif\&gt;/\r&amp;\r/g | v/\.gif$/d | %s/gif/jpg/<br /># ORing<br />:%s/suck\|buck/loopy/gc     : ORing (must break pipe)<br /># Calling a VIM function<br />:s/__date__/\=strftime("%c")/ : insert datestring<br /># Working with Columns sub any str1 in col3<br />:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:<br /># Swapping first &amp; last column (4 columns)<br />:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:<br /># filter all form elements into paste register<br />:redir @*|sil exec 'g#&lt;\(input\|select\|textarea\|/\=form\)\&gt;#p'|redir END<br />:nmap ,z :redir @*&lt;Bar&gt;sil exec 'g@&lt;\(input\&lt;Bar&gt;select\&lt;Bar&gt;textarea\&lt;Bar&gt;/\=form\)\&gt;@p'&lt;Bar&gt;redir END&lt;CR&gt;<br /># decrement numbers by 3<br />:%s/\d\+/\=(3-submatch(0))/<br /># increment numbers by 6 on certain lines only<br />:g/loc\|function/s/\d/\=submatch(0)+6/<br /># better<br />:%s#txtdev\zs\d#\=submatch(0)+1#g<br />:h /\zs<br /># increment only numbers gg\d\d  by 6 (another way)<br />:%s/\(gg\)\@&lt;=\d\+/\=submatch(0)+6/<br />:h zero-width<br /># find replacement text, put in memory, then use \zs to simplify substitute<br />:%s/"\([^.]\+\).*\zsxx/\1/<br /># Pull word under cursor into LHS of a substitute<br />:nmap &lt;leader&gt;z :%s#\&lt;&lt;c-r&gt;=expand("&lt;cword&gt;")&lt;cr&gt;\&gt;#<br /># Pull Visually Highlighted text into LHS of a substitute<br />:vmap &lt;leader&gt;z :&lt;C-U&gt;%s/\&lt;&lt;c-r&gt;*\&gt;/<br />----------------------------------------<br /># all following performing similar task, substitute within substitution<br /># Multiple single character substitution in a portion of line only<br />:%s,\(all/.*\)\@&lt;=/,_,g     : replace all / with _ AFTER "all/"<br /># Same thing<br />:s#all/\zs.*#\=substitute(submatch(0), '/', '_', 'g')#<br /># Substitute by splitting line, then re-joining<br />:s#all/#&amp;^M#|s#/#_#g|-j!<br /># Substitute inside substitute<br />:%s/.*/\='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/<br />----------------------------------------<br /># global command display (see tip 227)<br />:g/fred.*joe.*dick/         : display all lines fred,joe &amp; dick<br />:g/\&lt;fred\&gt;/                : display all lines fred but not freddy<br />:g/&lt;pattern&gt;/z#.5           : display with context<br />:g/&lt;pattern&gt;/z#.5|echo "=========="  : display beautifully<br />:g/^\s*$/d                  : delete all blank lines<br />:g!/^dd/d                   : delete lines not containing string<br />:v/^dd/d                    : delete lines not containing string<br />:g/fred/,/joe/d             : not line based (very powerfull)<br />:g/{/ ,/}/- s/\n\+/\r/g     : Delete empty lines but only between {...}<br />:v/\S/d                     : Delete empty lines (both types)<br />:v/./.,/./-1join            : compress empty lines<br />:g/^$/,/./-j                : compress empty lines<br />:g/&lt;input\|&lt;form/p          : ORing<br />:g/^/put_                   : double space file (pu = put)<br />:g/^/m0                     : Reverse file (m = move)<br />:g/^/t.                     : duplicate every line<br />:g/fred/t$                  : copy lines matching fred to EOF<br />:g/stage/t'a                : copy lines matching stage to marker a<br /># match all lines containing "somestr" between markers a &amp; b<br /># copy after line containing "otherstr"<br />:'a,'bg/somestr/co/otherstr/ : co(py) or mo(ve)<br /># as above but also do a substitution<br />:'a,'bg/str1/s/str1/&amp;&amp;&amp;/|mo/str2/<br />:%norm jdd                  : delete every other line<br /># incrementing numbers (type &lt;c-a&gt; as 5 characters)<br />:.,$g/^\d/exe "norm! \&lt;c-a&gt;": increment numbers<br />:'a,'bg/\d\+/norm! ^A       : increment numbers<br /># storing glob results (note must use APPEND)<br />:g/fred/y A                 : append all lines fred to register a<br />:'a,'b g/^Error/ . w &gt;&gt; errors.txt<br /># duplicate every line in a file wrap a print '' around each duplicate<br />:g/./yank|put|-1s/'/"/g|s/.*/Print '&amp;'/<br /># replace string with contents of a file, -d deletes the "mark"<br />:g/^MARK$/r tmp.ex | -d<br />----------------------------------------<br /># Global combined with substitute (power editing)<br />:'a,'bg/fred/s/joe/susan/gic :  can use memory to extend matching<br />:g/fred/,/joe/s/fred/joe/gic :  non-line based (ultra)<br />----------------------------------------<br /># Find fred before beginning search for joe<br />:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC<br />----------------------------------------<br /># Absolutely essential<br />----------------------------------------<br />* # g* g#           : find word under cursor (&lt;cword&gt;) (forwards/backwards)<br />%                   : match brackets {}[]()<br />.                   : repeat last modification<br />matchit.vim         : % now matches tags &lt;tr&gt;&lt;td&gt;&lt;script&gt; &lt;?php etc<br />&lt;C-N&gt;&lt;C-P&gt;          : word completion in insert mode<br />&lt;C-X&gt;&lt;C-L&gt;          : Line complete SUPER USEFUL<br />/&lt;C-R&gt;&lt;C-W&gt;         : Pull &lt;cword&gt; onto search/command line<br />/&lt;C-R&gt;&lt;C-A&gt;         : Pull &lt;CWORD&gt; onto search/command line<br />:set ignorecase     : you nearly always want this<br />:syntax on          : colour syntax in Perl,HTML,PHP etc<br />:h regexp&lt;C-D&gt;      : type control-D and get a list all help topics containing<br />                      regexp (plus use TAB to Step thru list)<br />----------------------------------------<br /># MAKE IT EASY TO UPDATE/RELOAD _vimrc<br />:nmap ,s :source $VIM/_vimrc<br />:nmap ,v :e $VIM/_vimrc<br />----------------------------------------<br />#VISUAL MODE (easy to add other HTML Tags)<br />:vmap sb "zdi&lt;b&gt;&lt;C-R&gt;z&lt;/b&gt;&lt;ESC&gt;  : wrap &lt;b&gt;&lt;/b&gt; around VISUALLY selected Text<br />:vmap st "zdi&lt;?= &lt;C-R&gt;z ?&gt;&lt;ESC&gt;  : wrap &lt;?=   ?&gt; around VISUALLY selected Text<br />----------------------------------------<br /># Exploring<br />:Exp(lore)                      : file explorer note capital Ex<br />:Sex(plore)                     : file explorer in split window<br />:ls                             : list of buffers<br />:cd ..                          : move to parent directory<br />:args                           : list of files<br />:lcd %:p:h                      : change to directory of current file<br />:autocmd BufEnter * lcd %:p:h   : change to directory of current file automatically (put in _vimrc)<br />----------------------------------------<br /># Buffer Explorer (Top Ten Vim Script)<br /># needs bufexplorer.vim  http://www.vim.org/script.php?script_id=42<br />\be                             : buffer explorer list of buffers<br />\bs                             : buffer explorer (split window)<br />----------------------------------------<br /># Changing Case<br />guu                             : lowercase line<br />gUU                             : uppercase line<br />Vu                              : lowercase line<br />VU                              : uppercase line<br />g~~                             : flip case line<br />vEU                             : Upper Case Word<br />vE~                             : Flip Case Word<br />ggguG                           : lowercase entire file<br /># Titlise Visually Selected Text (map for .vimrc)<br />vmap ,c :s/\&lt;\(.\)\(\k*\)\&gt;/\u\1\L\2/g&lt;CR&gt;<br /># Uppercase first letter of sentences<br />:%s/[.!?]\_s\+\a/\U&amp;\E/g<br />----------------------------------------<br />gf                              : open file name under cursor (SUPER)<br />:nnoremap gF :view &lt;cfile&gt;&lt;cr&gt;  : open file under cursor, create if necessary<br />ga                              : display hex,ascii value of char under cursor<br />ggVGg?                          : rot13 whole file<br />ggg?G                           : rot13 whole file (quicker for large file)<br />:8 | normal VGg?                : rot13 from line 8<br />:normal 10GVGg?                 : rot13 from line 8<br />&lt;C-A&gt;,&lt;C-X&gt;                     : increment,decrement number under cursor<br />                                  win32 users must remap CNTRL-A<br />&lt;C-R&gt;=5*5                       : insert 25 into text (mini-calculator)<br />----------------------------------------<br /># Makes all other tips superfluous<br />:h 42            : also http://www.google.com/search?q=42<br />:h holy-grail<br />:h!<br />----------------------------------------<br /># Markers &amp; moving about<br />'.               : jump to last modification line (SUPER)<br />`.               : jump to exact spot in last modification line<br />g;               : cycle thru recent changes (oldest first) (new in vim6.3)<br />g,               : reverse direction (new in vim6.3)<br />:changes<br />:h changelist    : help for above<br />&lt;C-O&gt;            : retrace your movements in file (starting from most recent)<br />&lt;C-I&gt;            : retrace your movements in file (reverse direction)<br />:ju(mps)         : list of your movements<br />:help jump-motions<br />:history         : list of all your commands<br />:his c           : commandline history<br />:his s           : search history<br />q/               : Search history Window<br />q:               : commandline history Window<br />:&lt;C-F&gt;           : history Window<br />----------------------------------------<br /># Abbreviations &amp; maps<br />:map   &lt;f7&gt;   :'a,'bw! c:/aaa/x<br />:map   &lt;f8&gt;   :r c:/aaa/x<br />:map   &lt;f11&gt;  :.w! c:/aaa/xr&lt;CR&gt;<br />:map   &lt;f12&gt;  :r c:/aaa/xr&lt;CR&gt;<br />:ab php          : list of abbreviations beginning php<br />:map ,           : list of maps beginning ,<br /># allow use of F10 for mapping (win32)<br />set wak=no       : :h winaltkeys<br /># For use in Maps<br />&lt;CR&gt;             : carriage Return for maps<br />&lt;ESC&gt;            : Escape<br />&lt;LEADER&gt;         : normally \<br />&lt;BAR&gt;            : | pipe<br />&lt;BACKSPACE&gt;      : backspace<br />#display RGB colour under the cursor eg #445588<br />:nmap &lt;leader&gt;c :hi Normal guibg=#&lt;c-r&gt;=expand("&lt;cword&gt;")&lt;cr&gt;&lt;cr&gt;<br />----------------------------------------<br /># Using a register as a map (preload registers in .vimrc)<br />:let @m=":'a,'bs/"<br />:let @s=":%!sort -u"<br />----------------------------------------<br /># List your Registers<br />:reg             : display contents of all registers<br />:reg a           : display content of individual registers<br />"1p....          : retrieve numeric registers one by one<br />:let @y='yy@"'   : pre-loading registers (put in .vimrc)<br />----------------------------------------<br /># Useful tricks<br />"ayy@a           : execute "Vim command" in a text file<br />yy@"             : same thing using unnamed register<br />u@.              : execute command JUST typed in<br />----------------------------------------<br /># Get output from other commands (requires external programs)<br />:r!ls.exe        : reads in output of ls<br />!!date           : same thing (but replaces/filters current line)<br /># Sorting with external sort<br />:%!sort -u       : use an external program to filter content<br />:'a,'b!sort -u   : use an external program to filter content<br />!1} sort -u      : sorts paragraph (note normal mode!!)<br />----------------------------------------<br /># Multiple Files Management (Essential)<br />:bn              : goto next buffer<br />:bp              : goto previous buffer<br />:wn              : save file and move to next (super)<br />:wp              : save file and move to previous<br />:bd              : remove file from buffer list (super)<br />:bun             : Buffer unload (remove window but not from list)<br />:badd file.c     : file from buffer list<br />:b 3             : go to buffer 3<br />:b main          : go to buffer with main in name eg main.c (ultra)<br />:sav php.html    : Save current file as php.html and "move" to php.html<br />:sav! %&lt;.bak     : Save Current file to alternative extension<br />:sav! %:r.cfm    : Save Current file to alternative extension<br />:e!              : return to unmodified file<br />:w c:/aaa/%      : save file elsewhere<br />:e #             : edit alternative file (also cntrl-^)<br />:rew             : return to beginning of edited files list (:args)<br />:brew            : buffer rewind<br />:sp fred.txt     : open fred.txt into a split<br />:sball,:sb       : Split all buffers (super)<br />:scrollbind      : in each split window<br />:map   &lt;F5&gt; :ls&lt;CR&gt;:e # : Pressing F5 lists all buffer, just type number<br />:set hidden      : Allows to change buffer w/o saving current buffer<br />----------------------------------------<br /># Quick jumping between splits<br />map &lt;C-J&gt; &lt;C-W&gt;j&lt;C-W&gt;_<br />map &lt;C-K&gt; &lt;C-W&gt;k&lt;C-W&gt;_<br />----------------------------------------<br /># Recording (BEST TIP of ALL)<br />qq  # record to q<br />your complex series of commands<br />q   # end recording<br />@q to execute<br />@@ to Repeat<br />5@@ to Repeat 5 times<br /># editing a register/recording<br />"qp                               :display contents of register q (normal mode)<br />&lt;ctrl-R&gt;q                         :display contents of register q (insert mode)<br /># you can now see recording contents, edit as required<br />"qdd                              :put changed contacts back into q<br />@q                                :execute recording/register q<br /># Operating a Recording on a Visual BLOCK<br />1) define recording/register<br />qq:s/ to/ from/g^Mq<br />2) Define Visual BLOCK<br />V}<br />3) hit : and the following appears<br />:'&lt;,'&gt;<br />4)Complete as follows<br />:'&lt;,'&gt;norm @q<br />----------------------------------------<br /># Visual is the newest and usually the BEST editing mode<br /># Visual basics<br />v                               : enter visual mode<br />V                               : visual mode whole line<br />&lt;C-V&gt;                           : enter VISUAL BLOCK mode<br />gv                              : reselect last visual area (ultra)<br />o                               : navigate visual area<br />"*y                             : yank visual area into paste buffer<br />V%                              : visualise what you match<br />V}J                             : Join Visual block (great)<br />V}gJ                            : Join Visual block w/o adding spaces<br />----------------------------------------<br /># Delete first 2 characters of 10 successive lines<br />0&lt;c-v&gt;10j2ld<br />----------------------------------------<br /># how to copy a set of columns using VISUAL BLOCK<br /># visual block (AKA columnwise selection) (NOT BY ordinary v command)<br />&lt;C-V&gt; then select "column(s)" with motion commands (win32 &lt;C-Q&gt;)<br />then c,d,y,r etc<br />----------------------------------------<br /># how to overwrite a visual-block of text with another such block<br />Pick the first block: ctrl-v move "ay<br />Pick the second block: ctrl-v move c ctrl-o "aP &lt;esc&gt;<br />----------------------------------------<br /># _vimrc essentials<br />:set incsearch : jumps to search word as you type (annoying but excellent)<br />:set wildignore=*.o,*.obj,*.bak,*.exe : tab complete now ignores these<br />:set shiftwidth=3                     : for shift/tabbing<br />:set vb t_vb=".                       : set silent (no beep)<br />:set browsedir=buffer                 : Maki GUI File Open use current directory<br />----------------------------------------<br /># launching Win IE<br />:nmap ,f :update&lt;CR&gt;:silent !start c:\progra~1\intern~1\iexplore.exe file://%:p&lt;CR&gt;<br />:nmap ,i :update&lt;CR&gt;: !start c:\progra~1\intern~1\iexplore.exe &lt;cWORD&gt;&lt;CR&gt;<br />----------------------------------------<br /># FTPing from VIM<br />cmap ,r  :Nread ftp://209.51.134.122/public_html/index.html<br />cmap ,w  :Nwrite ftp://209.51.134.122/public_html/index.html<br />gvim ftp://209.51.134.122/public_html/index.html<br />----------------------------------------<br /># appending to registers (use CAPITAL)<br /># yank 5 lines into "a" then add a further 5<br />"a5yy<br />10j<br />"A5yy<br />----------------------------------------<br />[I     : show lines matching word under cursor &lt;cword&gt; (super)<br />----------------------------------------<br /># Conventional Shifting/Indenting<br />:'a,'b&gt;&gt;<br /># visual shifting (builtin-repeat)<br />:vnoremap &lt; &lt;gv<br />:vnoremap &gt; &gt;gv<br /># Block shifting (magic)<br />&gt;i{<br />&gt;a{<br /># also<br />&gt;% and &lt;%<br />----------------------------------------<br /># Redirection &amp; Paste register *<br />:redir @*                    : redirect commands to paste buffer<br />:redir END                   : end redirect<br />:redir &gt;&gt; out.txt            : redirect to a file<br /># Working with Paste buffer<br />"*yy                         : yank to paste<br />"*p                          : insert from paste buffer<br /># yank to paste buffer (ex mode)<br />:'a,'by*                     : Yank range into paste<br />:%y*                         : Yank whole buffer into paste<br /># filter non-printable characters from the paste buffer<br /># useful when pasting from some gui application<br />:nmap &lt;leader&gt;p :let @* = substitute(@*,'[^[:print:]]','','g')&lt;cr&gt;"*p<br />----------------------------------------<br /># Re-Formatting text<br />gq}                          : Format a paragraph<br />ggVGgq                       : Reformat entire file<br />Vgq                          : current line<br /># break lines at 70 chars, if possible after a ;<br />:s/.\{,69\};\s*\|.\{,69\}\s\+/&amp;\r/g<br />----------------------------------------<br /># Operate command over multiple files<br />:argdo %s/foo/bar/e          : operate on all files in :args<br />:bufdo %s/foo/bar/e<br />:windo %s/foo/bar/e<br />:argdo exe '%!sort'|w!       : include an external command<br />:bufdo /foo/<br />----------------------------------------<br /># Command line tricks<br />gvim -h                    : help<br />ls | gvim -                : edit a stream!!<br />cat xx | gvim - -c "v/^\d\d\|^[3-9]/d " : filter a stream<br />gvim -o file1 file2        : open into a split<br /># execute one command after opening file<br />gvim.exe -c "/main" joe.c  : Open joe.c &amp; jump to "main"<br /># execute multiple command on a single file<br />vim -c "%s/ABC/DEF/ge | update" file1.c<br /># execute multiple command on a group of files<br />vim -c "argdo %s/ABC/DEF/ge | update" *.c<br /># remove blocks of text from a series of files<br />vim -c "argdo /begin/+1,/end/-1g/^/d | update" *.c<br /># Automate editing of a file (Ex commands in convert.vim)<br />vim -s "convert.vim" file.c<br />#load VIM without .vimrc and plugins (clean VIM)<br />gvim -u NONE -U NONE -N<br /># Access paste buffer contents (put in a script/batch file)<br />gvim -c 'normal ggdG"*p' c:/aaa/xp<br /># print paste contents to default printer<br />gvim -c 's/^/\=@*/|hardcopy!|q!'<br /># gvim's use of external grep (win32 or *nix)<br />:grep somestring *.php     : creates a list of all matching files<br /># use :cn(ext) :cp(rev) to navigate list<br />:h grep<br />----------------------------------------<br /># GVIM Difference Function (Brilliant)<br />gvim -d file1 file2        : vimdiff (compare differences)<br />dp                         : "put" difference under cursor to other file<br />do                         : "get" difference under cursor from other file<br />----------------------------------------<br /># Vim traps<br />In regular expressions you must backslash + (match 1 or more)<br />In regular expressions you must backslash | (or)<br />In regular expressions you must backslash ( (group)<br />In regular expressions you must backslash { (count)<br />/fred\+/                   : matches fred/freddy but not free<br />/\(fred\)\{2,3}/           : note what you have to break<br />----------------------------------------<br /># \v or very magic (usually) reduces backslashing<br />/codes\(\n\|\s\)*where  : normal regexp<br />/\vcodes(\n|\s)*where   : very magic<br />----------------------------------------<br /># pulling objects onto command/search line (SUPER)<br />&lt;C-R&gt;&lt;C-W&gt; : pull word under the cursor into a command line or search<br />&lt;C-R&gt;&lt;C-A&gt; : pull WORD under the cursor into a command line or search<br />&lt;C-R&gt;-                  : pull small register (also insert mode)<br />&lt;C-R&gt;[0-9a-z]           : pull named registers (also insert mode)<br />&lt;C-R&gt;%                  : pull file name (also #) (also insert mode)<br />&lt;C-R&gt;=somevar           : pull contents of a variable (eg :let sray="ray[0-9]")<br />----------------------------------------<br /># manipulating registers<br />:let @a=@_              : clear register a<br />:let @a=""              : clear register a<br />:let @*=@a              : copy register a to paste buffer<br />map   &lt;f11&gt; "qyy:let @q=@q."zzz"<br />----------------------------------------<br /># help for help<br />:h quickref             : VIM Quick Reference Sheet (ultra)<br />:h tips                 : Vim's own Tips Help<br />:h visual&lt;C-D&gt;&lt;tab&gt;     : obtain  list of all visual help topics<br />                        : Then use tab to step thru them<br />:h ctrl&lt;C-D&gt;            : list help of all control keys<br />:helpg uganda           : grep HELP Files use :cn, :cp to find next<br />:h :r                   : help for :ex command<br />:h CTRL-R               : normal mode<br />:h /\r                  : what's \r in a regexp (matches a &lt;CR&gt;)<br />:h \\zs                 : double up backslash to find \zs in help<br />:h i_CTRL-R             : help for say &lt;C-R&gt; in insert mode<br />:h c_CTRL-R             : help for say &lt;C-R&gt; in command mode<br />:h v_CTRL-V             : visual mode<br />:h tutor                : VIM Tutor<br />&lt;C-[&gt;, &lt;C-T&gt;            : Move back &amp; Forth in HELP History<br />gvim -h                 : VIM Command Line Help<br />----------------------------------------<br /># where was an option set<br />:scriptnames            : list all plugins, _vimrcs loaded (super)<br />:verbose set history?   : reveals value of history and where set<br />:function               : list functions<br />:func SearchCompl       : List particular function<br />----------------------------------------<br /># making your own VIM help<br />:helptags /vim/vim63/doc  : rebuild all *.txt help files in /doc<br />:help add-local-help<br />----------------------------------------<br /># running file thru an external program (eg php)<br />map   &lt;f9&gt;   :w&lt;CR&gt;:!c:/php/php.exe %&lt;CR&gt;<br />map   &lt;f2&gt;   :w&lt;CR&gt;:!perl -c %&lt;CR&gt;<br />----------------------------------------<br /># capturing output of current script in a separate buffer<br />:new | r!perl #                   : opens new buffer,read other buffer<br />:new! x.out | r!perl #            : same with named file<br />----------------------------------------<br /># Inserting DOS Carriage Returns<br />:%s/nubian/&lt;C-V&gt;&lt;C-M&gt;&amp;/g          :  that's what you type<br />:%s/nubian/&lt;C-Q&gt;&lt;C-M&gt;&amp;/g          :  for Win32<br />:%s/nubian/^M&amp;/g                  :  what you'll see where ^M is ONE character<br />:%s/nubian/\r&amp;/g                  :  better<br />----------------------------------------<br /># automatically delete trailing Dos-returns,whitespace<br />autocmd BufRead * silent! %s/[\r \t]\+$//<br />autocmd BufEnter *.php :%s/[ \t\r]\+$//e<br />----------------------------------------<br /># perform an action on a particular file or file type<br />autocmd VimEnter c:/intranet/note011.txt normal! ggVGg?<br />autocmd FileType *.pl exec('set fileformats=unix')<br />----------------------------------------<br /># Retrieving last command line command for copy &amp; pasting into text<br />i&lt;c-r&gt;:<br /># Retrieving last Search Command for copy &amp; pasting into text<br />i&lt;c-r&gt;/<br />----------------------------------------<br /># more completions<br />&lt;C-X&gt;&lt;C-F&gt;                        :insert name of a file in current directory<br />----------------------------------------<br /># Substituting a Visual area<br /># select visual area as usual (:h visual) then type :s/Emacs/Vim/ etc<br />:'&lt;,'&gt;s/Emacs/Vim/g               : REMEMBER you dont type the '&lt;.'&gt;<br />gv                                : Re-select the previous visual area (ULTRA)<br />----------------------------------------<br /># inserting line number into file<br />:g/^/exec "s/^/".strpart(line(".")."    ", 0, 4)<br />:%s/^/\=strpart(line(".")."     ", 0, 5)<br />:%s/^/\=line('.'). ' '<br />----------------------------------------<br />#numbering lines VIM way<br />:set number                       : show line numbers<br />:map &lt;F12&gt; :set number!&lt;CR&gt;       : Show linenumbers flip-flop<br />:%s/^/\=strpart(line('.')."        ",0,&amp;ts)<br />#numbering lines (need Perl on PC) starting from arbitrary number<br />:'a,'b!perl -pne 'BEGIN{$a=223} substr($_,2,0)=$a++'<br />#Produce a list of numbers<br />#Type in number on line say 223 in an empty file<br />qqmnYP`n^Aq                       : in recording q repeat with @q<br /># increment existing numbers to end of file (type &lt;c-a&gt; as 5 characters)<br />:.,$g/^\d/exe "normal! \&lt;c-a&gt;"<br /># advanced incrementing<br />http://vim.sourceforge.net/tip_view.php?tip_id=150<br />----------------------------------------<br /># advanced incrementing (really useful)<br />" put following in _vimrc<br />let g:I=0<br />function! INC(increment)<br />let g:I =g:I + a:increment<br />return g:I<br />endfunction<br />" eg create list starting from 223 incrementing by 5 between markers a,b<br />:let I=223<br />:'a,'bs/^/\=INC(5)/<br />" create a map for INC<br />cab viminc :let I=223 \| 'a,'bs/$/\=INC(5)/<br />----------------------------------------<br /># editing/moving within current insert (Really useful)<br />&lt;C-U&gt;                             : delete all entered<br />&lt;C-W&gt;                             : delete last word<br />&lt;HOME&gt;&lt;END&gt;                       : beginning/end of line<br />&lt;C-LEFTARROW&gt;&lt;C-RIGHTARROW&gt;       : jump one word backwards/forwards<br />&lt;C-X&gt;&lt;C-E&gt;,&lt;C-X&gt;&lt;C-Y&gt;             : scroll while staying put in insert<br />----------------------------------------<br />#encryption (use with care: DON'T FORGET your KEY)<br />:X                                : you will be prompted for a key<br />:h :X<br />----------------------------------------<br /># modeline (make a file readonly etc) must be in first/last 5 lines<br />// vim:noai:ts=2:sw=4:readonly:<br /># vim:ft=html:                    : says use HTML Syntax highlighting<br />:h modeline<br />----------------------------------------<br /># Creating your own GUI Toolbar entry<br />amenu  Modeline.Insert\ a\ VIM\ modeline &lt;Esc&gt;&lt;Esc&gt;ggOvim:ff=unix ts=4 ss=4&lt;CR&gt;vim60:fdm=marker&lt;esc&gt;gg<br />----------------------------------------<br /># A function to save word under cursor to a file<br />function! SaveWord()<br />   normal yiw<br />   exe ':!echo '.@0.' &gt;&gt; word.txt'<br />endfunction<br />map ,p :call SaveWord()<br />----------------------------------------<br /># function to delete duplicate lines<br />function! Del()<br />if getline(".") == getline(line(".") - 1)<br />   norm dd<br />endif<br />endfunction<br /><br />:g/^/ call Del()<br />----------------------------------------<br /># Digraphs (non alpha-numerics)<br />:digraphs                         : display table<br />:h dig                            : help<br />i&lt;C-K&gt;e'                          : enters �<br />i&lt;C-V&gt;233                         : enters � (Unix)<br />i&lt;C-Q&gt;233                         : enters � (Win32)<br />ga                                : View hex value of any character<br />#Deleting non-ascii characters (some invisible)<br />:%s/[&lt;C-V&gt;128-&lt;C-V&gt;255]//gi       : where you have to type the Control-V<br />:%s/[€-�]//gi                     : Should see a black square &amp; a dotted y<br />:%s/[&lt;C-V&gt;128-&lt;C-V&gt;255&lt;C-V&gt;01-&lt;C-V&gt;31]//gi : All pesky non-asciis<br />:exec "norm /[\x00-\x1f\x80-\xff]/"        : same thing<br />#Pull a non-ascii character onto search bar<br />yl/&lt;C-R&gt;"                         :<br />----------------------------------------<br /># All file completions grouped (for example main_c.c)<br />:e main_&lt;tab&gt;                     : tab completes<br />gf                                : open file under cursor  (normal)<br />main_&lt;C-X&gt;&lt;C-F&gt;                   : include NAME of file in text (insert mode)<br />----------------------------------------<br /># Complex Vim<br /># swap two words<br />:%s/\&lt;\(on\|off\)\&gt;/\=strpart("offon", 3 * ("off" == submatch(0)), 3)/g<br /># swap two words<br />:vnoremap &lt;C-X&gt; &lt;Esc&gt;`.``gvP``P<br />----------------------------------------<br /># Convert Text File to HTML<br />:runtime! syntax/2html.vim        : convert txt to html<br />:h 2html<br />----------------------------------------<br /># VIM has internal grep<br />:grep some_keyword *.c            : get list of all c-files containing keyword<br />:cn                               : go to next occurrence<br />----------------------------------------<br /># Force Syntax coloring for a file that has no extension .pl<br />:set syntax=perl<br /># Remove syntax coloring (useful for all sorts of reasons)<br />:set syntax off<br /># change coloring scheme (any file in ~vim/vim??/colors)<br />:colorscheme blue<br /># Force HTML Syntax highlighting by using a modeline<br /># vim:ft=html:<br />----------------------------------------<br />:set noma (non modifiable)        : Prevents modifications<br />:set ro (Read Only)               : Protect a file from unintentional writes<br />----------------------------------------<br /># Sessions (Open a set of files)<br />gvim file1.c file2.c lib/lib.h lib/lib2.h : load files for "session"<br />:mksession                        : Make a Session file (default Session.vim)<br />:q<br />gvim -S Session.vim               : Reload all files<br />----------------------------------------<br />#tags (jumping to subroutines/functions)<br />taglist.vim                       : popular plugin<br />:Tlist                            : display Tags (list of functions)<br />&lt;C-]&gt;                             : jump to function under cursor<br />----------------------------------------<br /># columnise a csv file for display only as may crop wide columns<br />:let width = 20<br />:let fill=' ' | while strlen(fill) &lt; width | let fill=fill.fill | endwhile<br />:%s/\([^;]*\);\=/\=strpart(submatch(1).fill, 0, width)/ge<br />:%s/\s\+$//ge<br /># Highlight a particular csv column (put in .vimrc)<br />function! CSVH(x)<br />    execute 'match Keyword /^\([^,]*,\)\{'.a:x.'}\zs[^,]*/'<br />    execute 'normal ^'.a:x.'f,'<br />endfunction<br />command! -nargs=1 Csv :call CSVH(&lt;args&gt;)<br /># call with<br />:Csv 5                             : highlight fifth column<br />----------------------------------------<br /># folding : hide sections to allow easier comparisons<br />zf}                               : fold paragraph using motion<br />v}zf                              : fold paragraph using visual<br />zf'a                              : fold to mark<br />zo                                : open fold<br />zc                                : re-close fold<br />----------------------------------------<br /># displaying "invisible characters"<br />:set list<br />:h listchars<br />----------------------------------------<br /># How to paste "normal commands" w/o entering insert mode<br />:norm qqy$jq<br />----------------------------------------<br /># manipulating file names<br />:h filename-modifiers             : help<br />:w %                              : write to current file name<br />:w %:r.cfm                        : change file extention to .cfm<br />:!echo %:p                        : full path &amp; file name<br />:!echo %:p:h                      : full path only<br />&lt;C-R&gt;%                            : insert filename (insert mode)<br />"%p                               : insert filename (normal mode)<br />/&lt;C-R&gt;%                           : Search for file name in text<br />----------------------------------------<br /># delete without destroying default buffer contents<br />"_d                               : what you've ALWAYS wanted<br />"_dw                              : eg delete word (use blackhole)<br />----------------------------------------<br /># pull full path name into paste buffer for attachment to email etc<br />nnoremap &lt;F2&gt; :let @*=expand("%:p")&lt;cr&gt; :unix<br />nnoremap &lt;F2&gt; :let @*=substitute(expand("%:p"), "/", "\\", "g")&lt;cr&gt; :win32<br />----------------------------------------<br /># Simple Shell script to rename files w/o leaving vim<br />$ vim<br />:r! ls *.c<br />:%s/\(.*\).c/mv &amp; \1.bla<br />:w !sh<br />:q!<br />----------------------------------------<br /># count words in a text file<br />g&lt;C-G&gt;<br />----------------------------------------<br /># example of setting your own highlighting<br />:syn match DoubleSpace "  "<br />:hi def DoubleSpace guibg=#e0e0e0<br />----------------------------------------<br /># Programming keys depending on file type<br />:autocmd bufenter *.tex map &lt;F1&gt; :!latex %&lt;CR&gt;<br />:autocmd bufenter *.tex map &lt;F2&gt; :!xdvi -hush %&lt;.dvi&amp;&lt;CR&gt;<br />----------------------------------------<br /># reading Ms-Word documents, requires antiword<br />:autocmd BufReadPre *.doc set ro<br />:autocmd BufReadPre *.doc set hlsearch!<br />:autocmd BufReadPost *.doc %!antiword "%"<br />----------------------------------------<br /># a folding method<br />vim: filetype=help foldmethod=marker foldmarker=&lt;&lt;&lt;,&gt;&gt;&gt;<br />A really big section closed with a tag &lt;&lt;&lt; <br />--- remember folds can be nested --- <br />Closing tag &gt;&gt;&gt; <br />----------------------------------------<br /># Just Another Vim Hacker JAVH<br />vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?"<br />----------------------------------------<br />__END__<br />----------------------------------------<br />If you liked these please return to www.vim.org<br />and vote for this tip (It does encourage me!!)<br /><a href="http://www.vim.org/tips/tip.php?tip_id=305"><font color="#003366">Tip 305</font></a><br />----------------------------------------<br />Please email any errors, tips etc to<br /><a href="http://ipng.besti.edu.cn/mailto:&lt;script%20language='JavaScript'%20type='text/javascript'&gt;%20&lt;!--%20var%20prefix%20=%20'ma'%20+%20'il'%20+%20'to';%20var%20path%20=%20'hr'%20+%20'ef'%20+%20'=';%20var%20addy47142%20=%20'david'%20+%20'@';%20addy47142%20=%20addy47142%20+%20'rayninfo'%20+%20'.'%20+%20'co'%20+%20'.'%20+%20'uk';%20document.write(%20'&lt;a%20'%20+%20path%20+%20'/''%20+%20prefix%20+%20':'%20+%20addy47142%20+%20'/'&gt;'%20);%20document.write(%20addy47142%20);%20document.write(%20'&lt;//a&gt;'%20);%20//--&gt;%20&lt;/script&gt;&lt;noscript&gt;%20此邮件地址受spam%20bots保护，需要使用%20Javascript%20功能来查阅。&lt;/noscript&gt;"><script language="JavaScript" type="text/javascript"><!-- 
var prefix = '&#109;a' + 'i&#108;' + '&#116;o'; 
var path = 'hr' + 'ef' + '='; 
var addy47142 = 'd&#97;v&#105;d' + '&#64;'; 
addy47142 = addy47142 + 'r&#97;yn&#105;nf&#111;' + '&#46;' + 'c&#111;' + '&#46;' + '&#117;k'; 
document.write( '<a ' + path + '\'' + prefix + ':' + addy47142 + '\'>' ); 
document.write( addy47142 ); 
document.write( '<\/a>' ); 
//--></script><a href="mailto:david@rayninfo.co.uk"><font color="#336699">david@rayninfo.co.uk</font></a><noscript> 
此邮件地址受spam bots保护，需要使用 Javascript 功能来查阅。
</noscript></a><br />----------------------------------------<br />updated version at http://www.rayninfo.co.uk/vimtips.html<br />----------------------------------------<br /># Information Sources<br />----------------------------------------<br /><a href="http://www.vim.org/"><font color="#003366">www.vim.org</font></a><br /><a href="http://groups.google.com/groups?group=comp.editors"><font color="#003366">comp.editors</font></a> "VIM" newsgroup<br /><a href="http://u.webring.com/hub?ring=vim&amp;id=14&amp;hub"><font color="#003366">VIM Webring</font></a><br /><a href="http://www.newriders.com/books/opl/ebooks/0735710015.html"><font color="#003366">Vim Book</font></a><br /><a href="http://vimdoc.sourceforge.net/cgi-bin/vim2html2.pl"><font color="#003366">Searchable VIM Doc</font></a><br /><a href="http://vimdoc.sourceforge.net/vimfaq.html"><font color="#003366">VIM FAQ</font></a><br /><a href="http://groups.google.com/groups?ie=UTF-8&amp;oe=GB2312&amp;th=c13b1ef9d7c20b9d"><font color="#003366">VimTips in Chinese</font></a><br />----------------------------------------<br /># : commands to neutralise &lt; for HTML display and publish<br /># use yy@" to execute following commands<br />:w!|sav! vimtips.html|:/^__BEGIN__/,/^__END__/s#&lt;#\&lt;#g|:w!|/tip[f]tp/|:!tipftp<br />----------------------------------------<br /></li>
		</table>
		<span class="article_seperator"> </span>
<img src ="http://www.cppblog.com/tx7do/aggbug/11103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-10 18:18 <a href="http://www.cppblog.com/tx7do/archive/2006/08/10/11103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>彩色的命令行 —— 使用 ANSI 色彩代码 </title><link>http://www.cppblog.com/tx7do/archive/2006/08/10/11101.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 10 Aug 2006 10:16:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/10/11101.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11101.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/10/11101.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11101.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11101.html</trackback:ping><description><![CDATA[
		<p>
				<i>摘要</i>: 
</p>
		<p>
				<!-- articleabstract_start -->在 ANSI 兼容终端（例如 xterm、rxvt、konsole 等）里， 可以用彩色显示文本而不仅仅是黑白。 本文示范了如何使用粗体和彩色的文字</p>
		<p>参见：http://www.linuxfocus.org/ChineseGB/May2004/article335.shtml</p>
		<style type="text/css">
				<!--
 td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 }
 pre { font-family:monospace,Courier }
 pre.code { font-family:monospace,Courier;background-color:#aedbe8; }
 p.cl { color:#EE9500 }
 a.nodec { text-decoration:none }
 p.trans { font-size:8pt; text-align:right }
 p.clbox { width:50%; alignment:center; background-color:#FFD700; 
           border-style:none; border-width:medium; border-color:#FFD700; 
           padding:0.5cm;  text-align:center }
 p.code { width:80%; alignment:center; background-color:#aedbe8; 
          border-style:none; border-width:medium; border-color:#aedbe8; 
          padding:0.1cm;  text-align:left }
 p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; 
          border-width:medium; border-color:#AAAAAA; padding:0.5cm ; 
          margin-top:0.1cm; margin-right:1cm; margin-left:1cm; 
          text-align:center }
 .mark  { background-color:#e6e6ff }
-->
		</style>
		<h2>概述</h2>在现实生活中，每一位 Linux 使用者都要面对 Bash。 虽然第一眼看上去非常枯燥，但是又很多方法能够让你的 shell 足够的个性化。 shell 提示符的彩色增强让能够让你的 shell 独一无二， 而且还非常清晰易读。<br /><br />在本文中我以 Bash shell 为例。因为在不同的终端里的转义序列不完全相同， 所以在本文中我使用的是 ANSI 终端。 <a name="335lfindex1"> </a><h2>Shell 的配置</h2>shell 彩色配置出现在 bash 的个人配置文件 <i>~/.bashrc</i> 或者是全局配置文件 <i>/etc/bashrc</i> 里面。 可以通过 <i>bashrc</i> 里面的 PS1 变量来设置提示符的外观。 <br /><br />通常情况下，这个条目看起来应该是这个样子： 
<table><tbody><tr><td><pre class="code">~/.bashrc: PS1="\s-\v\$ "
</pre>\s 表示 shell 的名称，-\v 表示他的版本号。 在提示符的最后面我们放置了一个 $。这样看起来也许有点乏味， 所以不妨试试下面这种模式——这种模式在大多数 Linux 的发行版本下是默认的设置： <pre class="code">~/.bashrc: PS1="\u@\h \w \$ "
</pre></td></tr></tbody></table>这表示 用户@ 当前目录 $，这个是大部分 Linux 用户都熟悉的 shell 提示符。 <a name="335lfindex2"> </a><h2>转义序列</h2>要是通过彩色化提示符来增加个性化，就要用到转义序列。 转义序列就是一个让 shell 执行一个特殊步骤的控制指令。 转义序列通常都是以 ESC 开头（这也是它的命名原因）。 在 shell 里表示为 ^[。这种表示法需要一点时间去适应， 也可以用 \033 完成相同的工作（ESC 的 ASCII 码用十进制表示就是 27， = 用八进制表示的 33）。<br /><br />要直接在 shell 里面输入转义序列我们需要先按 ctrl-v：<i>CTRL-v ESC</i>。 <a name="335lfindex3"> </a><h2>使用 shell 的颜色</h2>下面我用一个提示符的例子来解释 shell 的颜色。 <pre class="code">~/.bashrc: PS1="\[\033[0;32;40m\u@\h:\w\$ \]"
</pre>这样提示符就全部显示成绿色了。就像这样：<br /><center><table cellpadding="10" border="0"><tbody><tr><td bgcolor="#000000"><font color="#00ff00">nico@ebrain:~$</font></td></tr></tbody></table></center><br />\033 声明了转义序列的开始，然后是 [ 开始定义颜色。 后面的 0 定义了默认的字体宽度。稍后我会介绍其他的可用字符。 转义序列字符串要用 \[ 和 \] 括起来， 防止转义序列的文本显示在 shell 里占用太多的空间。<br /><br />下面我们要选择前景色（这里是 32，代表绿色）。背景色的 40 表示黑色。 要是不想让提示符后面的文字也变成绿色，我们用 \033[0m 关闭转义序列， \033[0m 是 shell 的默认颜色。前景色和背景色都有 8 种可用的选择。<br /><br />可选颜色：红色、绿色、黄色、蓝色、洋红、青色和白色。 他们对应的颜色代码是：30（黑色）、31（红色）、32（绿色）、 33（黄色）、34（蓝色）、35（洋红）、36（青色）、37（白色）。<br /><br />用同样色方法设置背景色，不过要把第一个数字“3”替换成“4”， 例如 40、41、42、43、44、45、46、47。<br /><br />示例： <pre class="code">~/.bashrc: PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]"
</pre><br />这给了我们一个非常多彩的提示符：<br /><center><table cellpadding="10" border="0"><tbody><tr><td bgcolor="#000000"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td bgcolor="#0000ff"><font color="#ffffff">nico@</font></td><td bgcolor="#aa5500"><font color="#00ff00">ebrain:</font></td><td bgcolor="#ff3030"><font color="#aa5500">~$</font></td></tr></tbody></table></td></tr></tbody></table></center><br />我们使用 <i>export PS1="string"</i> 来测试这些设置， 稍后我们要把这些设置转移到 <i>.bashrc</i> 里面。 现在我的提示符看起来是这个样子： <pre class="code">PS1="\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] "
</pre><br /><center><table cellpadding="10" border="0"><tbody><tr><td bgcolor="#000000"><b><font color="#0000ff">[</font><font color="#ff0000">nico@ebrain:~</font><font color="#0000ff">]</font></b></td></tr></tbody></table></center><a name="335lfindex4"> </a><h2>文本属性</h2>刚才提到了，在第一个转义序列后面的“0”是提示符的文本的默认颜色设置。 对于文本属性来说，这些值是有意义的：0、1、22、4、24、5、25、7、27， 分别表示：默认值、粗体、非粗体、下划线、非下划线、闪烁、非闪烁、 反显、非反显。<br /><br />通过下面这一段短小的脚本，我们可以看看色彩组合。 <pre class="code">#!/bin/sh
############################################################
# Nico Golde &lt;nico(at)ngolde.de&gt; Homepage: http://www.ngolde.de
# Last change: Mon Feb 16 16:24:41 CET 2004
############################################################

for attr in 0 1 4 5 7 ; do
    echo "----------------------------------------------------------------"
    printf "ESC[%s;Foreground;Background - \n" $attr
    for fore in 30 31 32 33 34 35 36 37; do
        for back in 40 41 42 43 44 45 46 47; do
            printf '\033[%s;%s;%sm %02s;%02s  ' $attr $fore $back $fore $back
        done
    printf '\n'
    done
    printf '\033[0m'
done
</pre>这段脚本可以从 <a href="http://www.linuxfocus.org/common/src2/article335/showansicol.tar.gz" shape="RECT"><font color="#336699">showansicol.tar.gz</font></a> 下载，格式是 <i>tar.gz</i>。 <a name="335lfindex5"> </a><h2>另一个程序</h2>在 shell 中设置颜色不仅仅能创建更加漂亮的提示符， 在编写控制台程序的时候也非常有用。<br /><br />对于一个要使用彩色的程序员，就必须要使用类似 <i>slang</i> 或 <i>ncurses</i> 这样的的库，者通常会增加执行文件的大小。 <i>Ncurses</i> 有着或多或少的独立于终端的类型的优势。 <a name="335lfindex6"> </a><h2>C 语言示例</h2>用绿色打印“Hello Word”： <pre class="code">#include &lt;stdio.h&gt;
int main(void){
  const char *const green = "\033[0;40;32m";
  const char *const normal = "\033[0m";
  printf("%sHello World%s\n", green, normal);
  return 0;
}
</pre>另外一个有用的转义序列是 <i>printf("\033[2J")</i>，它和 <i>system(clear)</i> 完成的功能一样。但是可以不需要头文件 <i>unistd.h</i>。<br /><br />使用<i>printf("\033[1K")</i> 可以删除一行。 <a name="335lfindex7"> </a><h2>初始化脚本示例</h2>如果我们想在 <i>/etc/init.d</i> 的 <i>init</i> 脚本成功的执行后， 得到一个漂亮的、清晰易读的提示，而不是一个简单的 <i>'.'</i>， 我们可以再一次的使用转义序列。<br /><br />这是一段 <i>cron init script</i> 的摘录： <pre class="code">#!/bin/sh
# Start/stop the cron daemon.
test -f /usr/sbin/cron || exit 0

 case "$1" in
 start)  echo -n "Starting periodic command scheduler: cron"
     start-stop-daemon --start --quiet --exec /usr/sbin/cron

                 echo "."
;;

</pre>如果 <i>cron</i> 脚本执行成功就会显示一个句点。 可以用 [Ok] 给这些信息添加上彩色特征，通过改变 <i>echo</i> 字符串，例如： <pre class="code">#!/bin/sh
# Start/stop the cron daemon.
test -f /usr/sbin/cron || exit 0
case "$1" in
start)  echo -n "Starting periodic command scheduler: cron"
        start-stop-daemon --start --quiet --exec /usr/sbin/cron
echo "\[ \033[1;34;40m[ \033[1;32;40mOk \033[1;34;40m]\033[0m\]"
    ;;
</pre><p>把这个设置应用到所有的 <i>init</i>脚本上非常耗费时间， 除非使用转义序列 \033 —— 因为 <i>Ctrl-v</i> 不是作为一个字符来处理的。 <a name="335lfindex8"> </a></p><img src ="http://www.cppblog.com/tx7do/aggbug/11101.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-10 18:16 <a href="http://www.cppblog.com/tx7do/archive/2006/08/10/11101.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu下的C/C++环境搭建</title><link>http://www.cppblog.com/tx7do/archive/2006/08/10/11098.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 10 Aug 2006 10:05:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/10/11098.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11098.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/10/11098.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11098.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11098.html</trackback:ping><description><![CDATA[
		<p>我用的是Ubuntu的Server版本，安装是很容易的，非常之简单，不过安装之后的操作系统几乎是一个空白的操作系统，几乎什么都没有，所以都得安装好。<br /><br />因为是Dapper (6.06) 版本，所以我用以下方法更换软件源：<br /><br />vim /etc/apt/sources.list<br /><br />用以下内容替换文件中的所有内容</p>
		<p>deb <a href="http://archive.ubuntu.com/ubuntu/">http://archive.ubuntu.com/ubuntu/</a> dapper main restricted universe multiverse<br />deb <a href="http://archive.ubuntu.com/ubuntu/">http://archive.ubuntu.com/ubuntu/</a> dapper-security main restricted universe multiverse<br />deb <a href="http://archive.ubuntu.com/ubuntu/">http://archive.ubuntu.com/ubuntu/</a> dapper-updates main restricted universe multiverse<br />deb <a href="http://archive.ubuntu.com/ubuntu/">http://archive.ubuntu.com/ubuntu/</a> dapper-backports main restricted universe multiverse<br />deb <a href="http://ubuntu.cn99.com/ubuntu-cn/">http://ubuntu.cn99.com/ubuntu-cn/</a> dapper main restricted universe multiverse</p>
		<p>这里你也可以直接使用更快速的ubuntu.cn99.com的源（推荐）: <br />deb <a href="http://ubuntu.cn99.com/ubuntu/">http://ubuntu.cn99.com/ubuntu/</a> dapper main restricted universe multiverse<br />deb <a href="http://ubuntu.cn99.com/ubuntu/">http://ubuntu.cn99.com/ubuntu/</a> dapper-updates main restricted universe multiverse<br />deb <a href="http://ubuntu.cn99.com/ubuntu/">http://ubuntu.cn99.com/ubuntu/</a> dapper-security main restricted universe multiverse<br />deb <a href="http://ubuntu.cn99.com/ubuntu/">http://ubuntu.cn99.com/ubuntu/</a> dapper-backports main restricted universe multiverse<br />deb <a href="http://ubuntu.cn99.com/ubuntu-cn/">http://ubuntu.cn99.com/ubuntu-cn/</a> dapper main restricted universe multiverse</p>
		<p>这里你还可以使用速度也非常快的的mirror.lupaworld.com的源: <br />deb <a href="http://mirror.lupaworld.com/ubuntu/archive/">http://mirror.lupaworld.com/ubuntu/archive/</a> dapper main restricted universe multiverse<br />deb <a href="http://mirror.lupaworld.com/ubuntu/archive/">http://mirror.lupaworld.com/ubuntu/archive/</a> dapper-security main restricted universe multiverse<br />deb <a href="http://mirror.lupaworld.com/ubuntu/archive/">http://mirror.lupaworld.com/ubuntu/archive/</a> dapper-updates main restricted universe multiverse<br />deb <a href="http://mirror.lupaworld.com/ubuntu/archive/">http://mirror.lupaworld.com/ubuntu/archive/</a> dapper-backports main restricted universe multiverse<br />deb <a href="http://mirror.lupaworld.com/ubuntu/ubuntu-cn/">http://mirror.lupaworld.com/ubuntu/ubuntu-cn/</a> dapper main restricted universe multiverse</p>
		<p>如果是教育网用户推荐使用上海交通大学的源: <br />deb <a href="http://ftp.sjtu.edu.cn/ubuntu/">http://ftp.sjtu.edu.cn/ubuntu/</a> dapper main multiverse restricted universe<br />deb <a href="http://ftp.sjtu.edu.cn/ubuntu/">http://ftp.sjtu.edu.cn/ubuntu/</a> dapper-backports main multiverse restricted universe<br />deb <a href="http://ftp.sjtu.edu.cn/ubuntu/">http://ftp.sjtu.edu.cn/ubuntu/</a> dapper-proposed main multiverse restricted universe<br />deb <a href="http://ftp.sjtu.edu.cn/ubuntu/">http://ftp.sjtu.edu.cn/ubuntu/</a> dapper-security main multiverse restricted universe<br />deb <a href="http://ftp.sjtu.edu.cn/ubuntu/">http://ftp.sjtu.edu.cn/ubuntu/</a> dapper-updates main multiverse restricted universe<br />deb <a href="http://ftp.sjtu.edu.cn/ubuntu-cn/">http://ftp.sjtu.edu.cn/ubuntu-cn/</a> dapper bleeding main multiverse restricted universe</p>
		<p>教育网用户也推荐使用清华大学计算机系学生科协的源:<br />deb <a href="http://mirror.net9.org/ubuntu/">http://mirror.net9.org/ubuntu/</a> dapper main multiverse restricted universe<br />deb <a href="http://mirror.net9.org/ubuntu/">http://mirror.net9.org/ubuntu/</a> dapper-backports main multiverse restricted universe<br />deb <a href="http://mirror.net9.org/ubuntu/">http://mirror.net9.org/ubuntu/</a> dapper-proposed main multiverse restricted universe<br />deb <a href="http://mirror.net9.org/ubuntu/">http://mirror.net9.org/ubuntu/</a> dapper-security main multiverse restricted universe<br />deb <a href="http://mirror.net9.org/ubuntu/">http://mirror.net9.org/ubuntu/</a> dapper-updates main multiverse restricted universe<br />deb <a href="http://mirror.net9.org/ubuntu-cn/">http://mirror.net9.org/ubuntu-cn/</a> dapper main multiverse restricted universe</p>
		<p>保存编辑好的文件 <br />sudo apt-get update<br /><br /><br />刚装好的系统的root是进不去的，需要更改密码：<br />sudo passwd root<br /><br />反正是内网用，所以就直接用root了，sudo太麻烦！<br /><br />接下来安装SSH用以远程登陆：<br />apt-get install ssh<br /><br />OK，接着装编译器：<br /><br />apt-get install gcc <br />apt-get install make<br />apt-get install autoconf<br />apt-get install automake<br />apt-get install libtool<br />apt-get install gdb<br />apt-get install g++<br /><br />编辑器，我偏好使用vim，就装上了它<br />apt-get install vim<br />默认下，vim是没有语法染色的，<br />修改/etc/vim/vimrc<br /><font size="2">只要把syntax on的注释去掉就可以了。<br /><br />想要让vim好用，还需要安装一些必须的插件，这里我引用两篇文章：<br /><br /></font></p>
		<blockquote>第一部分介绍了一些基本的 Vim 使用技巧。掌握这些技巧可以很大地提高编辑效率，但是 Vim 的强大功能并不仅限于此。Vim 还可以通过“插件”来进行功能扩展。精确地说，是通过脚本来进行扩展，脚本类型有插件、语法加亮、配色方案、文件类型检测等多种。大部分的脚本都是由 Vim 的用户写的，解决了用户身边的问题，使 Vim 变得更加有用。本章将介绍最常用的一些脚本，其中除了一个属于“语法加亮”脚本外，其它都属于“插件”类型。关于如何写脚本的一些基础知识将在下一部分进行一些介绍。</blockquote>
		<!--START RESERVED FOR FUTURE USE INCLUDE FILES-->
		<!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters -->
		<!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
		<p>
				<a name="IDALS4AD">
						<span class="smalltitle">
								<strong>
										<font face="Arial" size="3">2.1. gzip（压缩文件支持）</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<strong>作者：</strong>Bram Moolenar</p>
		<p>
				<b>网站脚本编号：</b>无（包含在 Vim 的标准发布之中）</p>
		<p>
				<b>安装说明：</b>无</p>
		<p>
				<b>功能说明：</b>
		</p>
		<p>该脚本使得 Vim 可以直接打开使用 gzip [1]、bzip2 [2] 和 compress [3] 压缩的文件（要求存在相应的命令行工具）。后缀为“.gz”、“.bz2”和“.Z”的文件会在打开时被动态解压缩，并在写操作时被自动重新压缩。</p>
		<p>打开压缩文件时，屏幕上出现一个（不正确的）“[noeol]”的提示是正常的，不必进行理睬。</p>
		<p>
				<a name="IDA3S4AD">
						<span class="smalltitle">
								<strong>
										<font face="Arial" size="3">2.2. netrw（网络文件支持）</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<strong>作者：</strong>Charles E. Campbell, Jr.（绰号 Dr. Chip）</p>
		<p>
				<b>网站脚本编号：</b>1075（Vim 的标准发布之中可能包含一个较老的版本）</p>
		<p>
				<b>安装说明：</b>
		</p>
		<p>Vim 6.4 的标准发布带的版本是 42，较老、功能不齐全，但无须安装。建议：</p>
		<p>1. 在 Vim 网站上下载版本 62（更新的版本只能用于 Vim 7）；<br />2. 使用“tar xvfj netrw.tar.bz2 -C ~/.vim”解开；<br />3. 在Vim中运行“:helptags ~/.vim/doc”安装文档。</p>
		<p>
				<b>功能说明：</b>
		</p>
		<p>支持直接读写网络上的文件，支持的协议有 ftp、http、rsync、scp 等。比如，使用 FTP 协议以用户名 adah 打开服务器 server 上 ~/temp 目录下的 test.cpp 文件，可以直接在命令行上使用：</p>
		<p>
		</p>
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<pre>
												<code class="section">
														<font face="Lucida Console">vim ftp://adah@server/temp/test.cpp
</font>
												</code>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>Vim会自动提示用户输入口令，然后打开文件。</p>
		<p>更多的帮助内容请参考“:help netrw”。</p>
		<p>
				<a name="IDAZT4AD">
						<span class="smalltitle">
								<strong>
										<font face="Arial" size="3">2.3. engspchk（英文拼写检查）</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<strong>作者：</strong>Charles E. Campbell, Jr.（绰号Dr. Chip）</p>
		<p>
				<b>网站脚本编号：</b>195</p>
		<p>
				<b>安装说明：</b>
				<br />在 Vim 网站上下载最新版本（engspchk.tar.gz）；<br />使用“tar xvfz engspchk.tar.gz -C ~/.vim”解开；<br />在Vim中运行“:helptags ~/.vim/doc”安装文档。<br />提示替换拼写功能需要 agrep [4]，可能需要另外下载安装。</p>
		<p>
				<b>功能说明：</b>
				<br />一个Vim专用的拼写检查器，其最主要的特点是：</p>
		<ul>
				<li>可以通过变量 spchkdialect 选择英语变体（英国、美国、加拿大），对于找不到的词、不常见的词、不