2007
07-05

本章提供足够的信息使你用够使用 Vim 来做基本的编辑。这里提供的方法不一定是高效
快捷的。但起码是有效的。花些时间去练习这些命令,这是后面的知识的基础。


|02.1|  第一次运行 Vim
|02.2|  插入文本
|02.3|  移动光标
|02.4|  删除字符
|02.5|  撤销与重做
|02.6|  其它编辑命令
|02.7|  退出
|02.8|  寻求帮助


    下一章:|usr_03.txt| 移动
    前一章:|usr_01.txt| 关于本手册
      目录:|usr_toc.txt|


 


——————————————————————————–


*02.1*  第一次运行 Vim


启动 Vim 的命令如下:


        gvim file.txt


在 UNIX 操作系统中,你可以在任意命令提示符下输入这个命令。如果你用的是 Microsoft
Windows, 启动一个 MS-DOS 窗口,再输入这个命令。
    无论哪一种方式,现在 Vim 开始编辑一个名为 file.txt 的文件了。由于这是一个新建
文件,你会得到一个空的窗口。屏幕看起来会象下面这样:


        +—————————————+
        |#                                      |
        |~                                      |
        |~                                      |
        |~                                      |
        |~                                      |
        |”file.txt” [New file]                  |
        +—————————————+
                (‘#”是当前光标的位置)


以波纹线(~)开头的行表示该行在文件中不存在。换句话说,如果 Vim 打开的文件不能充满
这个显示的屏幕,它就会显示以波纹线开头的行。在屏幕的底部,有一个消息行指示文件
名为 file.txt 并且说明这是一个新建的文件。这行信息是临时的,新的信息可以覆盖它。



VIM 命 令


gvim 命令建立一个新窗口用于编辑。如果你用的是这个命令:


        vim file.txt


则编辑在命令窗口内进行。换句话说,如果你在 xterm 中运行,编辑器使用 xterm 窗口。
如果你用的是 Microsoft Window 的 MS-DOS 窗口,编辑器使用这个 MS-DOS 窗口。两个
版本显示出来的文本看起来是一样的。但如果你用的是 gvim,就会有其他特性,如菜单条。
后面会有更多的描述。


 


——————————————————————————–


*02.2*  插入文本


Vim 是一个多模式的编辑器。就是说,在不同模式下,编辑器的响应是不同的。在普通模式
下,你敲入的字符只是命令;而在插入模式,你敲入的字符就成为插入的文本了。
    当你刚刚进入 Vim,它处在普通模式。通过敲入”i”命令(i是 Insert 的缩写)可以启动
插入模式,这样你就可以输入文字了,这些文字将被插入到文件中。不用担心输错了, 你还
能够随后修正它。要输入下文的程序员打油诗,你可以这样敲:


        iA very intelligent turtle
        Found programming UNIX a hurdle


输入”turtle”后,你通过输入回车开始一个新行。最后,你输入 <Esc> 键退出插入模式而
回到普通模式。现在在你的 Vim 窗口中就有两行文字了:


        +—————————————+
        |A very intelligent turtle              |
        |Found programming UNIX a hurdle        |
        |~                                      |
        |~                                      |
        |                                       |
        +—————————————+



我 在 什 么 模 式?


要看到你在什么模式,输入如下命令:


        :set showmode


你会发现当你敲入冒号后,Vim 把光标移到窗口的最后一行。那里是你输入“冒号命令”
(以冒号开头的命令)的地方,敲入回车结束这个命令的输入(所有的冒号命令都用
这种方式结束)。
    现在,如果你输入 “i” 命令,Vim 会在窗口的底部显示 –INSERT–(中文模式
显示的是–插入– —— 译者注),这表示你在插入模式。


        +—————————————+
        |A very intelligent turtle              |
        |Found programming UNIX a hurdle        |
        |~                                      |
        |~                                      |
        |– INSERT –                           |
        +—————————————+


如果你输入<Esc>回到普通模式,最后一行又变成空白。



解 决 问 题


Vim 新手常常遇到的一个问题是不知道自己在什么模式下,可能是因为忘了,也可能
是因为不小心敲了一个切换模式的命令。无论你在什么模式,要回到普通模式,只
要敲 <Esc> 就可以了。有时你需要敲两次,如果 Vim 发出“嘀”一声,就表示你已经
在普通模式了。


 


——————————————————————————–


*02.3*  移动光标


回到普通模式后,你可以使用如下命令移动光标:


        h       左                                              *hjkl*
        j       下
        k       上
        l       右


这些命令看起来是随便选的。无论如何,谁听说过用 l 表示右的?但实际上,作这些选择
是有理由的:移动光标是最常用的编辑器命令。而这些键位是在你本位的右手。也就是说:
这种键位的设定使你可以以最快的速度执行移动操作(特别是当你用十指输入的时候)。


        Note:
        你还可以用方向键移动光标,但这样会减慢你输入的速度,因为你必须把你的手从
        字母键移动到方向键。想象一下,你在一个小时内可要这样做几百次,这可要花
        相当多的时间的。
            而且,有一些键盘是没有方向键的,或者放在一些很特别的地方。所以,
        知道 hjkl 的用法在这些情况下就很有帮助了。


记住这些命令的一个方法是:h 在左边,l 在右边,j 指着下面。用图表示如下:


                       k
                   h     l
                     j


学习这些命令的最好方法是使用它。用 “i” 命令输入更多的文字。然后用 hjkl 键移动
光标并在某些地方输入一些单词。别忘了用 <Esc> 切换回普通模式。|vimtutor|也是一个
练习的好办法。


 


——————————————————————————–


*02.4*  删除字符


要删除一个字符,把光标移到它上面然后输入 “x”。(这是对以前的打字机的一种回归,
那时你通过在字符上输入xxxx删除它) 例如,把光标移到行首,然后输入xxxxxxx(七个x)
可以删除 “A very”。结果看起来这样:


        +—————————————+
        |intelligent turtle                     |
        |Found programming UNIX a hurdle        |
        |~                                      |
        |~                                      |
        |                                       |
        +—————————————+


现在你可以输入新的字符了,例如,通过输入:


        iA young <Esc>


这个命令启动一次插入操作(那个”i”),并插入 “A young”,然后退出
插入模式(最后一个<Esc>)。结果是:


        +—————————————+
        |A young intelligent turtle             |
        |Found programming UNIX a hurdle        |
        |~                                      |
        |~                                      |
        |                                       |
        +—————————————+



删 除 一 行


要删除一整行,使用 “dd” 命令,后一行会移上来填掉留下的空行:


        +—————————————+
        |Found programming UNIX a hurdle        |
        |~                                      |
        |~                                      |
        |~                                      |
        |                                       |
        +—————————————+


删 除 一 个 分 行 符


在 Vim 中你可以把两行连起来,这意味着两行间的换行符被删除了。”J” 命令
用于完成这个功能。
    以下面两行为例子:


        A young intelligent
        turtle


把光标移到第一行,然后按 “J”:


        A young intelligent turtle


 


——————————————————————————–


*02.5*  撤销与重做


假设现在你删得太多了。当然,你可以重新输入需要的内容。不过,你还有一个更简单的
选择。”u” 命令撤销上一个编辑操作。看看下面这个操作:先用 “dd” 删除一行,再敲
“u”,该行又回来了。
    再给一个例子:把光标移到第一行的 A 上:


        A young intelligent turtle


现在输入 xxxxxxx 删除 “A young”。结果如下:


        intelligent turtle


输入”u” 撤销最后一个删除操作。那个删除操作删除字符 g,所以撤销命令恢复这个字符:


        g intelligent turtle


下一个 u 命令恢复倒数第二个被删除的字符:


        ng intelligent turtle


下一个 u 命令恢复 u,如此类推:


        ung intelligent turtle
        oung intelligent turtle
        young intelligent turtle
        young intelligent turtle
        A young intelligent turtle


        Note:
        如果你输入 “u” 两次,你的文本恢复原样,那应该是你的 Vim 被配置在 Vi 兼容
        模式了。看这里修正这个问题:|not-compatible|。
        本文假定你工作在 “Vim 的方式”。你可能更喜欢旧的 Vi 的模式,但是你必须
        小心本文中的一些小区别。



重 做


如果你撤销得太多,你可以输入CTRL-R(redo)回退前一个命令。换句话说,它撤销
一个撤销。要看执行的例子,输入CTRL-R两次。字符 A 和它后面的空格就出现了:


        young intelligent turtle


有一个特殊版本的撤销命令:”U” (行撤销)。行撤销命令撤销所有在前一个编辑行
上的操作。 输入这些命令两次取消前一个 “U”:


        A very intelligent turtle
          xxxx                  删除 very


        A intelligent turtle
                      xxxxxx            删除turtle


        A intelligent
                                用 “U” 恢复行
        A very intelligent turtle
                                用 “u” 撤销 “U”
        A intelligent


“U” 命令本身就是一个改变操作,”u” 命令撤销该操作,CTRL-R 命令重做该操作。
有点乱吧, 但不用担心,用 “u” 和 CTRL-R 命令你可以切换到任何你编辑过的状态。


 


——————————————————————————–


*02.6*  其它编辑命令


Vim 有大量的命令可以修改文本。参见|Q_in|和下文。这里是一些经常用到的:


添 加


“i” 命令在光标所在字符前面插入字符。一般情况下,这就够用了,但如果你刚好想在
行尾加东西怎么办?要解决这个问题,你需要在文本后插入字符。这通过 “a” (append)
命令实现。
    例如,要把如下行


        and that’s not saying much for the turtle.
改为
        and that’s not saying much for the turtle!!!


把光标移到行尾的句号上。然后输入 “x” 删除它。现在光标处于一行的尾部了,现在输入


        a!!!<Esc>


添加三个感叹号到 turtle 的 “e” 后面:


        and that’s not saying much for the turtle!!!



开 始 一 个 新 行


“o” 命令在光标下方建立一个新的空行,并把 Vim 切换到插入模式。然后你可以在这个
新行内输入文本了。
    假定你的光标在下面两行中第一行的某个地方:


        A very intelligent turtle
        Found programming UNIX a hurdle


如果你现在用 “o” 命令并输入新的文字:



        oThat liked using Vim<Esc>


结果会是:


        A very intelligent turtle
        That liked using Vim
        Found programming UNIX a hurdle


“O” 命令(大写)在光标上方打开一个新行。



指 定 次 数


假定你想向上移动 9 行,你可以输入 “kkkkkkkkk” 或者你可以输入”9k”。实际上,
你可以在很多命令前面加一个数字。例如在这章的前面,你通过输入 “a!!!<Esc>”
增加三个感叹号。另一个方法是使用命令 “3a!<Esc>”。次数 3 要求把后面的命令
执行三次。同样的,要删除三个字符,可以使用 “3x”。次数总是放在要被处理多次
的命令的前面。


 


——————————————————————————–


*02.7*  退出


使用 “ZZ” 命令可以退出。这个命令保存文件并退出。
        Note:
        与其他编辑器不一样,Vim 不会自动建立一个备份文件。如果你输入 “ZZ”,
        你的修改立即生效并且不能恢复。你可以配置 Vim 让它产生一个备份文件,
        参见|07.4|。



放 弃 修 改


有时你会做了一系列的修改才突然发现还不如编辑之前。不用担心,Vim 有“放弃修改
并退出”的命令,那就是:


        :q!


别忘了按回车使你的命令生效。


这个命令执行的细节是:命令有三部分,包括冒号(:),它使 Vim 进入命令模式,
q 命令,它告诉 Vim 退出,而感叹号是强制命令修饰符。
    这里,强制命令修饰符是必要的,它强制性地要求 Vim 放弃修改并退出。如果你只是
输入”:q”,Vim 会显示一个错误信息并拒绝退出:


        E37: No write since last change (use ! to override)


通过指定强制执行,你实际上在告诉 Vim:“我知道我所做的看起来很傻,但我长大了,
知道自己在做什么。”


如果你放弃修改后还想重新编辑,用 “:e!” 命令可以重新装载原来的文件。


 


——————————————————————————–


*02.8*  寻求帮助


所有你想知道的东西,都可以在 Vim 帮助文件中找到答案,随便问!
    要获得一般的帮助用这个命令:


        :help


你还可以用第一个功能键 <F1>。如果你的键盘上有一个 <Help> 键,可能也有效。
    如果你不指定主题,”:help” 将命令显示一个总揽的帮助窗口。Vim 的作者在帮助系
统方面使用了一个很聪明的方案(也许可以说是很懒惰的方案):他们用一个普通的编辑窗
口来显示帮助。你可以在帮助窗口中使用任何普通的 Vim 命令移动光标。所以,h,j,k
和 l 还是表示左,下,上和右。
    要退出帮助窗口,用退出一个普通窗口的命令:”ZZ”。这只会退出帮助窗口,而不会
退出 Vim。


当你阅读帮助的时候,你会发现有一些文字被一对竖线括起来了(例如|help|)。这表示
一个超级链接。如果你把光标移到这两个竖线之间并按 CTRL-](标签跳转命令), 帮助
系统会把你引向这个超级链接指向的主题。(由于不是本章的重点,这里不详细讨论,
Vim 对超级链接的术语是 “标签”(tag),所以 CTRL-] 实际是跳转到光标所在单词为名
的标签所在的位置。)
    跳转几次以后,你可能想回到原来的地方。CTRL-T(标签退栈)把你送回前一个
