dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>操作系统>linux>文章内容
vim 命令(三)
来源:C语言帝国 作者:

*04.8*  文本对象

如果你在一个单词的中间而又想删掉这个单词,在你用 "dw" 前,你必须先移到这个单词的
开始处。这里还有一个更简单的方法:"daw"。

        this is some example text.
                       daw

        this is some text.

"daw" 的 "d" 是删除操作符。"aw" 是一个文本对象。提示:"aw" 表示 "A Word"
(一个单词),这样,"daw" 就是 "Delete A Word"(删除一个单词)。确切地说,
该单词后的空格字符也被删除掉了。

使用文本对象是 Vim 中执行修改的第三种方法。我们已经有 "操作符-动作" 和可视模式
两种方法了。现在我们又有了 "操作符-文本对象"。
    这种方法与 "操作符-动作" 很相似,但它不是操作于从当前位置到移动目标间的内容,
而是对光标所在位置的 "文本对象" 进行操作。文本对象是作为一个整体来处理的。现在光
标在对象中的位置无关紧要。

用 "cis" 可以改变一个句子。看下面的句子:

        Hello there.  This
        is an example.  Just
        some text.

移动到第二行的开始处。现在使用 "cis":

        Hello there.    Just
        some text.

现在你输入新的句子 "Another line.":

        Hello there.  Another line.  Just
        some text.

"cis" 包括 "c"(change,修改)操作符和 "is" 文本对象。这表示 "Inner
Sentence"(译者注:实在很难用中文表示这个意思了,各位还是记英文名吧)。还有
一个文本对象是 "as",区别是 "as" 包括句子后面的空白字符而 "is" 不包括。如果
你要删除一个句子,而且你还想同时删除句子后面空白字符,就用 "das";如果你想保
留空白字符而替换一个句子,则使用"cis"。

你还可以在可视模式下使用文本对象。这样会选中一个文本对象,而且继续留可视模式,
你可以继续多次执行文本对象命令。例如,先用 "v" 启动可视模式,再用 "as"
就可以选中一个句子。现在重复执行 "as",就会继续选中更多的句子。最后你可以使用
一个操作符去处理这些被选中的句子。

你可以在这里找到一个详细的文本对象的列表:|text-objects|。

--------------------------------------------------------------------------------

*04.9*  替换模式

"R" 命令启动替换模式。在这个模式下,你输入的每个字符都会覆盖当前光标上的字符。
这会一直持续下去,直到你输入<Esc>。
    在下面的例子中,你在 "text" 的第一个 "t" 上启动替换模式:

        This is text.
                Rinteresting.<Esc>

        This is interesting.

你可能会注意到,这是用十二个字符替换一行中的五个字符。如果超出行的范围,"R" 命
令自动进行行扩展,而不是替换到下一行。

你可以通过 <Insert> 在插入模式和替换模式间切换。

但当你使用 <BS>(退格键)进行修正时,你会发现原来被替换的字符又回来了。这就好像
一个 "撤消" 命令一样。

--------------------------------------------------------------------------------

*04.10* 结论

操作符,移动命令和文本对象可以有各种组合。现在你已经知道它是怎么工作了,你可以
用 N 个操作符加上 M 个移动命令,组合出 N*M 个命令!

你可以在这里找到一个操作符的列表:|operator|

还有很多方法可以删除文本。这是一些经常用到的:

x       删除光标下的字符("dl"的缩写)
X       删除光标前的字符("dh"的缩写)
D       从当前位置删除到行尾("d$"的缩写)
dw      从当前位置删除到下一个单词开头
db      从当前位置删除到前一个单词的开头
diw     删除光标上的单词(不包括空白字符)
daw     删除光标上的单词(包括空白字符)
dG      删除到文末
dgg     删除到文首

如果你用 "c" 代替 "d",这会变成修改命令;而改用 "y",则变成拷贝命令,等等等等。

还有一些常用的命令,放在哪一章都不合适,列在这里:

        ~       修改光标下字符的大小写,并移动到下一个字符。这不是一个操作符
                (除非设置了 'tildeop'),所以你不能连接一个动作命令。这个命
                令在可视模式下也有效,它会改变被选中的所有文本的大小写。

        I       移到当前行的第一个非空字符并启动插入模式

        A       移动到行尾并启动插入模式

Vim 可以按你的需要进行设置。本章告诉你怎样使 Vim 用你指定的选项启动,怎样增加插件
以增强 Vim 的功能;以及怎样进行宏定义。

