<!--pulled in by kwrite too-->
<chapter id="vi-input-mode-chapter">
<chapterinfo>
<authorgroup
><author
>&Erlend.Hamberg; &Erlend.Hamberg.mail; </author>
<author
><firstname
>Henry</firstname
> <surname
>Hu</surname
></author
> 
</authorgroup>
</chapterinfo>

<title
>Vi 输入模式</title>

<sect1 id="vi-mode-sect1">
<title
>VI 输入模式</title>

<para
>VI 输入模式的目标并不是完全替换掉 Vim 并支持所有 Vim 的功能。他的目标是使得文字编辑的 <quote
>Vim 方法</quote
> ——以及习得的 Vim 习惯——对使用 &kappname; 文本编辑器作为它们内部编辑器的程序可用。</para>

<para
>VI 模式的目标为和程序完美整合，在有需要的时候偏离 Vim 的行为。例如，<userinput
><command
>:w</command
></userinput
>会在 &kappname; 的 VI 模式中打开一个保存对话框。</para>

<para
>要对所有新视图启用 VI 输入模式，打开 <menuchoice
><guimenu
>设置</guimenu
><guimenuitem
>配置 &kappname;...</guimenuitem
> <guimenu
>编辑</guimenu
><guimenuitem
>Vi 输入模式</guimenuitem
></menuchoice
>。在这个面板您可以设置 VI 输入模式的选项，以及定义和编辑这个模式下的按键映射。VI 输入模式也可以通过 <guimenu
>编辑</guimenu
> 菜单中的 <guimenuitem
>VI 输入模式</guimenuitem
> 选项来切换。(默认的快捷键是 <keycombo action="simul"
><keysym
>Meta</keysym
>&Ctrl;<keycap
>V</keycap
></keycombo
> —— 这里 <keysym
>Meta</keysym
> 一般是 <keysym
>Windows</keysym
> 键)。</para>

<note>
<para
>许多 Vi 模式的键盘命令是大小写敏感的，不像多数 &kde; 键盘快捷方式。也就是说，<userinput
>y</userinput
> 和 <userinput
>Y</userinput
> 是不同的命令。要输入 <userinput
>y</userinput
> (复制) 命令，请确认 <keysym
>Caps Lock</keysym
> 被关闭，然后按下 <keycap
>Y</keycap
>。要输入 <userinput
>Y</userinput
> (复制整行) 命令，<keycombo action="simul"
>&Shift;<keycap
>Y</keycap
></keycombo
>。</para>

<para
>这对使用 &Ctrl; 键的命令不适用，它们无论 <keycap
>Caps Lock</keycap
> 的状态为何以及 &Shift; 是否被按下都可以被输入。但是，有些命令需要先使用一个 &Ctrl;-按键 的组合，再输入一个其它按键，这些是大小写敏感的。例如，要输入 <quote
><keycombo action="simul"
>&Ctrl;<keycap
>W</keycap
></keycombo
>，<userinput
>h</userinput
></quote
> (切换到右边的分割视图)，首先确保 <keycap
>Caps Lock</keycap
> 处于关闭状态，再按下 <keycombo action="simul"
>&Ctrl;<keycap
>W</keycap
></keycombo
>，随后松开，再按下 <keycap
>H</keycap
>。</para>
</note>

<sect2 id="vi-incompatibilities">
<title
>与 Vim 的不兼容之处</title>