跳转点。CTRL-O (跳转到前一个位置)也能完成相同的功能。
    在帮助屏幕的顶上,有一个符号: *help.txt*。这个名字被帮助系统用来定义一个标签
(也就是超级链接的目标)。
    参见|29.1|可以了解更多关于标签的内容。


要获得特定主题的帮助,使用如下命令:


        :help {主题}


例如,要获得 “x” 命令的帮助,输入如下命令:


        :help x


要知道如何删除文本,使用如下命令:


        :help deleting


要获得所有命令的帮助索引,使用如下命令:


        help index


如果你需要获得一个包含控制字符的命令的帮助(例如 CTRL-A),你可以在它前面
加上前缀”CTRL-”。


        help CTRL-A


Vim 有很多模式。在默认情况下,帮助系统显示普通模式的命令。例如,如下命令显示
普通模式的 CTRL-H 命令的帮助:


        :help CTRL-H


要表示其他模式,可以使用模式前缀。如果你需要插入模式的命令帮助,使用 “i_” 前
缀。例如对于 CTRL-H,你可以用如下命令:


        :help i_CTRL-H


当你启动 Vim,你可以使用一些命令行参数。这些参数以短横线开头(-)。例如知道要-t
这个参数是干什么用的,可以使用这个命令:


        :help -t