|05.1|  vimrc 文件
|05.2|  vimrc 示例解释
|05.3|  简单键盘映射
|05.4|  增加插件
|05.5|  增加帮助
|05.6|  选项窗口
|05.7|  常用选项

      下一章:|usr_06.txt|  使用语法加亮
      前一章:|usr_04.txt|  做小改动
        目录:|usr_toc.txt|

 

--------------------------------------------------------------------------------

*05.1*  vimrc 文件

可能你已经厌倦了输入那些经常用到的命令了。要让 Vim 用你习惯的设置启动,你可以
把这些设置写到一个叫 vimrc 的文件中。Vim 会在启动的时候读入这个文件。

如果你不知道你的 vimrc 在什么地方,可以使用如下命令:

        :scriptnames

命令列出的文件列表开头的几个中应该有一个叫 ".vimrc" 或者 "_vimrc" 的文件在你的
home 目录中。
    如果你还没有 vimrc,请参考 |vimrc| 一节看看你应该在什么地方创建 vimrc 文件。
另外 ":version" 命令能告诉你 vim 在什么地方找 "用户的 vimrc 文件"。

对于 Unix 系统,肯定是如下文件:

        ~/.vimrc

对于 MS-DOS 和 MS-Windows,常常使用下面其中一个文件:

        $HOME/_vimrc
        $VIM/_vimrc

vimrc 文件可以包含任何冒号命令。最简单的是设置选项命令。例如,如果你想 Vim 启动
的时候始终开启 'incsearch' 选项,可以在你的 vimrc 文件中加上:

        set incsearch

要使这个命令生效,你需要重启动 Vim。后面我们还会学到如何不退出 Vim 就能让它生效。

这一章只解释最基本的东西。要学习更多关于写 Vim 脚本的知识,请参见|usr_41.txt|。

 

--------------------------------------------------------------------------------

*05.2*  vimrc 示例解释

在第一章中,我们曾经介绍过怎样用 vimrc 示例文件(包括在 Vim 发布中)使 Vim 以非
vi 兼容模式启动(参见|not-compatible|)。这个文件可以在这里找到:

        $VIMRUNTIME/vimrc_example.vim

我们在这一节中介绍这个文件中用到的一些命令。这会对你自行参数设置有一定的帮助。
但我们不会介绍所有的内容。你需要用 ":help" 获得更多的帮助。


        set nocompatible

如第一章所述,这个命令人为地告诉 Vim 工作在 vi 增强模式,因此与 Vi 不完全兼容。
要关闭 'compatible' 选项设,'nocompatible' 可以用于完成这个功能。


        set backspace=indent,eol,start

这指明在插入模式下 <BS> 如何删除光标前面的字符。逗号分隔的三个值分别指:行首的
空白字符,分行符和插入模式开始处之前的字符。


        set autoindent

这使 Vim 在启动一个新行的时候使用与前一行一样的缩进。就是说,新行前面会有同样
多的空白字符。启动新行是指用 <Enter> 换行,在普通模式下执行 "o" 命令等情况。


        if has("vms")
          set nobackup
        else
          set backup
        endif

这告诉 Vim 当覆盖一个文件的时候保留一个备份。但 VMS 系统除外,因为 VMS 系统会
自动产生备份文件。备份文件的名称是在原来的文件名上加上 "~" 字符。参见 |07.4|


        set history=50

这个命令保存 50 个命令和 50 个查找模式的历史。如果你想 Vim 记住多些或者少些
命令,可以把这个数改成其它值。


        set ruler

总在 Vim 窗口的右下角显示当前光标位置。


        set showcmd

Vim 窗口右下角,标尺的右边显示未完成的命令。例如,当你输入 "2f",Vim 在等
你输入要查找的字符并且显示 "2f"。当你再输入w,"2fw" 命令被执行,"2f" 自动消
失。

        +-------------------------------------------------+
        |text in the Vim window                           |
        |~                                                |
        |~                                                |
        |-- VISUAL --                   2f     43,8   17% |
        +-------------------------------------------------+
         ^^^^^^^^^^^                  ^^^^^^^^ ^^^^^^^^^^
          'showmode'                 'showcmd'  'ruler'


        set incsearch

在查找模式输入完前显示匹配点。


        map Q gq

这定义一个键映射。下一节会介绍更多的相关内容。这将定义 "Q" 命令用来完成与 "gq"
操作符相同的功能,这是在 Vim 5.0 版前 "Q" 命令的作用。如果没有设置这个映射,
"Q" 会启动 Ex 模式,这也许不是你想要的情况。


        vnoremap p <Esc>:let current_reg = @"<CR>gvs<C-R>=current_reg<CR><Esc>