<para
>&kappname; 的 VI 模式只有少数和 Vim 不兼容的功能 (不算缺失功能)。接下来会列出它们以及相应的原因。</para>
<itemizedlist>
<listitem>
<para
>&kappname;: <userinput
>U</userinput
> 和 <keycombo action="simul"
>&Ctrl;<keycap
>R</keycap
></keycombo
> 可用于重做。</para>
<para
>Vim: <keycombo action="simul"
>&Ctrl;<keycap
>R</keycap
></keycombo
> 可用于一般重做，<keycap
>U</keycap
> 可用于撤销一行的所有最近改动。</para>
<para
>让 <keycap
>U</keycap
> 在 &kappname; 的模式中用作重做功能是因为默认情况下快捷方式<keycombo action="simul"
>&Ctrl;<keycap
>R</keycap
></keycombo
> 被用作 &kappname; 的替换功能 (查找并替换)。默认情况下，VI 模式不会覆盖 &kappname; 的快捷方式 (这可以在 <menuchoice
><guimenu
>设置</guimenu
> <guimenuitem
>配置&kappname;...</guimenuitem
> <guimenu
>编辑</guimenu
><guimenuitem
>Vi 输入模式</guimenuitem
></menuchoice
> 中配置)，因此重做功能也需要一个 <quote
>普通的</quote
> 按键。另外，<userinput
>U</userinput
> 命令在 Vim 中的行为并不能很好对应到 &kappname; 的内部重做系统，因此它总是很难被支持。</para>
</listitem>
<listitem>
<para
>&kappname;: <userinput
><command
>print</command
></userinput
> 显示 <guilabel
>打印</guilabel
> 对话框。</para>
<para
>Vim: <userinput
><command
>print</command
></userinput
> 打印选中范围的行，就像它的祖先 ed 一样。</para>
<para
>像 <userinput
><command
>:print</command
></userinput
> 这样的命令不仅在 VI 模式可用，在 <quote
>普通的</quote
> &kappname; 也可以使用——因此 <userinput
><command
>:print</command
></userinput
> 命令会打开一个打印对话框——遵循最少意外原则，而不是模仿 Vim 的行为。</para>
</listitem>
<listitem>
<para
>&kappname;：<userinput
>Y</userinput
> 复制到行的末尾。</para>
<para
>Vim：<userinput
>Y</userinput
> 复制整行，就像 <userinput
>y</userinput
><userinput
>y</userinput
> 一样。</para>
<para
>VI 的 <userinput
>Y</userinput
> 命令的行为实际上是个缺陷。对于修改和删除命令，<userinput
>c</userinput
><userinput
>c</userinput
>/<userinput
>d</userinput
><userinput
>d</userinput
> 会对当前行进行操作，而 <userinput
>C</userinput
>/<userinput
>D</userinput
> 会对从光标到行末的文字进行操作。但是，<userinput
>y</userinput
><userinput
>y</userinput
> 和 <userinput
>Y</userinput
> 都会复制整行。在 &kappname; 的 VI 模式下 <userinput
>Y</userinput
> 会复制到行末。这在 Vim 的 <ulink url="http://vimdoc.sourceforge.net/htmldoc/change.html#Y"
>文档</ulink
> 中被认为 <quote
>更符合逻辑</quote
>。 </para>
</listitem>
<listitem>
<para
>&kappname;：<userinput
>O</userinput
> 和 <userinput
>o</userinput
> 添加 [<replaceable
>数量</replaceable
>] 个新行，并进入插入模式。</para>
<para
>Vim：<userinput
>O</userinput
> 和 <userinput
>o</userinput
> 开始一个新行，并且将您在离开插入模式之前插入的文字重复 [<replaceable
>数量</replaceable
>] 次。</para>
<para
>这么做的主要原因是见到了许多人在 vim irc 频道 (freenode 上的 #vim) 中表示自己对这个行为表示疑惑。</para>
</listitem>
</itemizedlist>

</sect2>

<sect2 id="vi-switching-modes">
<title
>切换模式</title>

<itemizedlist>
<listitem>
<para
><emphasis
>普通模式</emphasis
> 使您可以通过输入命令来浏览或编辑文档，这也是默认的模式。您可以在任意其它模式下键入 &Esc; 来回到这个模式。 </para
></listitem>
<listitem>
<para
><emphasis
>可视模式</emphasis
> 使您可以高亮文档中的文字。多数普通模式中的命令在此模式下也可以使用。您可以通过键入 <userinput
>v</userinput
> 来选择文字，或者 <userinput
>V</userinput
> 来选择行。 </para
></listitem>
<listitem>
<para
><emphasis
>插入模式</emphasis
> 使您可以直接编辑文档。您可以通过按下 <userinput
>i</userinput
> 或以下列出的其它几个命令来进入这个模式。 </para
></listitem>
<listitem>
<para
><emphasis
>命令模式</emphasis
> 调出 &kappname; 的命令行，使您可以运行许多 Vi 实现中有的命令，以及某些 &kappname; 特定的命令。想要知道关于这些命令的更多信息，请参见 <xref linkend="advanced-editing-tools-commandline"/>。要使用它，按下 <keycap
>:</keycap
>，输入命令，随后按下 &Enter;。</para>
</listitem>
</itemizedlist>
<!-- add a picture like http://de.wikipedia.org/wiki/Vi#Arbeitsmodi here? -->
</sect2>

<sect2 id="vi-integration">
<title
>和 Kate 功能的集成</title>
<itemizedlist>

<listitem>
<para
>在鼠标选择文字时自动进入可视模式。它也会在使用 Kate 的选择文字功能时进入，例如“全部选中”(通过菜单，或者 <keycombo action="simul"
>&Ctrl;<keycap
>A</keycap
></keycombo
>。)</para>
</listitem>

<listitem>
<para
>Vi 标记和 <link linkend="kate-part-bookmarks"
>Kate 书签</link
> 已整合。当在 Vi 模式中创建一个标记，一个对应的 Kate 书签也会被同时创建并出现在 <guimenu
>书签</guimenu
> 菜单。对应地，当一个 Kate 书签被创建时，一个对应的在 0 列的 Vi 标记也会被同时创建。</para>
</listitem>

</itemizedlist>
</sect2>

<sect2 id="vi-normal-visual-mode-commands">
<title
>支持普通/可视模式命令</title>

<informaltable>
<tgroup cols="2">
<!--thead>
<row>
<entry
><para
>Key</para
></entry>
<entry
><para
>Command</para
></entry>
</row>
</thead-->
<tbody>
<row
><entry
><para
><userinput
>a</userinput
></para
></entry>
<entry
><para
>进入插入模式；在光标之后附加</para
></entry>
</row>
<row
><entry
><para
><userinput
>A</userinput
></para
></entry>
<entry
><para
>进入插入模式；在行之后附加</para
></entry>
</row>
<row
><entry
><para
><userinput
>i</userinput
></para
></entry>
<entry
><para
>进入插入模式；在光标之前插入</para
></entry>
</row>
<row
><entry
><para
><keycap
>Insert</keycap
></para
></entry>
<entry
><para
>进入插入模式；在光标之前插入</para
></entry>
</row>
<row
><entry
><para
><userinput
>I</userinput
></para
></entry>
<entry
><para
>进入插入模式；在行的第一个非空白字符前插入</para
></entry>
</row>
<row
><entry
><para
><userinput
>gi</userinput
></para
></entry>
<entry
><para
>进入插入模式；从上次离开插入模式的位置之前开始插入</para
></entry>
</row>
<row
><entry
><para
><userinput
>v</userinput
></para
></entry>
<entry
><para
>进入可视模式；选择字符</para
></entry>
</row>
<row
><entry
><para
><userinput
>V</userinput
></para
></entry>
<entry
><para
>进入可视模式；选择行</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>v</keycap
></keycombo
></para
></entry>
<entry
><para
>进入可视模式；选择块</para
></entry>
</row>
<row
><entry
><para
><userinput
>gb</userinput
></para
></entry>
<entry
><para
>进入可视模式；再次选择上次所选</para
></entry>
</row>
<row
><entry
><para
><userinput
>o</userinput
></para
></entry>
<entry
><para
>在当前行下插入新行</para
></entry>
</row>
<row
><entry
><para
><userinput
>O</userinput
></para
></entry>
<entry
><para
>在当前行上方插入新行</para
></entry>
</row>
<row
><entry
><para
><userinput
>J</userinput
></para
></entry>
<entry
><para
>连接多行</para
></entry>
</row>
<row
><entry
><para
><userinput
>c</userinput
></para
></entry>
<entry
><para
>修改：附加一个移动操作来删除所经之处并进入插入模式</para
></entry>
</row>
<row
><entry
><para
><userinput
>C</userinput
></para
></entry>
<entry
><para
>修改到行末：删除到行末并进入插入模式</para
></entry>
</row>
<row
><entry
><para
><userinput
>cc</userinput
></para
></entry>
<entry
><para
>修改整行：删除行并进入插入模式</para
></entry>
</row>
<row
><entry
><para
><userinput
>s</userinput
></para
></entry>
<entry
><para
>替换字符</para
></entry>
</row>
<row
><entry
><para
><userinput
>S</userinput
></para
></entry>
<entry
><para
>替换整行</para
></entry>
</row>
<row
><entry
><para
><userinput
>dd</userinput
></para
></entry>
<entry
><para
>删除整行</para
></entry>
</row>
<row
><entry
><para
><userinput
>d</userinput
></para
></entry>
<entry
><para
>附加一个移动操作来删除所经之处</para
></entry>
</row>
<row
><entry
><para
><userinput
>D</userinput
></para
></entry>
<entry
><para
>删除到行末尾</para
></entry>
</row>
<row
><entry
><para
><userinput
>x</userinput
></para
></entry>
<entry
><para
>删除光标右面的字符</para
></entry>
</row>
<row
><entry
><para
><keycap
>删除</keycap
></para
></entry>
<entry
><para
>删除光标右面的字符</para
></entry>
</row>
<row
><entry
><para
><userinput
>X</userinput
></para
></entry>
<entry
><para
>删除光标左面的字符</para
></entry>
</row>
<row
><entry
><para
><userinput
>gu</userinput
></para
></entry>
<entry
><para
>附加一个移动操作，将所经之处变为小写</para
></entry>
</row>
<row
><entry
><para
><userinput
>guu</userinput
></para
></entry>
<entry
><para
>将当前行变为小写</para
></entry>
</row>
<row
><entry
><para
><userinput
>gU</userinput
></para
></entry>
<entry
><para
>附加一个移动操作，将所经之处变为大写</para
></entry>
</row>
<row
><entry
><para
><userinput
>gUU</userinput
></para
></entry>
<entry
><para
>将当前行变为大写</para
></entry>
</row>
<row
><entry
><para
><userinput
>y</userinput
></para
></entry>
<entry
><para
>附加一个移动操作，<quote
>yank</quote
> (复制) 所经之处</para
></entry>
</row>
<row
><entry
><para
><userinput
>yy</userinput
></para
></entry>
<entry
><para
>Yank (复制) 行</para
></entry>
</row>
<row
><entry
><para
><userinput
>Y</userinput
></para
></entry>
<entry
><para
>Yank (复制) 行</para
></entry>
</row>
<row
><entry
><para
><userinput
>p</userinput
></para
></entry>
<entry
><para
>在光标后粘贴</para
></entry>
</row>
<row
><entry
><para
><userinput
>P</userinput
></para
></entry>
<entry
><para
>在光标前粘贴</para
></entry>
</row>
<row
><entry
><para
><userinput
>]p</userinput
></para
></entry>
<entry
><para
>在光标之后粘贴并缩进</para
></entry>
</row>
<row
><entry
><para
><userinput
>[p</userinput
></para
></entry>
<entry
><para
>在光标之前粘贴并缩进</para
></entry>
</row>
<row
><entry
><para
><userinput
>r</userinput
></para
></entry>
<entry
><para
>附加一个字符，将光标下的字符替换为它</para
></entry>
</row>
<row
><entry
><para
><userinput
>R</userinput
></para
></entry>
<entry
><para
>进入替换模式</para
></entry>
</row>
<row
><entry
><para
><userinput
>:</userinput
></para
></entry>
<entry
><para
>进入命令模式</para
></entry>
</row>
<row
><entry
><para
><userinput
>/</userinput
></para
></entry>
<entry
><para
>查找</para
></entry>
</row>
<row
><entry
><para
><userinput
>u</userinput
></para
></entry>
<entry
><para
>悔棋</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>R</keycap
></keycombo
></para
></entry>
<entry
><para
>重下</para
></entry>
</row>
<row
><entry
><para
><userinput
>U</userinput
></para
></entry>
<entry
><para
>重下</para
></entry>
</row>
<row
><entry
><para
><userinput
>m</userinput
></para
></entry>
<entry
><para
>设置标记 (能在之后用于移动)</para
></entry>
</row>
<row
><entry
><para
><userinput
>n</userinput
></para
></entry>
<entry
><para
>查找下一个</para
></entry>
</row>
<row
><entry
><para
><userinput
>N</userinput
></para
></entry>
<entry
><para
>查找上一个</para
></entry>
</row>
<row
><entry
><para
><userinput
>&gt;&gt;</userinput
></para
></entry>
<entry
><para
>缩进行</para
></entry>
</row>
<row
><entry
><para
><userinput
>&lt;&lt;</userinput
></para
></entry>
<entry
><para
>减少缩进行</para
></entry>
</row>
<row
><entry
><para
><userinput
>&gt;</userinput
></para
></entry>
<entry
><para
>缩进多行</para
></entry>
</row>
<row
><entry
><para
><userinput
>&lt;</userinput
></para
></entry>
<entry
><para
>减少缩进多行</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>F</keycap
></keycombo
></para
></entry>
<entry
><para
>下一页</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>B</keycap
></keycombo
></para
></entry>
<entry
><para
>上一页</para
></entry>
</row>
<row
><entry
><para
><userinput
>ga</userinput
></para
></entry>
<entry
><para
>输出字符的 ASCII 值</para
></entry>
</row>
<row
><entry
><para
><userinput
>.</userinput
></para
></entry>
<entry
><para
>重复上次变更</para
></entry>
</row>
<row
><entry
><para
><userinput
>==</userinput
></para
></entry>
<entry
><para
>对齐行</para
></entry>
</row>
<row
><entry
><para
><userinput
>=</userinput
></para
></entry>
<entry
><para
>对齐多行</para
></entry>
</row>
<row
><entry
><para
><userinput
>~</userinput
></para
></entry>
<entry
><para
>改变当前字符的大小写</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>S</keycap
></keycombo
></para
></entry>
<entry
><para
>水平分割视图</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>V</keycap
></keycombo
></para
></entry>
<entry
><para
>垂直分割视图</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl; <keycap
>W</keycap
></keycombo
>, <userinput
>w</userinput
></para
></entry>
<entry
><para
>切换到下一个分割的窗口</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl; <keycap
>W</keycap
></keycombo
>, <userinput
>h</userinput
></para>
<para
><keycombo action="seq"
><keycombo action="simul"
>&Ctrl; <keycap
>W</keycap
></keycombo
><keysym
>左</keysym
></keycombo
></para
></entry>
<entry
><para
>移动到左边的分割窗口</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl; <keycap
>W</keycap
></keycombo
>, <userinput
>l</userinput
></para>
<para
><keycombo action="seq"
><keycombo action="simul"
>&Ctrl; <keycap
>W</keycap
></keycombo
><keysym
>右</keysym
></keycombo
></para
></entry>
<entry
><para
>移动到右边的分割窗口</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl; <keycap
>W</keycap
></keycombo
>, <userinput
>k</userinput
></para>
<para
><keycombo action="seq"
><keycombo action="simul"
>&Ctrl; <keycap
>W</keycap
></keycombo
><keysym
>上</keysym
></keycombo
></para
></entry>
<entry
><para
>移动到上边的分割窗口</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl; <keycap
>W</keycap
></keycombo
>, <userinput
>j</userinput
></para>
<para
><keycombo action="seq"
><keycombo action="simul"
>&Ctrl; <keycap
>W</keycap
></keycombo
><keysym
>下</keysym
></keycombo
></para
></entry>
<entry
><para
>移动到下边的分割窗口</para
></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>

<sect2 id="vi-supported-motions">
<title
>支持的移动</title>

<para
>这些可用于在普通模式或可视模式时在文档中移动，或者和以上命令配合使用。它们前面可以附带一个数量，用于表示要进行多少次这样的移动。</para>

<informaltable>
<tgroup cols="2">
<!--thead>
<row>
<entry
><para
>Key</para
></entry>
<entry
><para
>Command</para
></entry>
</row>
</thead-->
<tbody>
<row
><entry
><para
><userinput
>h</userinput
></para
></entry>
<entry
><para
>左</para
></entry>
</row>
<row
><entry
><para
><keysym
>左</keysym
></para
></entry>
<entry
><para
>左</para
></entry>
</row>
<row
><entry
><para
>&Backspace;</para
></entry>
<entry
><para
>左</para
></entry>
</row>
<row
><entry
><para
><userinput
>j</userinput
></para
></entry>
<entry
><para
>下</para
></entry>
</row>
<row
><entry
><para
><keysym
>下</keysym
></para
></entry>
<entry
><para
>下</para
></entry>
</row>
<row
><entry
><para
><userinput
>k</userinput
></para
></entry>
<entry
><para
>上</para
></entry>
</row>
<row
><entry
><para
><keysym
>上</keysym
></para
></entry>
<entry
><para
>上</para
></entry>
</row>
<row
><entry
><para
><userinput
>l</userinput
></para
></entry>
<entry
><para
>右</para
></entry>
</row>
<row
><entry
><para
><keysym
>右</keysym
></para
></entry>
<entry
><para
>右</para
></entry>
</row>
<row
><entry
><para
><keysym
>间距</keysym
></para
></entry>
<entry
><para
>右</para
></entry>
</row>
<row
><entry
><para
><userinput
>$</userinput
></para
></entry>
<entry
><para
>行尾</para
></entry>
</row>
<row
><entry
><para
><keycap
>End</keycap
></para
></entry>
<entry
><para
>行尾</para
></entry>
</row>
<row
><entry
><para
><userinput
>0</userinput
></para
></entry>
<entry
><para
>行的首字符 (列0)</para
></entry>
</row>
<row
><entry
><para
><keycap
>Home</keycap
></para
></entry>
<entry
><para
>行的首字符</para
></entry>
</row>
<row
><entry
><para
><userinput
>^</userinput
></para
></entry>
<entry
><para
>行的第一个非空白字符</para
></entry>
</row>
<row
><entry
><para
><userinput
>f</userinput
></para
></entry>
<entry
><para
>跟随一个字符，移动到该字符右边</para
></entry>
</row>
<row
><entry
><para
><userinput
>F</userinput
></para
></entry>
<entry
><para
>跟随一个字符，移动到该字符左边</para
></entry>
</row>
<row
><entry
><para
><userinput
>t</userinput
></para
></entry>
<entry
><para
>跟随一个字符，移动到它位于光标右边，将光标置于它前面的字符</para
></entry>
</row>
<row
><entry
><para
><userinput
>T</userinput
></para
></entry>
<entry
><para
>跟随一个字符，移动到它位于光标左边，将光标置于它之前的字符</para
></entry>
</row>
<row
><entry
><para
><userinput
>gg</userinput
></para
></entry>
<entry
><para
>到第一行</para
></entry>
</row>
<row
><entry
><para
><userinput
>G</userinput
></para
></entry>
<entry
><para
>到最后一行</para
></entry>
</row>
<row
><entry
><para
><userinput
>w</userinput
></para
></entry>
<entry
><para
>到下一个词</para
></entry>
</row>
<row
><entry
><para
><userinput
>W</userinput
></para
></entry>
<entry
><para
>到下一个用空格分隔的词</para
></entry>
</row>
<row
><entry
><para
><userinput
>b</userinput
></para
></entry>
<entry
><para
>到上一个词</para
></entry>
</row>
<row
><entry
><para
><userinput
>B</userinput
></para
></entry>
<entry
><para
>到上一个用空格分隔的词</para
></entry>
</row>
<row
><entry
><para
><userinput
>e</userinput
></para
></entry>
<entry
><para
>到词最后</para
></entry>
</row>
<row
><entry
><para
><userinput
>E</userinput
></para
></entry>
<entry
><para
>到词结尾，词以空格分隔</para
></entry>
</row>
<row
><entry
><para
><userinput
>ge</userinput
></para
></entry>
<entry
><para
>到上一个词末尾</para
></entry>
</row>
<row
><entry
><para
><userinput
>gE</userinput
></para
></entry>
<entry
><para
>到上一个用空格分隔的词的末尾</para
></entry>
</row>
<row
><entry
><para
><userinput
>|</userinput
></para
></entry>
<entry
><para
>附加一个列号来移动到那个列</para
></entry>
</row>
<row
><entry
><para
><userinput
>%</userinput
></para
></entry>
<entry
><para
>附加一个项目来移动到那个项目</para
></entry>
</row>
<row
><entry
><para
><userinput
>`</userinput
></para
></entry>
<entry
><para
>标记</para
></entry>
</row>
<row
><entry
><para
><userinput
>‘</userinput
></para
></entry>
<entry
><para
>标记所在行的第一个非空白字符</para
></entry>
</row>
<row
><entry
><para
><userinput
>[[</userinput
></para
></entry>
<entry
><para
>上一个左括号</para
></entry>
</row>
<row
><entry
><para
><userinput
>]]</userinput
></para
></entry>
<entry
><para
>下一个左括号</para
></entry>
</row>
<row
><entry
><para
><userinput
>[]</userinput
></para
></entry>
<entry
><para
>上一个右括号</para
></entry>
</row>
<row
><entry
><para
><userinput
>][</userinput
></para
></entry>
<entry
><para
>下一个右括号</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>I</keycap
></keycombo
></para
></entry>
<entry
><para
>向前跳到下一个位置</para
></entry
></row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>O</keycap
></keycombo
></para
></entry>
<entry
><para
>向后跳到前一个位置</para
></entry
></row>
<row
><entry
><para
><userinput
>H</userinput
></para
></entry>
<entry
>跳到屏幕上的第一行</entry
></row>
<row
><entry
><para
><userinput
>M</userinput
></para
></entry>
<entry
>跳到屏幕上的中间行</entry
></row>
<row
><entry
><para
><userinput
>L</userinput
></para
></entry>
<entry
>跳到屏幕上的最后一行</entry
></row>
<row
><entry
><para
><userinput
>%<replaceable
>百分比</replaceable
></userinput
></para
></entry>
<entry
><para
>跳到文档的指定百分比处</para
></entry
></row>
<row
><entry
><para
><userinput
>gk</userinput
></para
></entry>
<entry
><para
>上移一可视行 (当使用动态换行时)</para
></entry
></row>
<row
><entry
><para
><userinput
>gj</userinput
></para
></entry>
<entry
><para
>下移一可视行 (当使用动态换行时)</para
></entry
></row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>左</keycap
></keycombo
></para
></entry>
<entry
><para
>左移一个单词</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>右</keycap
></keycombo
></para
></entry>
<entry
><para
>右移一个单词</para
></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>

<sect2 id="vi-supported-text-objects">
<title
>支持的文字对象</title>

<para
>这些可以用来选择文档的一部分。</para>

<informaltable>
<tgroup cols="2">
<!--thead>
<row>
<entry
><para
>Key</para
></entry>
<entry
><para
>Command</para
></entry>
</row>
</thead-->
<tbody>
<row
><entry
><para
><userinput
>iw</userinput
></para
></entry>
<entry
><para
>内部词：包括空白的词</para
></entry>
</row>
<row
><entry
><para
><userinput
>aw</userinput
></para
></entry>
<entry
><para
>单个词：不包括空白的词</para
></entry>
</row>
<row
><entry
><para
><userinput
>i"</userinput
></para
></entry>
<entry
><para
>上一个双引号 (<userinput
>"</userinput
>) 到下一个双引号，包括引号</para
></entry>
</row>
<row
><entry
><para
><userinput
>a”</userinput
></para
></entry>
<entry
><para
>上一个双引号 (<userinput
>"</userinput
>) 到下一个双引号，不包括引号</para
></entry>
</row>
<row
><entry
><para
><userinput
>i'</userinput
></para
></entry>
<entry
><para
>上一个单引号 (<userinput
>'</userinput
>) 到下一个单引号，包括引号</para
></entry>
</row>
<row
><entry
><para
><userinput
>a'</userinput
></para
></entry>
<entry
><para
>上一个单引号 (<userinput
>'</userinput
>) 到下一个单引号，不包括引号</para
></entry>
</row>
<row
><entry
><para
><userinput
>i(</userinput
></para
></entry>
<entry
><para
>上一个左括号“<userinput
>(</userinput
>”到下一个右括号“<userinput
>)</userinput
>”，包括括号本身</para
></entry>
</row>
<row
><entry
><para
><userinput
>a(</userinput
></para
></entry>
<entry
><para
>上一个左括号“<userinput
>(</userinput
>”到下一个右括号“<userinput
>)</userinput
>”，不包括括号本身</para
></entry>
</row>
<row
><entry
><para
><userinput
>i[</userinput
></para
></entry>
<entry
><para
>上一个左方括号 (<userinput
>[</userinput
>) 到下一个右方括号 (<userinput
>]</userinput
>)，包括括号本身</para
></entry>
</row>
<row
><entry
><para
><userinput
>a[</userinput
></para
></entry>
<entry
><para
>上一个左方括号 (<userinput
>[</userinput
>) 到下一个右方括号 (<userinput
>]</userinput
>)，不包括括号本身</para
></entry>
</row>
<row
><entry
><para
><userinput
>i{</userinput
></para
></entry>
<entry
><para
>上一个左大括号 (<userinput
>{</userinput
>) 到下一个右大括号 (<userinput
>}</userinput
>)，包括括号本身</para
></entry>
</row>
<row
><entry
><para
><userinput
>a{</userinput
></para
></entry>
<entry
><para
>上一个左大括号 (<userinput
>{</userinput
>) 到下一个右大括号 (<userinput
>}</userinput
>)，不包括括号本身</para
></entry>
</row>
<row
><entry
><para
><userinput
>i&lt;</userinput
></para
></entry>
<entry
><para
>上一个左尖括号 (<userinput
>&lt;</userinput
>) 到下一个右尖括号 (<userinput
>&gt;</userinput
>)，包括括号本身</para
></entry>
</row>
<row
><entry
><para
><userinput
>a&lt;</userinput
></para
></entry>
<entry
><para
>上一个左尖括号 (<userinput
>&lt;</userinput
>) 到下一个右方括号 (<userinput
>&gt;</userinput
>)，不包括括号本身</para
></entry>
</row>
<row
><entry
><para
><userinput
>i`</userinput
></para
></entry>
<entry
><para
>上一个反引号 (<userinput
>`</userinput
>) 到下一个反引号，包括引号本身</para
></entry>
</row>
<row
><entry
><para
><userinput
>a`</userinput
></para
></entry>
<entry
><para
>上一个反引号 (<userinput
>`</userinput
>) 到下一个反引号，不包括引号本身</para
></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>

<sect2 id="vi-insert-mode-commands">
<title
>支持的插入模式命令</title>

<informaltable>
<tgroup cols="2">
<!--thead>
<row>
<entry
><para
>Key</para
></entry>
<entry
><para
>Command</para
></entry>
</row>
</thead-->
<tbody>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>D</keycap
></keycombo
></para
></entry>
<entry
><para
>减少缩进</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>T</keycap
></keycombo
></para
></entry>
<entry
><para
>缩进</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>E</keycap
></keycombo
></para
></entry>
<entry
><para
>在下方插入</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>Y</keycap
></keycombo
></para
></entry>
<entry
><para
>删除词</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>W</keycap
></keycombo
></para
></entry>
<entry
><para
>删除词</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>U</keycap
></keycombo
></para
></entry>
<entry
><para
>删除整行</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>J</keycap
></keycombo
></para
></entry>
<entry
><para
>新行</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>H</keycap
></keycombo
></para
></entry>
<entry
><para
>反向删除字符</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>Home</keycap
></keycombo
></para
></entry>
<entry
><para
>回到文档的第一个字符</para
></entry>
</row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>R</keycap
></keycombo
> <userinput
>n</userinput
></para
></entry>
<entry
>插入寄存器 <literal
>n</literal
> 的内容</entry
></row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>O</keycap
></keycombo
>, <replaceable
>命令</replaceable
></para
></entry>
<entry
><para
>进入普通模式，仅限一个命令</para
></entry
></row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>A</keycap
></keycombo
></para
></entry>
<entry
><para
>增加当前选中的数字</para
></entry
></row>
<row
><entry
><para
><keycombo action="simul"
>&Ctrl;<keycap
>X</keycap
></keycombo
></para
></entry>
<entry
><para
>减少当前选中的数字</para
></entry
></row>
</tbody>
</tgroup>
</informaltable>
</sect2>

<sect2 id="vi-text-object">
<title
>逗号文本对象</title>

<para
>这个对象在 Vim 中不存在。逗号文本对象让修改类似 C 的语言中的参数列表以及其它逗号分隔的列表变得容易。它基本就是两个逗号之间的区域，或者逗号和括号之间的区域。在样例显示的行中，这个文本对象能够覆盖的三个范围已被高亮显示。</para>

<screenshot id="screenshot-resources">
<screeninfo
>逗号文本对象样例</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="comma-to.png" format="PNG"/></imageobject>
<textobject
><phrase
>逗号文本对象样例</phrase
></textobject>
<caption
><para
>逗号文本对象范围。比如如果光标在 <replaceable
>arg2</replaceable
> 上，输入 <userinput
>ci</userinput
>，(<quote
>改变到逗号内部</quote
>) 会删除 <replaceable
>double arg2</replaceable
> 并将光标以插入模式置于两个逗号之间。这是一种很方便地修改函数参数的方法。</para
></caption>
</mediaobject>
</screenshot>

</sect2>

<sect2 id="vi-missing-features">
<title
>缺失的功能</title>

<para
>如前所述，&kappname; VI 模式的目标并不是要支持 Vim 100% 的功能。</para>
</sect2>

</sect1>

</chapter>