Vim 有大量的选项让你定制这个编辑器。如果你要获得选项的帮助,你需要把它括在一个
单引号中。例如,要知道 ‘number’ 这个选项干什么的,使用如下命令:


        :help ‘number’


如果你看到一个你不能理解的错误信息,例如:


        E37: No write since last change (use ! to override)


你可以使用使用E开头的错误号找关于它的帮助:


        :help E37
移 动



在你插入或者删除之前,你需要移动到合适的位置。Vim 有一大堆命令可以移动光标。
本章向你介绍最重要的那些。你可以在 |Q_lr| 下面找到这些命令的列表。


|03.1|  词移动
|03.2|  移动到行首或行尾
|03.3|  移动到指定的字符
|03.4|  括号匹配
|03.5|  移动到指定的行
|03.6|  确定当前位置
|03.7|  滚屏
|03.8|  简单查找
|03.9|  简单的查找模式
|03.10| 使用标记


    下一章:|usr_04.txt|  做小改动
    前一章:|usr_02.txt|  Vim 初步
      目录:|usr_toc.txt|


 


——————————————————————————–


*03.1*  词移动


要移动光标向前跳一个词,可以使用 “w” 命令。象大多数 Vim 命令一样,你可以在命令前
加数字前缀表示把这个命令重复多次。例如,”3w” 表示向前移动3个单词。用图表示如下:


        This is a line with example text
          —>–>->—————–>
           w  w  w    3w