这是一个复杂映射。这里不介绍它是怎么工作的。它的作用是使 "p" 命令在可视模式下
用拷贝的字符覆盖被选中的字符。你可以看到映射可以被用来执行相当复杂的操作。但其
本质依然是一个命令序列而已,与你直接输入没有什么两样。


        if &t_Co > 2 || has("gui_running")
          syntax on
          set hlsearch
        endif

这激活语法加亮功能,但仅在颜色功能有效的时候才有效。而 'hlsearch' 选项告诉
Vim 加亮上次查找模式匹配的地方。"if" 命令在设置选项的时候非常有用,它使设置
命令在某些条件下才执行。更多的内容请参见|usr_41.txt|。

                                                        *vimrc-filetype*
        filetype plugin indent on

这启动三个非常灵巧的机制:
1. 文件类型探测
    当你开始编辑一个文件的时候,Vim 会试图确定这个文件的类型。当你编辑 "main.c"
    时,Vim 会根据扩展名 ".c" 认为这是一个 C 源文件。当你编辑一个文件前面是
    "#!/bin/sh" 的文件时,Vim 会把它认作 "sh" 文件。文件类型探测用于语法加亮
    和以下另两项。请参见|filetypes|。

2. 使用文件类型相关的插件
    不同的文件需要不同的选项支持。例如,当你编辑一个 "c" 文件,用 'cindent'
    选项来自动缩进就非常有用。这些文件类型相关的选项在 Vim 中是通过文件类型
    插件来实现的。你也可以加入自己的插件,请参见 |write-filetype-plugin|。

3. 使用缩进文件
    当编辑程序的时候,行缩进通常可以被自动决定。Vim 用不同的策略处理不同的
    文件类型。请参见 |:filetype-indent-on| 和 'indentexpr'。 
        autocmd FileType text setlocal textwidth=78

这使 Vim 在一行长于 78 个字符的时候自动换行,但仅对纯文本文件中有效。这里包括
两个部分。其中 "autocmd FileType text" 定义个自动命令,表示当文件类型被设置为
"text" 的时候,后面的命令自动执行。"setlocal textwidth=78" 设置 'textwidth'
选项为78,但仅对本文件有效。


        autocmd BufReadPost *
             if line("'\"") > 0 && line("'\"") <= line("$") |
               exe "normal g`\"" |
             endif

这是又一个自动命令。这回它设置为在读入任何文件之后自动执行。后面那堆复杂的东
西检查 '" 标记是否已被定义,如果是,则跳转到该标记。行首的反斜杠用于把所有语句
连接成一行。这可以避免一行写得太长,请参见 |line-continuation|。这只在 Vim
脚本文件中有效,在命令行中无效。

--------------------------------------------------------------------------------

*05.3*  简单键盘映射

映射可以使你把一系列 Vim 命令绑定为一个单键。假设你要用一个大括号将一个特定的
单词括起来。例如,把 "amount" 变成 "{amount}"。用 ":map" 命令,就可以让 F5 来
完成这个工作。命令如下:

        :map <F5> i{<Esc>ea}<Esc>

        Note:
        在输入这个命令时,<F5> 要用四个字符表示。相似地,输入 <Esc> 不是直接按
        <Esc> 键,而是输入五个字符。在读这份手册要注意这些区别!

让我们来分解一下这个命令:
    <F5>        F5 功能键。这是命令的触发器。当这个键被按下时,相应的命令即被
                执行。

    i{<Esc>     插入 { 字符。<Esc> 键用于退出插入模式。

    e           移动到词尾。

    a}<Esc>     插入 } 到单词尾。

执行 ":map" 命令后,要在单词两端加上 {},只需要移到单词上的第一个字符并按 F5。

在这个例子中,触发器是一个单键;它还可以是任何字符串。但若你使用一个已经存在
Vim 命令,该命令将不在有效。所以你最好避免出现这种情况。
    一个可用于映射的键是反斜杠。因为你很可能想定义多个映射,那就加上另一个字符。
你可以映射 "\p" 为在单词两端加园括号,而映射 "\c" 为加花括号,例如:

        :map \p i(<Esc>ea)<Esc>
        :map \c i{<Esc>ea}<Esc>

你需要在敲入\后,立即敲入p,以便 Vim 知道它们组成一个命令。

