2. 四处移动。

2.1. w, e 和 b 键

可以使用 w, eb 键在文件中移动。VIM 能够识别 C 表达式中不同的标记。

考虑以下 C 代码

图 1. 一段 C 代码

 
		  ...
		  if(( NULL == x ) && y > z )
		  ...
	       

假设光标位于 if 语句的开头。按一次 w 键,光标会跳到第一个 (。再次输入 w,光标会移动到 NULL。下一次光标将移动到 == 标记。进一步的按键将带您按如下方式移动。 x... )... &&... y... >... z... 最后 )...

e 类似于 w,只是它将您带到当前单词的末尾,而不是下一个单词的开头。

b 的作用与 w 完全相反。它沿相反方向移动光标。因此,您可以使用 b 键向后移动。

2.2. {, }, [[ 和 ]] 键

{} 键用于在段落之间移动。在编辑 C 文件时,这些键具有略微不同的含义。这里,段落被视为由空行分隔的一组行。

例如

图 2. 另一段 C 代码

上面的代码片段显示了两个段落。通过使用 {} 键,可以轻松地从一个段落的开头移动到另一个段落的开头。{ 将把光标带到上面的段落,而 } 将把光标带到下面的段落。

许多人的编码风格是将一组逻辑语句组合在一起,并用一个或多个空行分隔。

例如

图 3. 另一段 C 代码

{} 键在这种情况下非常有用。可以非常容易地从一个“段落”移动到另一个“段落”。

另一组有用的键是 [[]] 键。这些键允许您跳转到前一个 { 或后一个 { (在第一列中)。

例如

图 4. 下一段 C 代码

假设您正在编辑 foo(),现在您想编辑 bar()。只需键入 ]],光标就会将您带到 bar() 函数的开头 {。反向操作略有不同。如果您在 bar() 的中间,并且您键入 [[,光标将移动到上面的第一个 {,即 bar() 本身的开头。必须再次键入 [[ 才能移动到 foo() 的开头。可以通过键入 2[[ 将光标移动到上一个函数的开头,从而最大限度地减少按键次数。

另一组类似的键是 ][[] 键。][ 将光标移动到第一列中的下一个 }。如果您正在编辑 foo() 并想转到 foo() 的末尾,那么 ][ 会将您带到那里。同样,如果您正在编辑 bar() 并想转到 foo() 的末尾,那么 [] 会将光标带到那里。

记住这些键的方法是将它们分解。第一个键将指示是向上还是向下移动。[ 将向上移动,而 ] 将向下移动。下一个键指示要匹配的括号类型。如果它与前一个键相同,则光标将移动到 {。如果键不同,则光标将移动到 }。

关于 ]], ][, [[[] 键的一个注意事项是,它们匹配 第一列中的括号。如果想要匹配所有向上和向下的括号,而不管它是否在第一列中,这是不可能的。VIM 文档有一个解决方法。必须映射键才能找到括号。在不花费太多时间进行映射的情况下,建议的映射是

:map [[ ?{<CTRL-VCTRL-M>w99[{

:map ][ /}<CTRL-VCTRL-M>b99]}

:map ]] j0[[%/{<CTRL-VCTRL-M>

:map [] k$][%?}<CTRL-VCTRL-M>

2.3. % 键

% 用于匹配光标下的项目。光标下的项目可以是括号、花括号或方括号。通过按 % 键,光标将跳转到相应的匹配项。

除此之外,% 键还可以用于匹配 #if, #ifdef, #else #elif 和 #endif。

此键在验证已编写的代码时非常有用。例如

图 5. 下一段 C 代码

检查上面的代码将涉及检查括号的正确性。% 可用于从一个 ( 跳转到其对应的 ),反之亦然。因此,可以找到哪个左括号对应于哪个右括号,并使用该信息来验证代码。

类似地,% 也可用于从 { 跳转到其对应的 }。