要注意的是,如果光标已经在一个单词的词首,”w” 移动到下一个单词的词首。
    “b” 命令向后移动到前一个词的词首:


        This is a line with example text
        <—-<–<-<———<—
           b   b b    2b      b


还有一个 “e” 命令可以移到下一个单词的词末,而 “ge” 则移动到前一个单词的末尾:


        This is a line with example text
           <-   <— —–>   —->
           ge    ge     e       e


如果你在一行的最后一个单词,”w” 命令将把你带到下一行的第一个单词。这样你可以
用这个命令在一段中移动,这比使用 “l” 要快得多。”b” 则在反方向完成这个功能。


一个词以非单词字符结尾,例如 “.”,”-” 或者 “)”。要改变 Vim 使用的 “分词符”,
请参见 ‘iskeyword’ 选项。
    还可以以 “空白字符” 分割的 “大单词” 移动。这不是我们通常意义的 “单词”。这
就是为什么称之为 “大单词” 的原因。如下图所示:


               ge      b          w                             e
               <-     <-         —>                          —>
        This is-a line, with special/separated/words (and some more).
           <—– <—–         ——————–>         —–>
             gE      B                   W                       E
               ge      b          w                             e


组合运用这些大写和小写的命令,你可以很快地在一段中前后移动。


 