":map" 命令(无参数)列出当前已定义的映射,至少会包括普通模式下的那些。更多的内
容参见 |40.1|。

 

--------------------------------------------------------------------------------

*05.4*  增加插件                                        *add-plugin*    *plugin*

Vim 可以通过插件增强功能。插件其实是一个当 Vim 启动的时候能被自动执行的脚本。
简单地把插件放到你 Vim 的 plugin 目录中就可以使它生效。
(这个功能在 |+eval| 被编译进 Vim 中时才有效)

Vim 中有两种插件:
       全局插件:用于所有类型的文件
   文件类型插件:仅用于特定类型的文件

我们将先讨论全局插件,然后涉及文件类型插件 |add-filetype-plugin|。


全 局 插 件                                             *standard-plugin*

当你启动 Vim,它会自动加载一些插件。你不需要为此做任何事。这些插件增加一些
很多人想用的,但由 Vim 脚本实现而非编译进 Vim 中的功能。你可以在帮助索引中
找到这些插件:|standard-plugin-list|。还可以参照 |load-plugin|。

                                                        *add-global-plugin*
你可以加入一个全局插件使得某些功能在你每次使用 Vim 时都被开启。添加一个全局
插件只要两步:
1. 获得一个插件的拷贝
2. 把它塞进合适的目录


获 得 一 个 全 局 插 件

在什么地方可以找到插件?
- 有一些与 Vim 一起发布,你可以在 $VIMRUNTIME/macros 目录或其子目录中找到。
- 从网上下载,查一下这个地方:[url]http://vim.sf.net。[/url]
- 在 Vim 的邮件列表中找:|maillist|。
- 自己写一个,参见|write-plugin|。


使 用 一 个 全 局 插 件

首先阅读插件包括的说明文字,看看有没有什么特殊的限制。然后拷贝到你的插件
目录:


        系统            插件目录
        Unix            ~/.vim/plugin/
        PC and OS/2     $HOME/vimfiles/plugin 或 $VIM/vimfiles/plugin
        Amiga           s:vimfiles/plugin
        Macintosh       $VIM:vimfiles:plugin
        RISC-OS         Choices:vimfiles.plugin

以 Unix 系统为例(假设你还没有 plugin 目录):

        mkdir ~/.vim
        mkdir ~/.vim/plugin
        cp /usr/local/share/vim/vim60/macros/justify.vim ~/.vim/plugin

就是这样了!现在你可以用这个插件定义的命令调整文字了。


文件类型插件                     *add-filetype-plugin* *ftplugins*

Vim 的发布中包括一套针对不同文件类型的插件。你可以用如下命令启用它们:

        :filetype plugin on

这样就行了! 参阅 |vimrc-filetype|。

如果你缺少某种文件类型的插件,或者你找到一个更好的,你可以自行添加一个。这也
只需两步:
1. 获取一个插件的拷贝
2. 塞到合适的目录。


取 得 文 件 类 型 插 件

你可以在找全局插件的相同地方找到文件类型插件。注意一下插件有没有注明文件
类型,据此你可以知道这个插件是全局的还是文件类型相关的。在 $VIMRUNTIME/macros
中的是全局插件;文件类型插件在 $VIMRUNTIME/ftplugin 中。


使 用 文 件 类 型 插 件                                 *ftplugin-name*

你可以通过把插件文件放到合适的目录中来增加一个插件。目录的名字与前面提过的全局
插件的位置一样,但最后一级目录是 "ftplugin"。假设你找到一个用于 "stuff" 文
件类型的插件,而且你的系统是Unix。那么,你可以把这个文件用如下命令移入ftplugin
目录:

        mv thefile ~/.vim/ftplugin/stuff.vim

如果这个文件已经存在,你可以检查一下两个插件有没有冲突。如果没有,你可以用另
一个名字:

        mv thefile ~/.vim/ftplugin/stuff_too.vim

这里,下划线用来分开文件类型和其它部分(这些部分可以由任意字符组成)。但如果你
用 "otherstuff.vim" 就不行了。那是用于 "otherstuff" 类型的文件的。

在 MS-DOS 中不能使用长文件名。如果你增加第二个插件,而这个插件超过 6 个字符,
你就没法用了。你可以通过使用另一层目录来解决这个问题:

        mkdir $VIM/vimfiles/ftplugin/fortran
        copy thefile $VIM/vimfiles/ftplugin/fortran/too.vim

总的来说,一个文件类型相关的插件的名称是:

        ftplugin/<filetype>.vim
        ftplugin/<filetype>_<name>.vim
        ftplugin/<filetype>/<name>.vim

