<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>《vi/vim使用进阶: 指随意动，移动如飞 (二)》的评论</title>
	<atom:link href="http://easwy.com/blog/archives/advanced-vim-skills-advanced-move-method/feed/" rel="self" type="application/rss+xml" />
	<link>http://easwy.com/blog/archives/advanced-vim-skills-advanced-move-method/</link>
	<description>关注Linux, Scala, Android, Java, 开源软件和嵌入式系统</description>
	<lastBuildDate>Mon, 14 May 2012 09:51:09 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>作者：把gvim用的像个记事本 &#124; 九连环</title>
		<link>http://easwy.com/blog/archives/advanced-vim-skills-advanced-move-method/#comment-5502</link>
		<dc:creator>把gvim用的像个记事本 &#124; 九连环</dc:creator>
		<pubDate>Tue, 07 Dec 2010 19:59:50 +0000</pubDate>
		<guid isPermaLink="false">http://easwy.com/blog/?p=173#comment-5502</guid>
		<description>[...] 这里有两篇文章，链接，链接也建议看看，我从里面学了很多东西。 [...]</description>
		<content:encoded><![CDATA[<p>[...] 这里有两篇文章，链接，链接也建议看看，我从里面学了很多东西。 [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：Easwy</title>
		<link>http://easwy.com/blog/archives/advanced-vim-skills-advanced-move-method/#comment-47</link>
		<dc:creator>Easwy</dc:creator>
		<pubDate>Fri, 13 Feb 2009 08:11:29 +0000</pubDate>
		<guid isPermaLink="false">http://easwy.com/blog/?p=173#comment-47</guid>
		<description>(以下为CSDN评论的转帖)

#easwy 发表于2007-10-15 11:41:47  IP: 213.70.90.*
    to szjso

    你试试把
    void test2(ABC * const abc1)
    写成
    void test2(const ABC * abc1)
    可能这样OmniCppComplete就能正常工作了。

#szjso 发表于2007-10-16 09:03:42  IP: 121.33.12.*
    谢谢easwy的回复！正如你所说，是这样的。

    但是不知道我有没有理解错误。 我印象中void test2(ABC * const abc1)和 void test2(const ABC * abc1)的意义是不同的。

    前者是在函数test2()中，可以改变abc1所指向的结构体的元素，但不允许改变abc1指针本身的值。
    后者是在函数test2()中，不可以改变abc1所指向的结构体的元素，但允许改变abc1指针本身的值。

#easwy 发表于2007-10-16 10:12:58  IP: 213.70.90.*
    你说的对，const放在这两个位置的含义是不同的
    但是我认为在这里使用void test2(ABC * const abc1)是没有意义的，因为在函数调用时，abc1是值拷贝的，即使你在函数中对其进行修改，也不影响原来的指针，所以没有必要用const修饰。受保护的应该是指针所指向的内容。</description>
		<content:encoded><![CDATA[<p>(以下为CSDN评论的转帖)</p>
<p>#easwy 发表于2007-10-15 11:41:47  IP: 213.70.90.*<br />
    to szjso</p>
<p>    你试试把<br />
    void test2(ABC * const abc1)<br />
    写成<br />
    void test2(const ABC * abc1)<br />
    可能这样OmniCppComplete就能正常工作了。</p>
<p>#szjso 发表于2007-10-16 09:03:42  IP: 121.33.12.*<br />
    谢谢easwy的回复！正如你所说，是这样的。</p>
<p>    但是不知道我有没有理解错误。 我印象中void test2(ABC * const abc1)和 void test2(const ABC * abc1)的意义是不同的。</p>
<p>    前者是在函数test2()中，可以改变abc1所指向的结构体的元素，但不允许改变abc1指针本身的值。<br />
    后者是在函数test2()中，不可以改变abc1所指向的结构体的元素，但允许改变abc1指针本身的值。</p>
<p>#easwy 发表于2007-10-16 10:12:58  IP: 213.70.90.*<br />
    你说的对，const放在这两个位置的含义是不同的<br />
    但是我认为在这里使用void test2(ABC * const abc1)是没有意义的，因为在函数调用时，abc1是值拷贝的，即使你在函数中对其进行修改，也不影响原来的指针，所以没有必要用const修饰。受保护的应该是指针所指向的内容。</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：Easwy</title>
		<link>http://easwy.com/blog/archives/advanced-vim-skills-advanced-move-method/#comment-46</link>
		<dc:creator>Easwy</dc:creator>
		<pubDate>Fri, 13 Feb 2009 08:10:47 +0000</pubDate>
		<guid isPermaLink="false">http://easwy.com/blog/?p=173#comment-46</guid>
		<description>(以下为CSDN评论的转帖)

#szjso 发表于2007-09-27 14:26:08  IP: 59.42.189.*
    谢谢你的答复！我又试了一下c文件，果然效果和你的截图一样。我之前是用cpp文件做试验的。

#szjso 发表于2007-10-10 16:55:04  IP: 121.32.186.*
    学习了omnicppcomplete和vim的script一个多星期，说说自己的一个经验：如果有如下代码：
    typedef struct abc
    {
    int a,b;
    }ABC;

    void test1(ABC * abc1)
    {
    }

    void test2(ABC * const abc1)
    {
    }
    则 test1()可以完成对abc1的自动补全，但test2()就不能完成对abc1的自动补全了。原因是omnicppcomplete没有考虑到 const这个关键字。如果修改文件 utils.vim 中的 omni#cpp#utils#ExtractTypeInfoFromTokens()函数中以下
    一句：
    elseif index([&#039;*&#039;, &#039;&amp;&#039;], token.value)&lt;0 为
    elseif index([&#039;*&#039;, &#039;&amp;&#039; , &#039;const&#039;], token.value)&lt;0

    就可进行补全了。我还没有对这样修改以后进行详细测试。但总算可以解决了问题。

#王军 发表于2007-10-12 18:08:11  IP: 203.129.78.*
    谢谢 Easwy， 我很受益。</description>
		<content:encoded><![CDATA[<p>(以下为CSDN评论的转帖)</p>
<p>#szjso 发表于2007-09-27 14:26:08  IP: 59.42.189.*<br />
    谢谢你的答复！我又试了一下c文件，果然效果和你的截图一样。我之前是用cpp文件做试验的。</p>
<p>#szjso 发表于2007-10-10 16:55:04  IP: 121.32.186.*<br />
    学习了omnicppcomplete和vim的script一个多星期，说说自己的一个经验：如果有如下代码：<br />
    typedef struct abc<br />
    {<br />
    int a,b;<br />
    }ABC;</p>
<p>    void test1(ABC * abc1)<br />
    {<br />
    }</p>
<p>    void test2(ABC * const abc1)<br />
    {<br />
    }<br />
    则 test1()可以完成对abc1的自动补全，但test2()就不能完成对abc1的自动补全了。原因是omnicppcomplete没有考虑到 const这个关键字。如果修改文件 utils.vim 中的 omni#cpp#utils#ExtractTypeInfoFromTokens()函数中以下<br />
    一句：<br />
    elseif index(['*', '&#038;'], token.value)&lt;0 为<br />
    elseif index(['*', '&#038;' , 'const'], token.value)&lt;0</p>
<p>    就可进行补全了。我还没有对这样修改以后进行详细测试。但总算可以解决了问题。</p>
<p>#王军 发表于2007-10-12 18:08:11  IP: 203.129.78.*<br />
    谢谢 Easwy， 我很受益。</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：Easwy</title>
		<link>http://easwy.com/blog/archives/advanced-vim-skills-advanced-move-method/#comment-43</link>
		<dc:creator>Easwy</dc:creator>
		<pubDate>Fri, 13 Feb 2009 08:10:19 +0000</pubDate>
		<guid isPermaLink="false">http://easwy.com/blog/?p=173#comment-43</guid>
		<description>(以下为CSDN评论的转帖)

#easwy 发表于2007-09-25 12:34:43  IP: 213.70.90.*
    第一个问题，要显示函数参数，要打开OmniCppComplete的OmniCpp_ShowPrototypeInAbbr选项，我没有试过，不知道是不是满足你的需求。或者你可以不更改completeopt选项，在preview窗口在查看函数原型。

    第二个问题，不知道你的tag文件中有没有生成OmniCppComplete需要的额外信息。另外，似乎ctags是从cpp文件中获取成员函数信息的，你在生成tag时有没有包含cpp文件呢？ (我记不清楚是不是这样，你可以试一下)

#szjso 发表于2007-09-25 14:47:56  IP: 58.62.96.*
    谢谢easwy的回答！

    我发现了第二个问题的原因。是我看OmniCppComplete的手册时理解错误，在用ctags时加了-I选项。结果不能列出成员函数。

    至于第一个问题，我是指没有安装OmniCppComplete前，只用vim自己的自动补全功能时的情况。我看你的截图是在说明 OmniCppComplete前就有函数的参数显示了。后来我设置了OmniCpp_ShowPrototypeInAbbr=1。就可以显示函数参数了。但是，显示位置和你的截图不同。截图中函数原型显示在&#039;f&#039;的右边，但我的显示是在&#039;f&#039;的左边。我想我还有设置没对。不过已经可以用了。呵呵，再次谢谢！

#easwy 发表于2007-09-26 09:33:24  IP: 213.70.90.*
    关于第一个问题：
    这个补全是对c文件的补全，没有使用OmniCppComplete。你可以在c文件中试一下，用的是vim自带的c文件缺省omni函数。</description>
		<content:encoded><![CDATA[<p>(以下为CSDN评论的转帖)</p>
<p>#easwy 发表于2007-09-25 12:34:43  IP: 213.70.90.*<br />
    第一个问题，要显示函数参数，要打开OmniCppComplete的OmniCpp_ShowPrototypeInAbbr选项，我没有试过，不知道是不是满足你的需求。或者你可以不更改completeopt选项，在preview窗口在查看函数原型。</p>
<p>    第二个问题，不知道你的tag文件中有没有生成OmniCppComplete需要的额外信息。另外，似乎ctags是从cpp文件中获取成员函数信息的，你在生成tag时有没有包含cpp文件呢？ (我记不清楚是不是这样，你可以试一下)</p>
<p>#szjso 发表于2007-09-25 14:47:56  IP: 58.62.96.*<br />
    谢谢easwy的回答！</p>
<p>    我发现了第二个问题的原因。是我看OmniCppComplete的手册时理解错误，在用ctags时加了-I选项。结果不能列出成员函数。</p>
<p>    至于第一个问题，我是指没有安装OmniCppComplete前，只用vim自己的自动补全功能时的情况。我看你的截图是在说明 OmniCppComplete前就有函数的参数显示了。后来我设置了OmniCpp_ShowPrototypeInAbbr=1。就可以显示函数参数了。但是，显示位置和你的截图不同。截图中函数原型显示在&#8217;f'的右边，但我的显示是在&#8217;f'的左边。我想我还有设置没对。不过已经可以用了。呵呵，再次谢谢！</p>
<p>#easwy 发表于2007-09-26 09:33:24  IP: 213.70.90.*<br />
    关于第一个问题：<br />
    这个补全是对c文件的补全，没有使用OmniCppComplete。你可以在c文件中试一下，用的是vim自带的c文件缺省omni函数。</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：Easwy</title>
		<link>http://easwy.com/blog/archives/advanced-vim-skills-advanced-move-method/#comment-44</link>
		<dc:creator>Easwy</dc:creator>
		<pubDate>Fri, 13 Feb 2009 08:09:35 +0000</pubDate>
		<guid isPermaLink="false">http://easwy.com/blog/?p=173#comment-44</guid>
		<description>(以下为CSDN评论的转帖)

#szjso 发表于2007-09-25 11:31:36 IP: 58.62.96.*
谢谢easwy关于vim的系列文章！
我刚学vim，有些问题想向你请教一下。看过你自动补全的两篇文章之后，我觉得奇怪，我搞了函数名的前几个字母，就按，是可以弹出菜单，但只有函数名而没有函数的参数，这个和你的截图不一样。而我安装了OmniCppComplete后，弹出菜单也只能列出一个类的成员变量，而不能列出类的成员函数。我想可能是有些设置不对，所以向你请教。望不吝赐教，先谢过了！

#easwy 发表于2007-09-25 12:25:41 IP: 213.70.90.*
我做的不是嵌入式linux的开发，以前用的是vxworks，它的调试器源于gdb，不是提供了更友好的图形前端。现在用的平台比较糟糕，只能printf调试，这比较考验人， ;-)
要向linux平台发展，最困难的是克服已有的习惯，以及真正接受linux的观念。我见过很多人，他们使用linux，但却没有体会到它的强大与便利，因为他们改变不了已经培养起来的习惯：离不开图形界面，不习惯使用命令行，懒于阅读手册，不屑于了解linux的文化传统和其内含的奉献、共享的精神……
必须承认，linux的用户界面不够友好，这阻止了很多人学习使用linux，不过，当你度过了最初的阶段，当你学会了通过手册、internet、邮件列表来学习，当你接受了它的文化，你会觉得使用linux是很愉快的事，你也会体会到它的强大、便利、优美……
当然，这一切需要付出，需要时间，你会体验到别扭、沮丧、失败，如果你能坚持下来，你就能达到</description>
		<content:encoded><![CDATA[<p>(以下为CSDN评论的转帖)</p>
<p>#szjso 发表于2007-09-25 11:31:36 IP: 58.62.96.*<br />
谢谢easwy关于vim的系列文章！<br />
我刚学vim，有些问题想向你请教一下。看过你自动补全的两篇文章之后，我觉得奇怪，我搞了函数名的前几个字母，就按，是可以弹出菜单，但只有函数名而没有函数的参数，这个和你的截图不一样。而我安装了OmniCppComplete后，弹出菜单也只能列出一个类的成员变量，而不能列出类的成员函数。我想可能是有些设置不对，所以向你请教。望不吝赐教，先谢过了！</p>
<p>#easwy 发表于2007-09-25 12:25:41 IP: 213.70.90.*<br />
我做的不是嵌入式linux的开发，以前用的是vxworks，它的调试器源于gdb，不是提供了更友好的图形前端。现在用的平台比较糟糕，只能printf调试，这比较考验人， ;-)<br />
要向linux平台发展，最困难的是克服已有的习惯，以及真正接受linux的观念。我见过很多人，他们使用linux，但却没有体会到它的强大与便利，因为他们改变不了已经培养起来的习惯：离不开图形界面，不习惯使用命令行，懒于阅读手册，不屑于了解linux的文化传统和其内含的奉献、共享的精神……<br />
必须承认，linux的用户界面不够友好，这阻止了很多人学习使用linux，不过，当你度过了最初的阶段，当你学会了通过手册、internet、邮件列表来学习，当你接受了它的文化，你会觉得使用linux是很愉快的事，你也会体会到它的强大、便利、优美……<br />
当然，这一切需要付出，需要时间，你会体验到别扭、沮丧、失败，如果你能坚持下来，你就能达到</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：Easwy</title>
		<link>http://easwy.com/blog/archives/advanced-vim-skills-advanced-move-method/#comment-45</link>
		<dc:creator>Easwy</dc:creator>
		<pubDate>Fri, 13 Feb 2009 08:08:40 +0000</pubDate>
		<guid isPermaLink="false">http://easwy.com/blog/?p=173#comment-45</guid>
		<description>(以下为CSDN评论的转帖)

#leesnow1 发表于2007-09-24 16:08:05 IP: 218.20.59.*
非常感谢 楼主 给出的这些好文章！！！！

同时希望楼主 能够给出个实际用VIM+GCC+GDB编程的例子，就是一切编程操作向IDE一样，直接在VIM中进行，特别是关于调用GDB后如何在返回VIM进行程序编辑


#easwy 发表于2007-09-25 10:19:17 IP: 213.70.90.*
好的，我调整一下提纲，下一篇先写调试相关的主题。
不过工作中我用不到GDB调试，所以只是大概介绍一下，抛砖引玉。

#leesnow1 发表于2007-09-25 11:16:22 IP: 121.32.0.*
楼主 不是在做嵌入式开发的吗 编程环境是什么 不是VIM+GCC+GDB吗 难道语义错误都是靠人工解决的 ？ 我之前一直在VC环境下做开发 最近想向linux平台发展 楼主能否有好的意见</description>
		<content:encoded><![CDATA[<p>(以下为CSDN评论的转帖)</p>
<p>#leesnow1 发表于2007-09-24 16:08:05 IP: 218.20.59.*<br />
非常感谢 楼主 给出的这些好文章！！！！</p>
<p>同时希望楼主 能够给出个实际用VIM+GCC+GDB编程的例子，就是一切编程操作向IDE一样，直接在VIM中进行，特别是关于调用GDB后如何在返回VIM进行程序编辑</p>
<p>#easwy 发表于2007-09-25 10:19:17 IP: 213.70.90.*<br />
好的，我调整一下提纲，下一篇先写调试相关的主题。<br />
不过工作中我用不到GDB调试，所以只是大概介绍一下，抛砖引玉。</p>
<p>#leesnow1 发表于2007-09-25 11:16:22 IP: 121.32.0.*<br />
楼主 不是在做嵌入式开发的吗 编程环境是什么 不是VIM+GCC+GDB吗 难道语义错误都是靠人工解决的 ？ 我之前一直在VC环境下做开发 最近想向linux平台发展 楼主能否有好的意见</p>
]]></content:encoded>
	</item>
</channel>
</rss>