——————————————————————————–


*03.2*  移动到行首或行尾


“$” 命令把光标移动到当前行行尾。如果你的键盘上有 <End> 键,也可以完成相同的功能。


“^” 命令把光标移动到当前行的第一个非空字符,而 “0″ 命令则移到一行的第一个字符,
<Home> 键也可以完成相同的功能。图示如下:


                  ^
             <————
        …..This is a line with example text
        <—————–   —————>
                0                  $


(这里 “…..” 表示空白字符)


    象大多数移动命令一样,”$” 命令接受个次数前缀。但是 “移动到一行的行尾n次” 没
有什么意义,所以它会使光标移动到另一行。例如,”1$” 移动到当前行的行尾,而
“2$” 则移动到下一行的行尾,如此类推。
    “0″ 命令不能加个数前缀,因为 “0″ 本身就是个数字。而且,出人意料地是,”^” 命
令也不支持数字前缀。


 


——————————————————————————–


*03.3*  移动到一个指定的字符


单字符查找命令是最有用的移动命令之一。”fx” 命令向前查找本行中的字符 x。提示:
“f” 表示 “Find”。
    例如,假定你在下面例子行的行首,而你想移动到单词 “human” 的h那里。只要执行
命令 “fh” 即可:


        To err is human.  To really foul up you need a computer.
        ———->—————>
            fh           fy


这个例子还演示了用 “fy” 命令移动到 “really” 的词尾。
    你可以在这个命令前面加数字前缀,所以,你可以用 “3fl” 命令移动到 “foul” 的
“l”:


        To err is human.  To really foul up you need a computer.
                  ———————>
                           3fl


“F” 命令用于向左查找:


        To err is human.  To really foul up you need a computer.
                  <———————
                            Fh


“tx” 命令与 “fx” 相似,但它只把光标移动到目标字符的前一个字符上。提示:”t”
表示 “To”。这个命令的反向版本是 “Tx”。


        To err is human.  To really foul up you need a computer.
                   <————  ————->
                        Th              tn


这四个命令可以通过 “;” 命令重复,”,” 命令则用于反向重复。无论用哪个命令,光标
永远都不会移出当前行,哪怕是这两行是连续的一个句子。