这里 "<name>" 可以是任何你喜欢的名字。例如,在 Unix 下,"stuff" 文件类型的插件
可以是:

        ~/.vim/ftplugin/stuff.vim
        ~/.vim/ftplugin/stuff_def.vim
        ~/.vim/ftplugin/stuff/header.vim

这里, <filetype> 部分是相应文件类型的名称。只有对应文件类型的文件才会用这个
插件内的设置。插件的 <name> 部分则不重要,你可以对同一个文件类型使用多个插件。
Note 插件必须以 ".vim" 结尾。


深入参考读物:
|filetype-plugins|      文件类型插件的文档和有关如何避免映射引起的问题。
|load-plugins|          全局插件的启动时间
|ftplugin-overrule|     控制全局文件类型插件的选项
|write-plugin|          如何写插件
|plugin-details|        关于如何使用插件的信息或者当你的插件不工作的时候如何
                        处理。

 

--------------------------------------------------------------------------------

*05.5*  增加帮助                            *add-local-help*

如果幸运的话,你安装的插件还会包括帮助文件。我们这里解释如何安装这个帮助文件,
以便你能方便地获得新插件的帮助。

我们以 "matchit.vim" 插件为例(包括在 Vim 中)。这个插件使 "%" 命令可以在两个
对应的 HTML 标记间,Vim 脚本的 if/else/endif 间等匹配点间跳转。这非常有用,但
它不向前兼容(这也是为什么默认的情况下它不会被激活)。
    这个插件有一个文档:"matchit.txt"。我们先来把该插件拷贝到合适的位置。
这次,我们在 Vim 内完成这个工作,以便利用$VIMRUNTIME。(如果某些目录已经存在
你可以省略一些 "mkdir" 命令)

        :!mkdir ~/.vim
        :!mkdir ~/.vim/plugin
        :!cp $VIMRUNTIME/macros/matchit.vim ~/.vim/plugin

现在在某个 'runtimepath' 目录中建立一个 doc 目录。

        :!mkdir ~/.vim/doc

再把帮助文件拷贝进去:

        :!cp $VIMRUNTIME/macros/matchit.txt ~/.vim/doc

现在开始玩技巧了,怎样使 Vim 允许你跳转到新的主题上?用 |:helptags| 命令产生
一个本地的tags文件即可:

        :helptags ~/.vim/doc

现在,你可以用这个命令

        :help g%

来获得 "g%" 的帮助了。在使用如下命令的时候,可以看见一个新的条目:

        :help local-additions

本地帮助的标题行被自动的加入到该节了。在那里你可以看到 Vim 添加了那些本地的
帮助文件。你还可以从这里跳转到新的帮助中。

要写一个本地帮助文件,请参考 |write-local-help|。

 

--------------------------------------------------------------------------------

*05.6*  选项窗口

如果要找一个选项,你可以查找这个位置的帮助:|options|。另一个方法是用如下命
令:

        :options

这会打开一个新窗口,其中给出一个选项的列表,并对每个选项提供一行解释。这些选项
被根据种类分组。把光标移到一个主题上然后按回车就可以跳转到那里。再按一下回车或
者 CTRL-O 就可以跳回来。

你可以通过这个窗口改变一个选项的值。例如,移到 "displaying text" 主题。然后把
光标下移到这一行:

        set wrap        nowrap

当你在上面键入回车,这行会改变为:

        set nowrap      wrap

现在,这个选项被关闭了。

这行的上面是对这个选项的简要描述。将光标向上移动一行,然后按 <Enter>,你可以
跳转到 'wrap' 的完整帮助,再用 CTRL-O 可以跳回来。

对于那些值为数字或者字符串的选项,你可以编辑它的值,然后按 <Enter> 来启用该
值。例如,把光标移动到下面这行:

        set so=0

用 $ 移到行尾,再用 "r5" 命令修改为五,然后按 <Enter> 使修改生效。现在如果你
移动一下光标,你会发现在你的光标移到窗口边界前,你的文字就开始滚动了。这就是
选项 'scrolloff' 完成的功能:它指定在距离边界多远的地方开始滚动文字。

 

--------------------------------------------------------------------------------

*05.7*  常用选项

Vim 中有很多选项。大部分你很少用得上。我们在这个介绍一些常用的。别忘了你可以
通过 ":help" 命令获得更多的帮助。方法是在选项命令前后加上单引号,例如:

        :help 'wrap'

