﻿<?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++博客-It Smils-随笔分类-VIM</title><link>http://www.cppblog.com/ronliu/category/8781.html</link><description>思绪的自留地</description><language>zh-cn</language><lastBuildDate>Mon, 10 Nov 2008 06:36:47 GMT</lastBuildDate><pubDate>Mon, 10 Nov 2008 06:36:47 GMT</pubDate><ttl>60</ttl><item><title>vim命令</title><link>http://www.cppblog.com/ronliu/archive/2008/11/10/66499.html</link><dc:creator>ronliu</dc:creator><author>ronliu</author><pubDate>Mon, 10 Nov 2008 03:37:00 GMT</pubDate><guid>http://www.cppblog.com/ronliu/archive/2008/11/10/66499.html</guid><wfw:comment>http://www.cppblog.com/ronliu/comments/66499.html</wfw:comment><comments>http://www.cppblog.com/ronliu/archive/2008/11/10/66499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ronliu/comments/commentRss/66499.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ronliu/services/trackbacks/66499.html</trackback:ping><description><![CDATA[<p><a name=table1><strong>表 1. 用于移动光标的 Vim 命令</strong></a>
<p>命令<br>动作
<p>h<br>将光标向左移动
<p>j、加号 (+)、Enter 或 Return<br>将光标向下移动
<p>k、减号 (-)<br>将光标向上移动
<p>l<br>将光标向右移动
<p>}<br>将光标移动到当前段落的末尾
<p>{<br>将光标移动到当前段落的开头
<p>)<br>将光标移动到当前句子的末尾
<p>(<br>将光标移动到当前句子的开头
<p>^<br>移动到当前行的第一个非空字符
<p>$<br>移动到当前行末尾
<p>0 (zero)<br>移动到当前行开头
<p>w or W<br>移动到下一单词的开头
<p>b or B<br>移动到上一单词的开头
<p>e<br>移动到下一单词的末尾
<p>H<br>移动到屏幕的第一行
<p>M<br>移动到屏幕的中间一行
<p>L<br>移动到屏幕的最后一行
<p>G<br>移动到文件末尾
<p>gg<br>移动到文件开头
<p>:n<br>移动到行 <em>n</em>
<p>表 2 显示了用于删除文本的 Vim 命令。
<p><a name=table2><strong>表 2. 用于删除文本的 Vim 命令</strong></a>
<p>命令<br>动作
<p>d<br>删除选中的区域
<p>dd<br>删除整个当前行
<p>10dd<br>删除从当前行开始的 10 行，
<p>dw<br>从当前位置向前删除单词
<p>db<br>从当前光标位置左边开始向后删除单词
<p>dl<br>删除当前光标位置的字符
<p>dh<br>删除当前光标位置左边的字符
<p>d0 (zero)<br>删除当前光标位置到行开头之间的单词
<p>D | d$<br>删除从当前光标位置开始的整个行
<p>x<br>删除光标当前位置的字符
<p>X<br>删除光标当前位置之前的字符
<p>表 3 提供了其他几个有用的 Vim 命令。
<p><a name=table3><strong>表 3. 常用 Vim 命令</strong></a>
<p>命令<br>动作
<p>ih<br>进入插入模式并在当前光标处插入
<p>I<br>进入插入模式并在当前行的开始处插入
<p>a<br>进入插入模式并追加到光标后面
<p>A<br>进入插入模式并追加到当前行末尾
<p>c<br>更改选中的区域
<p>C<br>更改从光标当前位置开始的整个行
<p>o<br>在光标当前所在行下方创建一个新空行，并将光标移动到这一新空行的开头
<p>O<br>在光标当前所在行的上方创建一个新空行，并将光标移动到这一新空行的开头
<p>r<br>替换光标当前位置的单个字符
<p>R<br>替换从光标当前位置开始的多个字符，并在退出插入模式时结束
<p>&lt;Esc&gt;<br>退出插入或可视模式
<p>&gt; or &lt;Tab&gt;<br>向选中区域右边缩进
<p>&lt;<br>向选中区域左边缩进
<p>v<br>启动时突出显示字符
<p>V<br>启动时突出显示的整个行
<p>yy<br>将当前行移动/复制到内存
<p>10yy<br>将从当前行开始的 10 行移动/复制到内存
<p>p<br>粘贴复制或剪切的文本；如果字符被复制（<code>yw</code> <code>dw</code> 或 <code>D</code>），就在光标当前位置之后粘贴这些字符。如果复制的是行，就在光标当前所在的行下面粘贴这些行
<p>P<br>作用和 <code>p</code> 一样，但是它在光标当前位置的前面粘贴字符，在光标当前所在行上面粘贴行
<p>u<br>撤消最后的更改
<p>&lt;Ctrl&gt; R<br>重做
<p>/&lt;pattern&gt;<br>搜索已找到的下一个模式，并将光标放在已找到的模式的开头
<p>?&lt;pattern&gt;<br>搜索已找到的上一个模式，并将光标放在已找到的模式的开头
<p>n<br>重复上一次的搜索
<p>N<br>重复上一次的搜索，但搜索的方向相反
<p>!&lt;cmd&gt;<br>在 Vim 会话外执行 <code>&lt;cmd&gt;</code>
<p><img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" height=1><br><img border=0 alt="" src="http://www.ibm.com/i/c.gif" width=8 height=6>
<p><img alt="" src="http://www.ibm.com/i/c.gif" width="100%" height=4>
<p><img border=0 alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width=16 height=16><br><a href="http://www.ibm.com/#main"><strong>回页首</strong></a>
<p><a name=linemode>行模式</a>
<p>尽管广泛使用的是命令和插入模式，但行模式同样重要，只是有时候没有被充分理解和使用。行模式进入行编辑器，使您可以在一行或多行上处理命令。考虑到 vi 以 ex 编辑器命名，所以它只适合进入 ex 编辑器的行模式。
<p>要从命令模式进入行模式，输入冒号（<code>:</code>）即可。然后将光标移动到窗口左下角。继续输入时，所有文本都会出现在窗口底部的冒号后面。单击 <strong>Enter</strong>，开始计算和执行行模式命令。如果确定不执行在行模式下输入的行，则单击 <strong>Escape</strong> 返回到命令模式。
<p>使用编辑器的行模式时，请记住两种命令样式。首先，在输入命令时，vi 或 Vim 按原样执行命令。如果执行的命令与修改数据有关，当前行就是目标。但是，使用第二种方法可以提供行数以处理指定的行。要输入行，请在冒号后面输入要处理的行数或行范围，并用逗号（<code>,</code>）分隔开始和结束范围。
<p>例如，如果只处理行 23，那么命令以 <code>:23</code> 开始。如果要修改 2319 到 3819 之间的行，则输入 <code>:2319,3819</code>。要处理从行 45 开始到文件结尾之间的一个命令，需要将最后行的参数替换为美元符号（<code>$</code>）— 即 <code>:45,$</code>。
<p>以下命令只是可以在行模式下执行的最基本命令：
<ul>
    <li><strong><code>:w &lt;file name&gt;</code>：</strong>将文件写入磁盘。如果提供一个参数，编辑器会试图将数据写入 &lt;file name&gt;。
    <p><strong>注意：</strong>如果提供一个参数，而且存在 &lt;file name&gt;，编辑器不会覆盖现有文件的数据。</p>
    <li><strong><code>:w! &lt;file name&gt;</code>：</strong>将文件写入磁盘并覆盖文件中的所有数据。
    <li><strong><code>:&lt;x&gt;,&lt;y&gt; w &lt;file name&gt;</code>：</strong>将从 &lt;x&gt; 到 &lt;y&gt; 之间的行写入 &lt;file name&gt;。
    <li><strong><code>:q</code>：</strong>试图在不保存的情况下退出编辑器。
    <p><strong>注意：</strong>如果数据已修改，则需要先保存文件再退出编辑器，否则将导致文件未被保存。</p>
    <li><strong><code>:q!</code>：</strong>退出编辑器，不将文件写入磁盘。
    <li><strong><code>:n</code>：</strong>如果编辑多个文件，首先编辑编辑列表中的下一个文件。
    <li><strong><code>:e &lt;file name&gt;</code>：</strong>编辑 &lt;file name&gt;。
    <li><strong><code>:e#</code>：</strong>如果编辑两个文件，则在两个文件之间切换。
    <li><strong><code>:s/&lt;str1&gt;/&lt;str2&gt;/</code>：</strong>用当前行中的 &lt;str2&gt; 替换第一次出现的 &lt;str1&gt;。
    <li><strong><code>:1,$ s/&lt;str1&gt;/&lt;str2&gt;/g</code>：</strong>从行 1 开始，在整个文件中执行，用 &lt;str2&gt; 替换所有的 &lt;str1&gt;。
    <li><strong><code>:r &lt;file name&gt;</code>：</strong>将 &lt;file name&gt; 读入当前编辑器会话中。
    <li><strong><code>:&lt;x&gt;,&lt;y&gt; d</code>：</strong>删除从 &lt;x&gt; 到 &lt;y&gt; 之间的行。
    <li><strong><code>:&lt;x&gt;,&lt;y&gt; y</code>：</strong>复制从 &lt;x&gt; 到 &lt;y&gt; 之间的行。</li>
</ul>
<img src ="http://www.cppblog.com/ronliu/aggbug/66499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ronliu/" target="_blank">ronliu</a> 2008-11-10 11:37 <a href="http://www.cppblog.com/ronliu/archive/2008/11/10/66499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>