有时你启动了一个查找命令后才发现自己执行了一个错误的命令。例如,你启动了一个
“f” 命令后才发现你本来想用的是 “F”。要放弃这个查找,输入 <Esc>。所以
“f<Esc>” 取消一个向前查找命令而不做任何操作。 Note: <Esc> 可以中止大部分命令,
而不仅仅是查找。


 


——————————————————————————–


*03.4*  括号匹配


当你写程序的时候,你经常会遇到嵌套的()结构。这时,”%” 是一个非常方便的命令
了:它能匹配一对括号。如果光标在 “(” 上,它移动到对应的 “)” 上,反之,如果它在
“)” 上,它移动到 “(” 上。


                            %
                         <—–>
                if (a == (b * c) / d)
                   <—————->
                            %


这个命令也可适用于 [] 和 {}。(可用’matchpairs’选项定义)


当光标不在一个有用的字符上,”%” 会先向前找到一个。比如当光标停留在上例中的行
首时,”%” 会向前查找到第一个 “(“。然后会移动到它的匹配处。


                if (a == (b * c) / d)
                —+—————->
                           %


 


——————————————————————————–


*03.5*  移动到指定的行


如果你是一个 C 或者 C++ 程序员,你对下面这样的错误信息应该非常熟悉:


        prog.c:33: j   undeclared (first use in this function)


这表示你可能要移动到 33 行去作一些修改了。那么怎样找到 33 行?一个办法是执行
“9999k” 命令移到文件头,再执行 “32j” 下移到32行。这不是一个好办法,但肯定有效。
更好的方法是使用 “G” 命令。加上一个次数前缀,这个命令可以把你送到指定的行。
例如,”33G” 把你送到 33 行。(要用更好的方法在编译器的错误列表中移动,参见
|usr_30.txt| 的 “:make” 命令部分。)
    如果没有数字前缀,”G” 命令把光标移动到文末。移动到文首的命令是 “gg”。”1G”
也能完成这个功能,但稍复杂一点。


            |   first line of a file   ^
            |   text text text text    |
            |   text text text text    |  gg
        7G  |   text text text text    |
            |   text text text text
            |   text text text text
            V   text text text text    |
                text text text text    |  G
                text text text text    |
                last line of a file    V


另一个定位行的方法是使用带数字前缀的 “%” 命令。例如,”50%” 移动到文件的中间,
而 “90%” 移到差不多结尾的位置。


前面的描述假定你想移动到文件中的某一行,而不在乎它是否可见。那么如何移动到视野
之内的一行呢?下图演示了三个可以使用的命令:


                        +—————————+
                H –>   | text sample text          |
                        | sample text               |
                        | text sample text          |
                        | sample text               |
                M –>   | text sample text          |
                        | sample text               |
                        | text sample text          |
                        | sample text               |
                L –>   | text sample text          |
                        +—————————+


提示:”H” 表示 “Home”,”M” 表示 “Middle” 而 “L” 表示 “Last”。


 


——————————————————————————–


*03.6*  确定当前位置


要确定你在文件中的位置,有三种方法:


1.  使用 CTRL-G 命令,你会获得如下消息(假定 ‘ruler’ 选项已经被关闭):


        “usr_03.txt” line 233 of 650 –35%– col 45-52


    这里显示了你正在编辑的文件的名称,你所处的当前行的行号,全文的总行数,光标
    以前的行占全文的百分比,和你所处的列的列号。
    有时你会看到一个分开的两个列号。例如,”col 2-9″。这表示光标处于第二个字符
    上,但由于使用了制表符,在屏幕上的位置是 9。


2. 设置 ‘number’ 选项。这会在每行的前面加上一个行号:


        :set number


    要重新关闭这个选项:


        :set nonumber


    由于’number’是一个布尔类型的选项,在它前面加上 “no” 表示关闭它。布尔选项只会
    有两个值,on 或者 off。
      Vim 有很多选项,除了布尔类型的,还有数字或者字符串类型的。在用到的时候会给
    处一些例子的。


3.  设置 ‘ruler’ 选项。这会在 Vim 窗口的右下角显示当前光标的位置:


        :set ruler


使用 ‘ruler’ 的好处是它不占多少地方,从而可以留下更多的地方给你的文本。


 


——————————————————————————–


*03.7*  滚屏


CTRL-U 命令向下滚动半屏。想象一下通过一个视口看着你的文本,然后把这个视口向上移动
该视口的一半高度。这样,窗口移动到当前文字的上面,而文字则移到窗口的下面。不用担心
记不住那边是上。很多人都是这样。
    CTRL-D命令把视窗向下移动半屏,所以把文字向上移动半屏。


                                       +—————-+
                                       | some text      |
                                       | some text      |
                                       | some text      |
        +—————+              | some text      |
        | some text     |  CTRL-U  –> |                |
        |               |              | 123456         |
        | 123456        |              +—————-+
        | 7890          |
        |               |              +—————-+
        | example       |  CTRL-D –>  | 7890           |
        +—————+              |                |
                                       | example        |
                                       | example        |
                                       | example        |
                                       | example        |
                                       +—————-+


每次滚一行的命令是 CTRL-E(上滚)和 CTRL-Y(下滚)。可以把 CTRL-E 想象为是多给你
一行(one line Extra)。


向前滚动一整屏的命令是 CTRL-F(实际上会留下两行不滚动)。反向的命令是 CTRL-B。
幸运地,CTRL-F 是向前 (forward) 滚动,CTRL-B 是向后 (backward) 滚动,这比较好记。


移动中的一个常见问题是,当你用 “j” 向下移动的时候,你的光标会处于屏幕的底部,
你可能希望,光标所在行处于屏幕的中间。这可以通过 “zz” 命令实现。


        +——————+             +——————+
        | some text        |             | some text        |
        | some text        |             | some text        |
        | some text        |             | some text        |
        | some text        |   zz  –>   | line with cursor |
        | some text        |             | some text        |
        | some text        |             | some text        |
        | line with cursor |             | some text        |
        +——————+             +——————+


“zt” 把光标所在行移动到屏幕的顶部,而 “zb” 则移动到屏幕的底部。Vim 中还有另外
一些用于滚动的命令,可以参见|Q_sc|。要使光标上下总保留有几行处于视口中用作上下
文,可以使用’scrolloff’选项。


 


——————————————————————————–


*03.8*  简单查找


查找命令是 “/String”。例如,要查找单词 “include”,使用如下命令:


        /include


你会注意到,当你输入 “/” 的时候,光标移到了 Vim 窗口的最后一行,这与 “冒号命令”
一样,在那里你可以输入要查找的字符串。你可以使用退格键 (退格箭头或<BS>) 进行
修改,如果需要的时候还可以使用 <Left> 和 <Right> 键。
   使用 <Enter> 开始执行这个命令。


        Note:
        字符.*[]^%/\?~$有特殊含义。如果你要查找它们,需要在前面加上一个 “”。
        请参见下文。


要查找下一个匹配可以使用 “n” 命令。用下面命令查找光标后的第一个 #include:


        /#include


然后输入 “n” 数次。你会移动到后面每一个 #include。如果你知道你想要的是第几个,
可以在这个命令前面增加次数前缀。这样,”3n” 表示移动到第三个匹配点。要注意,
“/” 不支持次数前缀。


“?” 命令功能与 “/” 的功能类似,但是是反方向查找:


        ?word


“N” 命令在反方向重复前一次查找。因此,在 “/” 命令后执行 “N” 命令是向后查找,
在 “?” 命令后执行 “N” 命令是向前查找。



忽 略 大 小 写


通常,你必须区分大小写地输入你要查找的内容。但如果你不在乎大小写。可以设置
‘ignorecase’ 选项:


        :set ignorecase


如果你现在要查找 “word”,它将匹配 “word” 和 “WORD”。如果想再次区分大小写:


        :set noignorecase


留下一个回复