如果你搞乱了一个选项,你可以通过在选项后加上一个 & 号把它恢复到默认值。例如:

        :set iskeyword&

禁 止 折 行

Vim 通常会对长行自动换行,以便你可以看见所有的文字。但有时最好还是能让文字在一
行中显示完。这样,你需要左右移动才能看到一整行。以下命令可以切换换行方式:

        :set nowrap

当你移到到那些不能显示的文字上,Vim 会自动向右滚动让你看到后面的文字,要一次滚
动十个字符,这样就行了:

        :set sidescroll=10

这个命令不改变文件中的文字,只改变显示方式。


移 动 命 令 换 行

很多命令只能在一行中移动。你可以通过 'whichwrap' 选项改变它。如下命令把这个选项
设为默认值:

        :set whichwrap=b,s

这样,当光标处于行首时用 <BS> 键可以回到前一行的结尾;当处于行尾时用 <Space>
键可以移动到下一行的行首。

要允许 <Left> 和 <Right> 键也能这样,可以用这个命令:

        set whichwrap=b,s,<,>

这只在普通模式中有效,要在插入模式中也有效,可以:

        :set whichwrap=b,s,<,>,[,]

还有一些可以用的标志,参见 'whichwrap'。


显 示 TAB 键

文件中有 TAB 键的时候,你是看不见的。要把它显示出来:

        :set list

现在 TAB 键显示为 ^I,而 $显示在每行的结尾,以便你能找到可能会被你忽略的空白
字符在哪里。
    这样做的一个缺点是在有很多 TAB 的时候看起来很丑。如果你使用一个有颜色的
终端,或者使用 GUI 模式,Vim 可以用高亮显示空格和TAB。 使用 'listchars' 选项:

        :set listchars=tab:>-,trail:-

现在,TAB会被显示成 ">---" 而行尾多余的空白字符显示成 "-"。看起来好多了,是
吧?


关 键 字

'iskeyword' 选项指定那些字母可以出现在一个单词中:

        :set iskeyword
<        iskeyword=@,48-57,_,192-255

"@" 表示所有字母。"48-57" 表示 ASCII 字符 48-57 ,即数字 0 到 9。"192-255"
是可打印的拉丁字符。
    有时你希望横线也是关键字,以便 "w" 命令会把 "upper-case" 看作是一个单词。
你可以这样做:

        :set iskeyword+=-
        :set iskeyword
        iskeyword=@,48-57,_,192-255,-

看一下新的值,你会发现 Vim 自动在 "-" 前面加了一个逗号。
    要从中去掉一个字符用 "-="。例如要排除下划线:

        :set iskeyword-=_
        :set iskeyword
        iskeyword=@,48-57,192-255,-

这回,逗号自动被删除了。


显 示 消 息 的 空 间

当 Vim 启动的时候,在屏幕底部有一行被用于显示消息。当消息很长的时候,多余的部分
会被截断。这样你只能看到一部分。或者文字自动滚动,你要按 <Enter> 来继续。你可以
给 'cmdheight' 选项赋一个值,用来设定显示消息所用的行数。例如:

        :set cmdheight=3

这样意味着你用于编辑文字的空间少了,所以这实际上是一种折衷。

使用语法加亮


黑白的文字让人厌倦了,增加一些色彩能为你的文件带来生气。这不但看起来漂亮,
还能够提高你的工作效率。本章介绍如何使用不同颜色显示不同文本并把它打印出来。

|06.1|  功能激活
|06.2|  颜色显示不出来或者显示出错误的颜色怎么办?
|06.3|  使用不同的颜色
|06.4|  是否使用色彩
|06.5|  带颜色打印
|06.6|  深入阅读

     下一章:|usr_07.txt|  编辑多个文件
     前一章:|usr_05.txt|  选项设置
       目录:|usr_toc.txt|

 

--------------------------------------------------------------------------------

*06.1*  功能激活

一切从一个简单的命令开始:

        :syntax enable

大多数情况下,这会让你的文件带上颜色。Vim 会自动检测文件的类型,并调用合适的
语法加亮。一下子注释变成蓝色,关键字变成褐色,而字符串变成红色了。这使你可以
很容易浏览整个文档。很快你就会发现,黑白的文本真的会降低你的效率!

如果你希望总能看到语法加亮,把 "syntax enable" 命令加入到 |vimrc| 文件中。

如果你想语法加亮只在支持色彩的终端中生效,你可以在 |vimrc| 文件中这样写:

        if &t_Co > 1
          syntax enable
        endif

如果你只想在 GUI 版本中有效,可以把 ":syntax enable" 放到你的 |gvimrc| 文件中。

 

--------------------------------------------------------------------------------

*06.2*  颜色显示不出来或者显示出错误的颜色怎么办?

有很多因素会让你看不到颜色:

- 你的终端不支持彩色。
        这种情况下,Vim 会用粗体,斜体和下划线区分不同文字,但这不好看。你可能
        会希望找一个支持彩色的终端。对于 Unix,我推荐 XFree86 项目的 xterm:
        |xfree-xterm|。

- 你的终端其实支持颜色,可是 Vim 不知道
        确保你的 $TERM 设置正确。例如,当你使用一个支持彩色的 xterm 终端:

                setenv TERM xterm-color

        或者(基于你用的控制台终端)

                TERM=xterm-color; export TREM

        终端名必须与你使用的终端一致。如果这还是不行,参考一下 |xterm-color|,
        那里介绍了一些使 Vim 显示彩色的方法(不仅是 xterm )。

- 文件类型无法识别
        Vim 不可能识别所有文件,而且有时很难说一个文件是什么类型的。试一下这个
        命令:

                :set filetype
.
        如果结果是 "filetype=",那么问题就是出在文件类型上了。你可以手工指定
        文件类型:

                :set filetype=fortran

        要知道那些类型是有效的,查看一下 $VIMRUNTIME/syntax 目录。对于 GUI 版本,
        你还可以使用 Syntax 菜单。设置文件类型也可以通过 |modeline|,这样,
        在你每次编辑它的时候都执行语法加亮。例如,下面这一行可以用
        于 Makefile(把它放在接近文首和文末的地方)

                # vim: syntax=make

        你可能知道怎么检测自己的文件类型,通常是文件的扩展名(就是点后面的
        内容)参见 |new-filetype| 可以知道如何告诉 Vim 如何检查一种文件类型。

- 你的文件类型没有语法高亮定义
        你可以找一个相似的文件类型并人工设置为那种类型。如果你觉得不好,你可以
        自己写一个,参见 |mysyntaxfile|。


或者颜色是错的:

- 彩色的文字难以辨认
        Vim 自动猜测你使用的背景色。如果是黑的(或者其它深色的色彩),它会
        用浅色作为前景色。如果是白的(或者其它浅色),它会使用深色作为前景
        色。如果 Vim 猜错了,文字就很难认了。要解决这个问题,设置一下
        'background' 选项。对于深色:

                :set background=dark

        而对于浅色:

                :set background=light

       这两个命令必须在 ":syntax enable" 命令前调用,否则不起作用。如果要在
       这之后设置背景,可以再调用一下 ":syntax reset"。

- 在自下往上滚屏的过程中颜色显示不对。
        Vim 在分析文本的时候不对整个文件进行处理,它只分析你要显示的部分。这
        样能省不少时间,但也会因此带来错误。一个简单的修正方法是敲 CTRL-L。
        或者往回滚动一下再回来。要彻底解决这个问题,请参见 |:syn-sync|。有些
        语法定义文件有办法自己找到前面的内容,这可以参见相应的语法定义文件。
        例如,|tex.vim| 中可以查到 Tex 语法定义。

 

--------------------------------------------------------------------------------

*06.3*  使用不同颜色                           *:syn-default-override*

如果你不喜欢默认的颜色方案,你可以选另一个配色方案。在 GUI 版本中可以使用
Edit/Color 菜单。你也可以使用这个命令:

        :colorscheme evening

"evening" 是配色方案的名称。还有几种备选方案可以试一下。在 $VIMRUNTIME/colors
中可以找到这些方案。

等你确定了一种喜欢配色方案,可以把 ":colorscheme" 命令加到你的 |vimrc| 文件中。

你可以自己编写配色方案,下方如下法面:

1. 选择一种接近你的理想的配色方案。把这个文件拷贝到你自己的 Vim 目录中。在 Unix
下,可以这样:

        !mkdir ~/.vim/colors
       !cp $VIMRUNTIME/colors/morning.vim ~/.vim/colors/mine.vim

   在 Vim 中完成的好处是可以利用 $VIMRUNTIME 变量。

2. 编辑这个配色方案,常用的有下面的这些条目:

        term            黑白终端的属性
        cterm           彩色终端的属性
        ctermfg         彩色终端的前景色
        ctermbg         彩色终端的背景色
        gui             GUI 版本属性
        guifg           GUI 版本的前景色
        guibg           GUI 版本的背景色

   例如,要用绿色显示注释:

        :highlight Comment ctermfg=green guifg=green

   属性是 "bold"(粗体)和 "underline" (下划线)可以用于 "cterm" 和 "gui"。
   如果你两个都想用,可以用"bond,underline"。要获得详细信息, 请参考
   |:highlight| 命令。

3. 告诉 Vim 总使用你这个配色方案。把如下语句加入你的 |vimrc| 中:

        colorscheme mine

如果你要测试一下常用的配色组合,用如下命令:

        :edit $VIMRUNTIME/syntax/colortest.vim
        :source %

这样你会看到不同的颜色组合。你可以很容易的看到哪一种可读性好而且漂亮。

 

--------------------------------------------------------------------------------

*06.4*  是否使用色彩

使用色彩显示文本会影响效率。如果你觉得显示得很慢,可以临时关掉这个功能:

        :syntax clear

当你开始编辑另一个文件(或者同一个文件),色彩会重新生效。

                                                        *:syn-off*
如果你要完全关闭这个功能:

        :syntax off

这个命令会停止对所有缓冲的所有语法加亮。

                                                        *:syn-manual*
如果你想只对特定的文件采使用语法加亮,可以使用这个命令:

        :syntax manual

这个命令激活语法加亮功能,但不会在你开始编辑一个缓冲时自动生效(译者注:Vim
中,每个被打开的文件对应一个缓冲,后面的章节中你会接触到这方面的内容)。要在当
前缓冲中使用加亮,需要设置'syntax'选项:

        :set syntax=ON

 

--------------------------------------------------------------------------------

*06.5*  带颜色打印                                       *syntax-printing*

在 MS-Windows 版本中,你可以用如下命令打印当前文件:

        :hardcopy

这个命令会启动一个常见的打印对话框,你可以通过它选择打印机并作一些必要的设置。
如果你使用的是彩色打印机,那么打印出来的色彩将与你在 Vim 中看到的一样。但如果
你使用的是深色的背景,它的颜色会被适当调整,以便在白色地打印纸上看起来比较舒
服。

下面几个选项可以改变 Vim 的打印行为:
        'printdevice'
        'printheader'
        'printfont'
        'printoptions'

要仅打印一定范围内的行,可以用可视模式选择需要打印的行在执行打印命令,例如:

        v100j:hardcopy

"v" 启动可视模式,"100j" 向下选中100行,然后执行 ":hardcopy" 打印这些行。当
然,你可以用其它命令选中这100行。

如果你有一台 PostScript 打印机,上面的方法也适合 Unix 系统。否则,你必须做一些额
外的处理:你需要先把文件转换成 HTML 类型,然后用 Netscape 之类的浏览器打印。

如下命令把当前文件转换成 HTML 格式:

        :source $VIMRUNTIME/syntax/2html.vim

你发现它会嘎吱嘎吱执行一阵子,(如果文件很大,这可能要花点时间)。之后,
Vim 会打开一个新的窗口并显示 HTML 代码。现在把这个文件存下来(存在哪都不要紧,
反正最后你要删掉它的):

        :write main.c.html

用你喜欢的浏览器打开这个文件,并通过它打印这个文件。如果一切顺利,这个输出应
该与 Vim 中显示的一样。要了解更详细的信息,请参见 |2html.vim|。处理完后别忘
了删掉那个 HTML 文件。

除了打印,你还可以把这个 HTML 文件,放到 WEB 服务器上,让其他人可以通过彩色
文本阅读。
以下为引用的内容:
以下为引用的内容:


上一篇:vim 命令(二)   下一篇:JSTL操作数据库示例
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·Linux常用基本命令及应用技巧
·写得蛮好的linux学习笔记
·学会在Linux下对硬盘分区
·找回Redhat的超级用户密码
·Linux下C语言编程
·GDB教程
·Cron服务配置详解
·Linux与Unix二大操作系统编程的
·Linux 2.6 内核的嵌入式系统应用
·Linux和Windows系统调用的比较
·vim命令(一)
·vim 命令(二)
  相关文章
·vim 命令(二)
·vim命令(一)
·linux下FTP的搭建及优化
·恢复误删除的Linux文件全攻略
·Linux常用基本命令及应用技巧
·Linux和Windows系统调用的比较
·Linux 2.6 内核的嵌入式系统应用
·Linux与Unix二大操作系统编程的
·Cron服务配置详解
·GDB教程
·Linux下C语言编程
·找回Redhat的超级用户密码
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763