Gmail Calendar Documents Reader Web more »
Recently Visited Groups | Help | Sign in
Google Groups Home
Group info
Members: 1024
Language: Chinese (Simplified)
Group categories:
Computers > Software
Region: Asia > China
More group info »
Recent pages and files
VIM FAQ    
<html>
<head>
<title>F:\user_documents\baikaishiuc\我的文章\log\vimfaq_answer.txt.html</title>
<meta name="Generator" content="Vim/7.0">
<meta http-equiv="content-type" content="text/html; charset=GBK">
</head>
<body bgcolor="#000000" text="#a0ffa0">
<pre>
章节 1 - 总说明

1.1. Vim是什么?

Vim代表着Vi IMproved.它过去常被认为是Vi IMitation,但是确实增加了很多新的提高
所以名字的扩写的改变是非常适合。Vim是一个文本编辑器,它几乎包括了所有来自Un-
ix程序&quot;Vi&quot;程序的命令,当然也包括了很多新增加的命令。所有的命令都可以从键盘中
敲入。这是一种优势,可以让你一直保持你的手在键盘上,而你的眼睛会一直停留在屏
幕上。对于还有一些人想使用他的人,Vim是支持鼠标的,并且是有有滚动条和菜单条
的GUI版本的。

Vim是一个编辑器而不是一个文字处理器。一个文字处理器通常被用于文本的排版。这
意味着如何布置文本,改变它输出的显示效果。大部分的时候,最后的成品指的是你打
算打印出来或者是排版出来的,是为了追求一种更人性化(或别的)的方法来表达。有很
的文字处理器,现在的市面上。例如Microsoft Word,WordPerfect,FrameMaker,和Ami-
Pro.(译者推荐OpenOffice)

一个编辑器只是用来输入文本。任何的排版或者布置文本都是次要的。对于一个编辑器
来说,一个人最主要关心的是如何更好的输入文本,而不是使文本如何看起来更漂亮。
现在的编辑器有多种选择,不包括Vim的话,还有,Vi,Emacs,Crisp,Brief,xedit。还有
Notepad。

更多的信息。请阅读:

    :help intro

1.2. 谁编写了Vim?

大部分的Vim程序是由Bram Moolenar,所编写,和来自很多无私的贡献者。&quot;:h cred-
its&quot;来查看完整的贡献人员名单。

Vim是基于Stevie开发的,它是由Tim Thompson,Tony Andres和G.R.(Fred) Walter所开
发的。

更多的资料,请读

    :help author

1.3. Vim是否兼容Vi?

是的。Vim对Vi的兼容性是非常之好的。你可以使用&quot;-C&quot;命令行标记来以对Vi兼容的模
式开启Vim:

    $vim -C

你也可以使用:

    $vim -u None

你可以可以设置'compatible'选项来开启对Vi的兼容:

    :set compatible

更多的资料,请读

    :help -C
    :help 'compatible'
    :help compatible-default

1.4. Vim相对Vi有哪些提高?

一个简短的有关于Vim相对于Vi的优点的列表已在下面列出。这个列表显示出了Vim是一
个非常符合时代特点并充满了新特性的编辑器。现代编辑器的标准特性都已经被实现,
同样重要的是那些给一般的高级用户和程序员专用的特性。

现代Vi的特性:

    多级撤消
        允许你设置对一个文件缓冲区中的改变进行撤消的次数。你也可以反撤消一个
        已经撤消过的操作。
    多窗口和缓冲区
        每个文件都可以被显示在他们各自的窗口中。你也可以很轻易的从一个窗口移
        动到另一个窗口中。每个文件都可以在一个Vim会话中打开也可以有一个想关
        联的缓冲区,当然你也很容易从一个跳到另一个中去。
    灵活的插入模式
        Vim允许你在插入模式中使用方向键在整个文件中进行移动。不用敲入更多的
        &lt;ESC&gt;,四处移动,然后敲入'i'或'a'.
    宏
        Vim有一项机制允许你记录一系列的键序列,并重复任意次数.
    可视模式
        你可以高亮文本的一个章节并仅对这段文本执行操作。
    块操作
        允许选择并高亮文本中的矩形块,然后对他们执行一系列复杂的操作。
    在线帮助系统
        你可以很容易的找到使用Vim任何方面的帮助。帮助文件会在他们自己的窗口
        中显示。
    命令行编辑和历史记录
        历史记录允许你使用方向键来重复或搜索一个已经被键入过的命令。允许你对
        一个命令的开始部分进行匹配,只用在命令缓冲区中键入命令开始处的相似部
        份即可。你也可以编辑一个命令来矫正改字稿或改变一些值。
    命令行补全
        使用TAB键,你能够补全命令,选项,文件名等等,直到为你所需要的值。
    水平滚动
        长行可以被水平的滚动(可以不在GUI中使用,也可以在).

高级用户特性:

    文本格式化
        只用两次击键,你就可以格式化文本中的打段文本,而不用使用额外的程序。
    在插入模式中的单词补全
        Vim可以在键入的时候进行单词的补全,会对要补全的单词匹配为文件中已经
        出现过的相似的单词。
    跳转标签
        就像一个internet浏览器,你可以在编辑的时候跳转到文本的前面部分,然后
        继续向前。你的头脑因此从在文本中浏览释放,并代替为编辑。
    自动命令
        当读入或写入一个文件,或跳到另一缓冲区中时,命令会自动执行。
    Viminfo
        允许存储命令行历史,标记和寄存器到一个文件中,并在启动时被读入。因此
        你可以重新调用老的搜索模式,宏等等,到一个新的Vim会话中。
    鼠标支持
        鼠标在xterm和MS-DOS是被支持的。它可以用来被定位光标,选择可视区域,
        粘贴寄存器内容,等等。
    图形用户接口
        就像期于的现代编辑器。当然,是非常容易加入你自己的菜单。当然,vim控
        制台也是被所支持的,并被广泛的使用。
    脚本语言
        Vim有一个非常强大的脚本语言系统,所以新的命令是很容易被支持的。
        你也可以使用Perl,Python,Tcl和Ruby来完成同样的事情!
    插件
        额外的程序通过在Vim中执行命令(正则表达式或脚本语言),来在启动时自动
        加载。例如:文件探测器,网络编辑。更多的插件一直在VimOnline被开发和共
        享中。
    对于众多程序语言的语法高亮
        上百种的程序语法高亮被支持。而另外的语种支持,正在不断的被加入中。
    扩展的正则表达式
        Vim支持的扩展的正则表达式非常的类似于perl的正则表达式函数。

编程性能特性:

    加速的编辑-编译-编辑
        你可以在Vim中编译并自动跳到源码中的错误地方。
    对众多编程语言的缩进
        C,C++,Java,Perl,XML和很多别的语言,在Vim输入时会被自动的识别并缩进。
    在包含的文件中搜索单词
        Vim允许你对光标下的单词在本文中和被包含的文件中进行搜索。
    文本对象
    折叠
        确信部分的文本可以被折叠。最好的例子是,函数体。你可以对代码有个整体
        的印象,然后折开你要认真细看的代码。
    ctags和cscope的整和
        使用这两种非常强大的程序,你可以从一个调用的实例中跳转到这个函数中的
        定义中去,并使用别的技巧来浏览代码。

更多的资料,请读

    :help vi-differences

1.5. Vim是否免费?

Vim是慈善软件。对Vim的拷贝和使用是没有任何限制的,但是Vim的作者鼓励你能够
对慈善团体做一些贡献。有份在发行版本中的文档解释了该如何做这些。

更多的资料,请读

    :help copyright

=============================================================================

章节 2 - 资源

2.1. 我从哪里可以知道关于Vim更多的知识?

你可以把你的有关Vim的问题发到vim@vim.org邮件列表中去。你也可以把你的有关于对
Vim发展的问题投递到vim-dev@vim.org邮件列表中去。Vim并没有自己的邮件组。但是相
对合适的邮件组可以用来投递的是comp.editors。

&quot;VimOnline&quot;是一个网页,其实已经被当作Vim的主页来运做了,尽管它的主要目的是从
四出搜集tips和scripts。但是被牵连了:)! 这个页面的URL是vim.sourceforge.net或者
vim.sf.net。

最后,阅读Vi的FAQ:

    <a href="http://www.faqs.org/faqs/editor-faq/vi/part1/index.html">http://www.faqs.org/faqs/editor-faq/vi/part1/index.html</a>

更多的资料,请读

    :help mail-list
    :help internet

2.2. 是否有个可利用的邮件列表?

这里有一些:

    名字                描述

    vim-announce        发表新的版本
    vim                 综合讨论
    vim-dev             补丁包,bug报告,开发讨论
    vim-mac             Macintosh方面讨论
    vim-fr              法语版块的综合讨论
    vim-multibyte       多字节开发问题
    vim-vms             VMS上的开发

关于这些,其实只有vim和vim-dev是真正大部分人感兴趣的。vim-announce对于大部分
的人来说都是只读的,它的信息也会自动的发往给各个别的列表。另外的四个,相对用
的人都不是很多。

订阅:       发email到 &lt;NAME&gt;-subscribe@vim.org
取消:       发email到 &lt;NAME&gt;-unsubscribe@vim.org
获取帮助:   发email到 &lt;NAME&gt;-help@vim.org

2.3. 是否有关于Vim邮件列表的档案文件?

是的。查看 <a href="http://www.yahoogroups.com/list/">http://www.yahoogroups.com/list/</a>&lt;name&gt;, name的地方可以是vimdev,
vimannounce,vim,vim-fr,vim-mac,vim-multibute,vim-vms。

作为选择的,也可以去 www.gmane.org 去找关于GMANE,GMANE允许你进入邮件列表,好
像他们就是新闻组。这会对那些希望浏览历史记录或只是偶然的查看下最近信息的人提
供很大的便利。

2.4. 从哪里可以得到Vim的HTML/PDF/PS格式的帮助手册?

你可以下载HTML/PDF/PS格式的Vim帮助手册从:

    <a href="http://vimdoc.sourceforge.net/">http://vimdoc.sourceforge.net/</a>

2.5. 有一个与Vim有联系的问题。如何才能确定这个问题与Vim 有关,还是
     与我的设置有关?

首先,你应该确定这个问题与你的_vimrc或_gvimrc或着是系统vimrc或者是你自己的插
件,又或是你的一些设置文件的是否无关。为了确定,你可以使用

    $vim -N -u NONE -U NONE

这会让Vim以非兼容模式开启并不会载入你自己的_vimrc和_gvimrc文件。它也不会加载
你的插件。在这个Vim调用中,尝试去再现你的问题。假如这个问题不再出现,那么这个
问题就应该是与你自己的本地设置或是插件有关。为了在你的设置文件中定位这个问题,
你不得不进行反复的尝试并试着对你的配置文件逐行注释。你也可以使用-V命令参数来
得到更多的有关于调式信息,并分析这个问题:

    $vim -V2

你可以增加这个值然后传递给-V参数来得到更多信息。

更多的信息,请读

    :help -u
    :help -U
    :help -N
    :help -V
    :help 'verbose'
    :help :verbose
    :help set-verbose

2.6. 该去哪里报告bugs?

首先使用如下的命令来收集信息:

    :source $VIMRUNTIME/bugreport.vim

现在把上面的命令所搜集的信息发到bugs@vim.org。

Vim开发邮件列表(见上)是一个非常好的讨论总体bug的地方。假如你找到的bug伴随着
语法高亮或者一些别的附加特性(i.e. 不是直接在Vim内部编程实现的),试着去报告给
那个特性的维护者。

更多的资料,请读

    :help bug-reports

2.7. 哪里可以获得这份FAQ?

这份FAQ可以在VimOnline(vim.sf.net)上找到。将来会在别的站点放置这份FAQ。

2.8. 在这份FAQ中找不到我要的答案该怎么办?

这份FAQ涵盖了Vim细节方面的大部分问题。你可以阅读Vi的FAQ来找到很多适合Vi克隆
品方面的详细信息。在comp.editors上,经常会有这种方面的帖子。你也可以在下面的
网站上找到一份拷贝

    <a href="http://www.faqs.org/faqs/editor-faq/vi/part1/index.html">http://www.faqs.org/faqs/editor-faq/vi/part1/index.html</a>

同样,自从Vim在过去的几年中搜集了大量的新特性后,想成功的整理出一份FAQ来,基
本上已经成了一个不可能的任务。为了尽可能实现这个目标,请发email给维护者,假
如你有一个好的问题的话。一个好的问题是指你试着自己去解决,但是失败了。(记住,
Vim有非常好的文档)

2.9. 我有一个patch可以实现一个新的Vim特性。我该把这个patch发到哪里?

你可以把你的patchs发给Vim开发者邮件列表vim-dev@vim.org。

更多的资料,请读

    :help vim-dev

2.10. 我有一个Vim建议或者是开发了一个新的Vim语法/缩进/文件类型/编译器插件,
      或开发一个新的脚本,一个新的配色方案。那么是否有一个公共网点来提供上载?

是的。你可以使用Vim在线站点来上载你的插件/脚本,配色方案,建议,等等。这个站
点是 <a href="http://vim.sourceforge.net">http://vim.sourceforge.net</a>

============================================================================

章节 3 - 可利用的

3.1. Vim的最新版本是多少?

这个最新的Vim版本是2004年,6月8号发布的6.3版。

这个不同的版本的Vim发布历史在下面:

Version 6.3     06/08/2004
Version 6.2     06/01/2003
Version 6.1     03/24/2002
Version 6.0     09/27/2001
Version 5.8     05/31/2001
Version 5.7     06/24/2000
Version 5.6     01/16/2000
Version 5.5     09/21/1999
Version 5.4     07/26/1999
Version 5.3     08/31/1998
Version 5.2     08/24/1998
Version 5.1     04/07/1998
Version 5.0     02/19/1998
Version 4.6     03/13/1997
Version 4.5     10/17/1996
Version 4.2     07/05/1996
Version 4.0     05/21/1996
Version 3.0     08/16/1994
Version 2.0     12/21/1993
Version 1.27    04/23/1993
Version 1.17    04/21/1992

3.2. 我从哪里可以找到Vim的最新版本?

你可以从VimOnline站点上下载到Vim最新版本的源码。这个站点的URL是
<a href="http://vim.sourceforge.net/download.php">http://vim.sourceforge.net/download.php</a>

3.3. Vim可以在什么平台下运行?

所有的Unix平台。
所有的Windows平台。
Amiga, Atari, BeOS, DOS, Macintosh, MachTen, OS/2, RiscOS, VMS

3.4. 我从哪里可以下载最新版本的Vim runtime files?

你可以在Vim的ftp站点上
ftp://ftp.vim.org/pub/vim/runtime directory
下载最新的版本的Vim runtime files(语法文件,文件类型插件,编译器文件,配色方
案,文档,缩进文件和键映射)。

============================================================================

章节 4 - 帮助

4.1. 我该如何使用帮助文件?

可以找到所有Vim函数的帮助。为了使用帮助文件,可以使用&quot;:help&quot;命令。这会带你到
主帮助文件的页面。在第一页上,你可以找到关于如何移动的说明。这样,你就可以在
一个帮助页面中移动了,当然你是在一个只读的文档上。你可以使用标签跳到详细的主
题。有两种方法可以这样做:

    * 在一个命令的名字上,或选项上时,使用 &quot;&lt;Ctrl-]&gt;&quot;命令。只有当这个tag是一
      个关键字时,才会有效。&quot;&lt;Ctrl-LeftMouse&gt;&quot;和&quot;g&lt;LeftMouse&gt;&quot;工作起来类似于
      &quot;&lt;Ctrl-]&gt;&quot;。
    * 使用&quot;:tag &lt;subject&gt;&quot;命令。对所有的字符,它都会做相应的处理。

使用&quot;&lt;Ctrl-T&gt;&quot;跳回到刚才在帮助文件中的位置。使用&quot;:q&quot;来关闭帮助窗口。

假如你想跳到帮助页面中的某个详细的主题上,使用&quot;:help (subject)&quot;.假如你不知道
该如何去寻找,尝试&quot;:help index&quot;得到一份有效主题列表。使用标准的搜索键来定位
你想要的信息。你可以把&quot;:help&quot;缩写成&quot;:h&quot;。

更多的资料,请读

    :help online-help

4.2. 我该如何在Vim帮助文件中搜索一个关键字?

你可以在输入你要的关键字后按下CTRL-D,来得到一个包含此关键字的列表。你可以可
以使用meta字符像*,\+,等等来详细的指定搜索模式:

    :help init&lt;C-D&gt;
    :help str*()&lt;C-D&gt;
    :help '*indent&lt;C-D&gt;

你可以在输入部分的帮助关键字后,按下TAB来扩展这个词,找到符合你所需要的匹配.
你可以继续按下TAB来查看别的匹配。

从帮助窗口中,你可以使用&quot;:tag&quot;命令搜索关键字。例如,

    :tselect /window

这个命令会列出所有的包含文本&quot;window&quot;的关键子。你可以从列表中选择出一个并跳入
进去。

你可以使用&quot;:helpgrep&quot;命令在全部的帮助文件中,搜索给定的文本。这个quickfix
窗口将会打开,并显示所有匹配的行。

更多的资料,请读

    :help c CTRL-D
    :help c &lt;Tab&gt;
    :help :tselect
    :help :help
    :help :helpgrep

4.3. 我得到一个E123的错误信息,我做错了什么?

你可以使用如下的命令来得到更多的关于错误的信息:

    :help E123

更多的资料,请读

    :help error-messages

4.4. 我从哪里可以知道Vim不同的模式的资料?

你可以通过阅读

    :help vim-modes

4.5. 在Vim中加入了一个新的帮助文件后,怎么在帮助文件中产生这个文件的tags?

你可以使用&quot;:helptags&quot;命令来重新产生Vim的帮助tag文件。例如:

    :cd $VIMRUNTIME/doc
    :helptags

更多的资料,请读

    :help :helptags
    :help add-local-help

4.6. 我可以使用压缩版本的帮助文件吗?

是的。你可以压缩这些帮助文件,然后仍然可以使用Vim查看它们。这会使存取帮助文
件有点延迟。而且需要使用&quot;gzip&quot;插件。遵循如下步骤来压缩,并使用Vim帮助文件:

- 使用&quot;gzip doc/*.txt&quot;来压缩所有的帮助文件

- 编辑&quot;doc/tags&quot;文件并修改&quot;.txt&quot;为&quot;.txt.gz&quot;,使用如下命令
        :%s=\(\t.*\.txt\)\t=\1.gz\t=

- 增加下面的代码到你的vimrc中去:
        set helpfile=(dirname)/help.txt.gz

这个(dirname)指的是你的帮助文件所在的目录。这个gzip.vim插件是在Vim标准发行包
中已经被包含的,会很小心的解压这些文件。当它们与压缩的文档地址不是在同一地方
的时候,你必须得确定$VIMRUNTIME是否设置了另外的文件在哪里。

更多的资料,请读

    :help gzip-helpfile
    :help 'helpfile'
    :help gzip
    :help $VIMRUNTIME

============================================================================

章节 5 - 编辑文件

5.1. 我该如何在Vim中编辑时,载入另一个文件?

这里有好几种方法使你在编辑时载入一个别的文件。最简单的方法是使用&quot;:e&quot;(:edit)
命令:

    :e &lt;filename&gt;

你也可以使用&quot;:n&quot; (:next)命令来载入另一个文件到Vim中去:

    :n &lt;filename(s)&gt;

你也可以使用&quot;:args&quot;命令来载入一个文件到Vim中去

    :args &lt;filename(s)&gt;

更多的资料,请读

    :help usr_07
    :help edit-files
    :help :edit
    :help :next f
    :help :args f

5.2. 我该如何以另外的名字存入当前的文件(另存为)并编辑一个新的文件?

你可以使用&quot;:saveas&quot;命令来以新的名字保存当前文件:

    :saveas &lt;newfilename&gt;

作为选择的,你也可以使用下面的命令:

    :w &lt;newfilename&gt;
    :edit #

你也可以使用&quot;:file&quot;命令,然后再使用&quot;:w&quot;命令:

    :file &lt;newfilename&gt;
    :w

更多的资料,请读

    :help 07.7
    :help saveas
    :help :file f
    :help :w

5.3. 我该如何改变当前目录为当前文件所在目录?

你可以使用下面的命令来改变当前目录为当前文件所在的目录:

    :cd %:p:h

想要自动的改变当前目录,为当前文件所在目录的话,使用如下命令:

    :autocmd BufEnter * cd %:p:h

更多的资料,请读

    :help :cd
    :help :lcd
    :help filename-modifiers
    :help autocommand

5.4. 我该如何在写入文件时不会在文件末尾追加EOL?

你可以关闭'eol'选项并打开'binary'选项来在写入文件时,不在末尾追加EOL:

    :set binary
    :set noeol
    :w

更多的资料,请读

     :help 'endofline'
     :help 'binary'
     :help 23.4

5.5. 我该如何配置Vim使其在打开文件时停留在上次光标所在的位置?

Vim会把缓冲区内上次编辑时光标最后所在的位置记录到寄存器'&quot;'中去。你可以使用如
下的自动命令,并把它加入到你的.vimrc或.gvimrc中去,使打开文件时会光标会停留
在上一次编辑过的位置:

    au BufReadPost * if line(&quot;'\&quot;) &gt; 0 &amp;&amp; line(&quot;'\&quot;) &lt;= line(&quot;$&quot;) |
                        \ exe &quot;normal g'\&quot;&quot; | endif

更多的资料,请读

    :help '&quot;
    :help last-position-jump

5.6. 当在Vim中编辑一个文件时,这个文件被外部的程序所改动,Vim会打开一个警告
     窗口(类似确认对话框),每当文件被检测到,就警告一次。我怎样才可以关闭这
     个警告?

你可以设置Vim的'autoread'选项,在每当文件在外部被改动时,就自动读入:

    :set autoread

你也可以使用如下的命令:

    autocmd FileChangeShell *
            \ echohl WarningMsg |
            \ echo &quot;File has been changed outside of vim.&quot; |
            \ echohl None

更多的资料,请读

    :help 'autoread'
    :help FileChangedShell
    :help timestamp
    :help :checktime

5.7. 我该如何编辑文件名在光标下的文件?

你可以使用gf命令来编辑一个文件名在光标下的文件。
你可以使用CTRL-W f命令在新的窗口打开一个文件。

更多的资料,请读

    :help gf
    :help CTRL-W f
    :help 'isfname'
    :help 'path'
    :help 'suffixesadd'
    :help 'includeexpr'

5.8. 我该如何重新载入/重新编辑当前文件?

你可以使用&quot;:edit&quot;命令,不用详细指定文件名,来重新载入当前文件。假如你对文件
做了某些改动,你可以使用&quot;:edit!&quot;来强制重载当前文件(你会失去你所做的改动)。

更多的资料,请读

    :help :edit
    :help :edit!
    :help 'confirm'

5.9. 我该如何使Vim周期性的自动保存文件?

Vim不支持周期性的自动保存文件。

更多的资料,请读

    :help 'updatetime'
    :help CursorHold
    :help swap-file

5.10. 我该如何以只读模式打开一个文件?

你可以使用&quot;:view&quot;命令来以只读模式打开一个文件:

    :view &lt;filename&gt;

这个命令对于打开的缓冲区设置了'readonly'选项。你也可以使用&quot;-R&quot;命令来以制度模
式打开一个文件:

    $vim -R &lt;filename&gt;

你也可以使用符号链接在命令行中执行&quot;view&quot;以只读模式打开一个文件:

    $view &lt;filename&gt;

更多的资料,请读

    :help 07.6
    :help 'readonly'
    :help 'modifiable'
    :help :view
    :help :sview
    :help view
    :help -R
    :help -M

5.11. 我如何编辑另外的文件而不保存对当前文件的改动?

你可以打开一个文件对其进行编辑而不用保存对当前文件的改动,而且可以不用失去这
些改动,使用如下的方法:

    :split &lt;new_filename&gt;
    :new &lt;new_filename&gt;

你也可以设置'hidden'选项并编辑一个新文件:

    :set hiddent
    :e &lt;new_filename&gt;

假如你打算抛弃对当前文件所作的改变并载入新的文件来编辑,你可以使用如下的命令:

    :e! &lt;new_filename&gt;

更多的资料,请读:

    :help :edit! f
    :help 'hidden'
    :help :split
    :help :new

============================================================================

章节 6 - 编辑多个文件

6.1. 我该如何在Vim中一次打开多个文件?

这里有几种方法能够在Vim中一次打开多个文件。你可以使用&quot;:next&quot;命令来详细定义一
个文件列表:

    :next f1.txt f2.txt
    :next *.c

你可以使用:args命令来详细定义一个文件列表来作为参数:

    :args f1.txt f2.txt
    :args *.c

在载入了文件以后,你可以使用&quot;:next&quot;和&quot;:prev&quot;命令来在文件中移动。

更多的资料,请读

    :help 07.2
    :help :next
    :help :args
    :help argument-list

6.2. 我该如何在Vim中在多个文件\缓冲区中切换?

这里有好几种方法来切换多个文件。你可以使用&quot;buffer&quot;命令来切换多个文件。例如:

    :buffer file1
    :buffer file2

你也可以使用CTRL-^键来切换缓冲区。通过在按键以前指定一个号,你就可以编辑那个
号的缓冲区了。没有号的话,你可以按CTRL-^来选择要编辑的缓冲区。

你也可以使用&quot;:e #&quot;命令来编辑一个特殊的缓冲区:

    :e #5

更多的资料,请读

    :help edit-files
    :help :buffer
    :help CTRL-^
    :help alternate-file
    :help 22.4
    :help 07.3

6.3. 我该如何在Vim中打开多个文件时,每个文件占据单独的一个窗口?

你可以使用-o和-O命令行参数来打开多个文件在垂直或竖向的Vim窗口中。例如

    $vim -o3 f1.txt f2.txt f3.txt

以上的命令会打开文件f1.txt,f2.txt,f3.txt在Vim的三个水平分割的窗口中。

    $vim -O3 f1.txt f2.txt f3.txt

这个以上的命令会打开f1.txt f2.txt f3.txt在三个垂直的Vim窗口中。

更多的资料,请读

    :help -o
    :help -O
    :help startup-options

6.4. 我该如何配置Vim使其自动的载入文件,类似于载入 工作站\项目 ?

你可以使用&quot;:mksession&quot;和&quot;:mkview&quot;命令在Vim中自动载入一些文件。

这&quot;:mksession&quot;命令会建立一个Vim脚本来存储当前的编辑会话。你可以使用&quot;:source&quot;
命令来载入mksession命令所产生的文件。

这&quot;:mkview&quot;命令建立一个Vim脚本来存储当前窗口的内容。你也可以使用&quot;:loadview&quot;
命令来载入这个脚本。

更多的资料,请读

    :help 21.4
    :help 21.5
    :help views-sessions
    :help 'sessionoptions'
    :help :mksession
    :help :source
    :help v:this session
    :help :mkview
    :help :loadview
    :help 'viewdir'
    :help buffers

6.5. 是否可以在一个Vim实例中打开多个顶级窗口类似于Nedit或者emacs?

不。当前是不可能的。这个特性在todo列表中。

6.6. 我该如何在Vim中浏览/管理目录?

你可以使用explorer.vim插件,在标准的Vim安装包中都是支持的,可以用来浏览\探寻
目录。你可以使用下面的命令来开启文件管理器:

    :e &lt;directory&gt;
    :Explore
    :SExplore

在文件管理器中,你可以浏览目录,重命名,删除,编辑文件。

更多的资料,请读

    :help file-explorer
    :help 22.1

6.7. 我该如何在网络上使用ftp/scp/rcp/http编辑文件?

你可以使用vnetrw.vim插件,在标准的Vim包中已经被包含进去了,可以在网络使用多
种协议编辑文件。使用这个插件,可以明显的使用ftp/scp/rcp/http来载入和保存文件.
例如,在ftp上编辑一个文件,你可以使用入下的命令:

    $vim ftp://matchine/path

更多的资料,请读

    :help netrw.vim

============================================================================

章节 7 - 备份

7.1. 当我编辑和保存文件时,Vim建立了一个文件名相同,但是有~后缀的文件。我该
     如何停止Vim建立这种文件?(或者)我该如何关闭Vim的备份文件的特性?

你设置了'backup'选项,所以Vim会在保存文件时自动建立一个备份文件。你可以清除
这个选项来停止Vim建立备份文件:

    :set nobackup

记住,默认的这个选项是关闭的。你可以在初始文件中开启'backup'选项。你也可以关
闭'writebackup'选项:

    :set nowritebackup

更多的资料,请读

    :help 07.4
    :help bakcup-table
    :help 'backup'
    :help 'writebackup'
    :help 'backupskip'
    :help 'backupdir'
    :help 'backupext'
    :help 'backupcopy'
    :help backup

7.2. 我该如何配置Vim使其存储所有的备份文件到一个特殊的目录中去?

你可以配置Vim的'backupdir'选项来存储所有的备份文件到一个特殊的目录中去。
例如,存储所有的备份文件到~/backup目录中,你可以使用如下命令:

    :set backupdir=~/backup

更多的资料,请读

    :help 07.4
    :help 'backupdir'
    :help backup

7.3. 当我用Vim中保存一个文件时,这个文件的权限改变了。我该如何配置Vim来存储
     一个文件而不改变此文件的权限?

这些是有可能的,假如'backupcopy'选项被设置为'no'或'auto'。请记住这个选项的默
认值是在大部分的情况下都可以正常工作的。假如这个默认的选项,替你工作的不是很
号,尝试设置'backupcopy'选项为'yes'来在存储文件时,保持文件的权限。

    :set backupcopy=yes

这个应用了后。默认的,Vim不会备份文件。

更多的资料,请读

    :help 'backupcopy'
    :help backup
    :help 'backup'
    :help 'writebackup'

============================================================================

章节 8 - 缓冲区

8.1. 我对一个缓冲区做了很多改动。我该如何编辑另外的缓冲区而不保存对当前缓冲
     区的改动,却又不失去这些改动?

你可以设置'hidden'选项来编辑一个文件而不失去对当前文件所做的改动:

    :set hidden

通过设置'hidden'选项,你也可以保存缓冲区的改动历史(撤销历史)。否则,当你切换
文件时,这个撤消历史将会丢失。

更多的资料,请读

    :help 'hidden'
    :help hidden-quit
    :help :hide

8.2. 我该如何配置Vim使其在切换到另一个缓冲区时自动保存改动过的缓冲区?

你可以设置'autowrite'选项来在切换到另一个缓冲区时自动保存改动过的缓冲区:

    :set autowrite

更多的资料,请读

    :help 'autowrite'
    :help 'autowriteall'
    :help 'hidden'

8.3. 我该如何把当前窗口中的缓冲区置换位空白缓冲区?

你可以使用&quot;:enew&quot;命令来载入一个空的缓冲区置换当前窗口的缓冲区。

更多的资料,请读

    :help :enew

8.4. 是否有一个快捷键可以通过缓冲区号载入缓冲区?

你可以使用CTRL-^来通过指定缓冲区号载入一个缓冲区。例如,要载入缓冲区5,你可
以按5 CTRL-^命令。

更多的资料,请读

    :help CTRL-^

8.5. 我该如何打开当前所有的缓冲区在独自的窗口中?

你可以使用&quot;:ball&quot;或者&quot;:sball&quot;命令来打开所有在缓冲区列表中的缓冲区:

    :ball

更多的资料,请读

    :help :ball

8.6. 我该如何结束一个缓冲区而不退出Vim?

你可以使用&quot;:bdelete&quot;命令来删除一个缓冲区而不结束缓冲区。
例如:

    :bdelete file1

更多的资料,请读

    :help :bdelete
    :help :bwipeout

8.7. 我有几个缓冲区是以:e filename的形式打开的,我该如何关闭其中的一个缓冲区
     而不结束Vim?

你可以使用&quot;:bdelete &lt;buffername&gt;&quot;命令来关闭缓冲区。

更多的资料,请读

    :help :delete
    :help :bunload
    :help :bwipeout

8.8. 当我使用&quot;:%bd&quot;来删除所有的缓冲区时,并不是所有的缓冲区都被删除了。为什
     么?

在&quot;:%bd&quot;命令中,这个'%'的范围会被置换为当前缓冲区的起始行号和终结行号。为了
代替'%'作为范围,你需要指定详细的范围。例如,为了删除所有的缓冲区,你可以使
用如下的命令&quot;:1,9999bd&quot;。

更多的资料,请读

    :help :bd

8.9. 我该如何显示当前缓冲区/文件的缓冲区号?

你可以使用2&lt;CTRL-G&gt;命令来显示当前缓冲区/文件的的缓冲区号。记住在CTRL-G命令前
的序号。假如这个数大于一,Vim就会显示缓冲区号。

你也可以使用如下的命令来显示当前缓冲区号:

    :echo bufnr(&quot;%&quot;)

你也可以把&quot;%n&quot;域包含到'statusline'选项中来在状态栏上显示当前缓冲区号。

更多的资料,请读

    :help CTRL-G
    :help bufnr()
    :help :echo
    :help 'statusline'

8.10. 我该如何删除一个缓冲区而不关闭显示这个缓冲区的窗口?

你可以使用如下的命令来打开下个缓冲区并删除当前缓冲区。

    :bnext | bdelete

更多的资料,请读

    :help :bnext
    :help :bdelete
    :help :buffers

8.11. 我该如何映射TAB键为循环打开缓冲区?

你可以使用如下的两个映射命令,来映射CTRL-Tab键打开下个缓冲区并使用CTRL-SHIFT
-Tab键来打开前一个缓冲区:

    :nnoremap &lt;C-Tab&gt; :bnext&lt;CR&gt;
    :nnoremap &lt;S-C-Tab&gt; :bprevious&lt;CR&gt;

更多的资料,请读

    :help :bnext
    :help :previous

===========================================================================

章节 9 - 窗口

9.1. Vim窗口与缓冲区的区别在哪?

一个Vim缓冲区是一个文件载入到内存中进行编辑。原始的文件没有贝改变,直到你确
定将对此文件所做的改动写入到缓冲区的文件中。一个Vim的窗口是一个缓冲区的视口.
你可以在一个缓冲区上打开多个窗口或者几个窗口对应不同的缓冲区。

更多的资料,请读

    :help usr_08.txt
    :help 22.4
    :help windows-intro
    :help Q_wi

9.2. 我该如何增加Vim窗口的高度?


你可以使用如下的命令来增加Vim窗口的高度:

    :vert resize +N
    :vert resize -N
    :vert resize N

你可以使用CTRL-W &lt; 或者 CTRL-W &gt; 或者 CTRL-W | 命令。

更多的资料,请读

    :help vertical-resize
    :help CTRL-W &gt;
    :help CTRL-W &lt;
    :help window-resize

9.3. 我该如何放大或缩小一个窗口?

你可以放大一个窗口(将会关闭所有的窗口除了当前窗口)使用&quot;CTRL-W o&quot;命令或者
&quot;:only&quot; ex 命令。

你可以使用&quot;CTRL-W _&quot;命令或者&quot;:resize&quot;ex命令来增加当前窗口的高度到最打高度为
止而不用关闭别的窗口。

你也可以使用&quot;CTRL-W |&quot;命令或者&quot;:vertical resize&quot; ex命令来增加当前窗口的宽度
到可能的最大值而不用关闭别的窗口。

你可以使用&quot;CTRL-W =&quot;命令来使所有窗口的高度和宽度都相等。

你页可以设置如下的选项加上上面的命令来得到更好的结果:

Method 1:
设置 'winminheight' 选项的值为0:

    :set winminheight=0

默认的这个选项为1。
这个选项控制着交互式窗口的最小高度值(当这个窗口不是最小值时)。
当'winminheight'选项选项的值是0,在交互式窗口中,只有状态栏会被显示。

method 2:
设置'noequalalways'选项并设置&quot;winheight&quot;选项到一个极大值(例如 99999):

    :set noequalalways
    :set winheight=99999

现在,活动窗口将会被一直以它的最大值开启,假如有别的窗口的话,会继续保留,
但是只剩下状态栏。

对于上面所提到的任何方法,你不能在放大窗口后保存你的窗口布局。假如你想在放
大窗口后,你可以使用ZoomWin插件。你可以下载ZoomWin插件。你可以从Vim online
站点下载这个插件:

<a href="http://vim.sourceforge.net/scripts/script.php?script">http://vim.sourceforge.net/scripts/script.php?script</a> id=508

更多的资料,请读

    :help CTRL-W o
    :help window-resize
    :help 'winminheight'
    :help 'equalalways'
    :help 'winheight'
    :help 08.3

9.4. 我该如何对所有打开的缓冲区或窗口或参数列表中的文件执行一条ex命令?

你可以使用&quot;:bufdo&quot;命令来对所有的打开的缓冲区执行一条ex命令。你可以使用
&quot;:windo&quot;命令来对所有打开的窗口执行一条ex命令。你可以使用&quot;:argdo&quot;命令来
对所有参数列表中的文件执行一条命令。

更多的资料,请读

    :help :windo
    :help :bufdo
    :help :argdo
    :help 26.3

===========================================================================

章节 10 - 移动

10.1. 我该如何跳到一个文件的首行,或者是末行?

你可以使用'G'命令跳到文件的最后行或者用'gg'命令跳到文件中的首行。

更多的资料,请读

    :help G
    :help gg

10.2. 在插入模式中,当我按了&lt;Esc&gt;键进入了命令模式,这个光标左移了一格(除了
      在行首时)。是否有可能保持住光标在同样的列?

不。是没有可能改变这种行为的。这个光标是&quot;always&quot;定位在一个有效字符上(除非你
开启了虚拟编辑模式(virtual-edit mode))。所以,假如你追加文本到行末时,当你
回到命令模式的时候,这个光标*must*重新回到你键入的最后个字符上。出于一致性
的考虑,这个光标可以被退到任何的地方,只要你在一行里。

你可以在插入模式中使用CTRL-O命令来执行一条ex命令,然后回到插入模式中,而不
用移动光标列。

更多的资料,请读

    :help 'virtual'
    :help i CTRL-O

10.3. 我该如何配置Vim来保持光标位置在我使用&lt;Page Up&gt;,&lt;Page Down&gt;,或别的键滚
      动文本时?

当你移动文本时,可以重置'startofline'选项来保持光标的竖直位置:

    :set nostartofline

更多的资料,请读

    :help 'startofline'

10.4. 文件中的某些行,超过了屏幕的最大宽度,然后回绕了。当我按下了j,k键来
      移动到下一行时,Vim移动的是文件中的一行,而不是屏幕是的一行。我该如何
      移动屏幕是的一行?

你可以使用gj和gk命令在屏幕上的一行中,进行上下移动。j,k移动的是文件的中的一
行。你也可以设置'wrap'选项来避免回绕:

    :set nowrap

更多的资料,请读

    :help gj
    :help gk
    :help 'wrap'

你可以使用下面的映射:

    :map &lt;Up&gt; gk
    :imap &lt;Up&gt; &lt;C-o&gt;gk
    :map &lt;Down&gt; gj
    :imap &lt;Down&gt; &lt;C-o&gt;gj

10.5. Vim中对句子,段落,章节的定义是什么?

一个句子是被定义为以一个'.','!'或'?'结尾的一行,或者被一个(或二个)空格或者
&lt;tab&gt;。哪些字符和多少数量的空格被组成为句子的结尾,是由'joinspaces'和
'cpoptions'选项规定的。

一个段落是跟在一个空行后的,也可以使用一套标识段落的宏,这套标识符被详细定
义在'paragraphs'选项中。

一个章节跟在一个在第一列的form-feed(&lt;C-L&gt;)符号后,或者是在段落宏中的一个,
在'sections'详细定义了这些。

更多的资料,请读

    :help sentence
    :help 'joinspaces'
    :help 'cpoptions' | /^\s*j\&gt;
    :help paragraph
    :help section
    :help word

10.6. 我该如何跳到句子,段落,或章节的开头或结尾?

你可以使用如下的移动命令来跳到句子,段落,或章节的开头或结尾:

    motion  position    where
    (       beginning   current sentence
    )       end         current sentence
    {       beginning   current paragraph
    }       end         current paragraph
    []      end         previous section
    [[      beginning   current section
    ][      end         current section
    ]]      beginning   next section

这些移动命令都可以加个计数前缀,然后持续前跳(或后跳)。

更多的资料,请读

    :help object-motions

10.7. 我的文件中的某些行过长,超过了屏幕的边缘。我该如何移动Vim来查看超过屏
      幕右端的文本?

你可以使用如下的命令来水平的滚动窗口到左边或右边:

    zl - 向左卷动
    zh - 向右卷动
    zL - 向左卷动半个屏幕
    zH - 向右卷动半个屏幕
    zs - 卷动屏幕使光标所在的位置,移动到屏幕的开始处。
    ze - 卷动屏幕使光标所在的位置,移动的屏幕的结束处。

你可以使用g0命令移动鼠标到屏幕行(不是文件行)的开始处,而g$命令可以移动到屏
幕行的终点处而不用卷动屏幕。

更多的资料,请读

    :help scroll-horizontal

10.8. 我该如何同时卷动两个或更多的缓冲区?

你可以对每个缓冲区设置&quot;scrollbind&quot;选项来同时卷动他们。

更多的资料,请读

    :help 'scrollbind'
    :help scroll-binding
    :help 'scrollopt'

10.9. 当我使用方向键时,Vim改变了模式,并且插入了怪异的字符在我的文档中,但
      是并没有移动我的光标,这是怎么回事?

有两种可能会造成这种情况:假如你不是在一个很慢的链接上使用Vim,那么就是Vim不
理解你的键盘所产生的键序列。

假如你工作在一个很慢的连接上(例如2400bps的猫上),你可以尝试设置'timeout'或
者'ttimeout'选项。这些选项,再和'timeoutlen'和'ttimeoutlen'选项进行组合,可
能修复这个问题。

假如你的终端发送了Vim不懂的键码,那么前面的处理程序有可能会不能正确的工作。
在这种情况下,你最好的选择是映射你的键序列来匹配一些光标移动命令并保存这些
映射到你的文件中去。只要你在终端上工作,就都可以&quot;:source&quot;这个文件。

更多的资料,请读

    :help 'timeout'
    :help 'ttimeout'
    :help 'timeoutlen'
    :help 'ttimeoutlen'
    :help :map
    :help vt100-cursor-keys

10.10. 我该如何配置Vim,当我在一行的开始处,按下向左的键时,移动到前一行的
       末尾处?

你可以增加'&lt;'标志位到'whichwrap'选项中来配置Vim当光标在一行的开始处,按下向
左的键,会跳到前一行的末尾处:

    :set whichwrap+=&lt;

相似的,当光标在行末尾处,按下向右的键要移动到下一行的开始处,只要增加'&gt;'标
志位到'whichwrap'选项中:

    :set whichwrap+=&gt;

上面的方法只能工作在正常模式和可视模式中。假如想在插入或置换模式中开启这项
功能的话,只要加入相应的'['和']'标志位。

更多的资料,请读

    :help 'whichwrap'
    :help '05.7'

10.11. 我该如何配置Vim只工作在工作在插入模式下(无模式编辑)?

你可以设置'insertmode'选项来配置Vim使其只呆在插入模式下:

    :set insertmode

设置了这个选项后,你可以把Vim当作无模式编辑器使用。假如你按下了&lt;Esc&gt;键,Vim
不会回到正常模式中。假如想执行一个普通模式下的命令,你可以按下CTRL-O,然后
键入正常模式命令。假如想执行超过一条命令,你可以按如CTRL-L然后再键入命令。
假如想回到插入模式,按下&lt;Esc&gt;,关闭这个选项,然后重置'insertmode'选项:

    :set noinsertmode

你可以使用&quot;evim&quot;命令或者你可以使用&quot;vim -y&quot;来以无模式的方法启动Vim。

你也可以使用&quot;:startinsert&quot;ex命令以插入模式启动Vim。

更多的资料,请读

    :help 'insertmode'
    :help :startinsert
    :help :stopinsert
    :help i CTRL-O
    :help i CTRL-L
    :help evim
    :help evim-keys

10.12. 我该如何在当我卷动文本时显示一些相关的上下文?

你可以设置'scrolloff'选项来显示在光标上或下的一些行数。

    :set scrolloff=10

更多的资料,请读

    :help 'scrolloff'
    :help 'sidescrolloff'

10.13. 我该如何回到上一次光标所在的位置?

你可以使用''或``命令,在新的跳转前,跳到上一次光标所在的位置。你可以使用
CTRL-O命令跳到较老的光标位置,而CTRL-I命令将会到跳转列表中较新的地方。

更多的资料,请读

    :help 03.10
    :help mark-motions
    :help jump-motions

===========================================================================

章节 11 - 搜索文本

11.1. 在我以某种模式搜索到了一个匹配的文本时,所有的匹配都以高亮显示。我该
      如何 暂时/永久 关闭高亮?

'hlsearch'选项控制是否打开对上次模式的匹配进行高亮。默认的,这个选项是不会
开启的。假如这个选项是被设置在多个系统使用的vimrc文件中,那么你该通过如下的
命令关闭搜索高亮:

    :set nohlsearch

暂时的关闭搜索高亮,使用

    :nohlsearch

你也可以清除搜索的高亮,通过搜索不在本文件中的模式(例如,搜索模式'asdf')。

更多的资料,请读

    :help 'hlsearch'
    :help :nohlsearch

11.2. 我该如何在搜索模式中插入一个回车符?

你可以在一个模式中使用'\r'或者&lt;CTRL-V&gt;&lt;CTRL-M&gt;来插入一个回车符号。在Vim脚本
中,更加适合使用'\r'来代替回车符。

更多的资料,请读

    :help sub-replace-special

11.3. 我该如何搜索字符^M?

你可以先键入CTRL-V键,然后键入CTRL-M键,来搜索^M字符。

    /^V^M

你也可以使用&quot;\r&quot;字符。在Vim脚本中,&quot;\r&quot;字符是首选。

更多的资料,请读

    :help c CTRL-V
    :help using CTRL-V
    :help /\r

11.4. 我该如何搜索/替代看起来像'~R','~S',这类的字符?

你可以使用'ga'命令来显示特殊字符的ascii 值/码。例如,让我们假设这个ascii值
是142。然后你使用如下的命令来搜索特殊的字符:

    /^V142

^V是按CTRL-V输入的。

更多的资料,请读

    :help ga
    :help using_CTRL_V
    :help 24.8

11.5. 我该如何高亮一个文件中的所有空白字符(non-printable)?


你可以使用如下的命令和搜索模式来高亮文件的所有空白字符:

    :set hlsearch
    /\(\p\|$\)\@!.

更多的资料,请读

    :help /\p
    :help /bar
    :help /$
    :help /\(
    :help /\@!
    :help 'hlsearch'

11.6. 我该如何搜索一个文件中的完整的单词?

你可以搜索完整的单词,只要使用\&lt;和\&gt;原子操作符即可。例如:

    /\&lt;myword\&gt;

\&lt;原子操作符匹配单词的开头,而\&gt;标志着单词的结尾。

更多的资料,请读

    :help /\&lt;
    :help /\&gt;

11.7. 我该如何搜索光标下的单词?


你可以通过按下*键来向前搜索位于光标下的单词。想往后搜索,请按#键。请记住,
使用这个命令被搜索的是整个单词。

更多的资料,请读

    :help star
    :help #
    :help g*
    :help g#
    :help 03.8
    :help search-commands

11.8. 我该如何搜索一个单词而不用考虑大小写(大写或小写)?

当搜索一个模式时,为了总是忽略大小写,可以设置'ignorecase'选项:

    :set ignorecase

当只想搜索某个特殊的模式时,忽略大小写,可以设置'ignorecase'选项:

    /\c&lt;pattern&gt;

更多的资料,请读

    :help 'ignorecase'
    :help /ignorecase
    :help /\c

11.9. 我该如何搜索一个连续出现两次的单词?

你可以使用如下的命令来定位出现两次的单词:

    /\(\w\+\)\_s\+\1\&gt;
    /\(\k\+\)\_s\+\1\&gt;

使用'\w'和'\k'的主要不同之处在于,后者使用时基于的'iskeyword'选项包含了一些
重音符号和别的语言的一些特殊符号。

更多的资料,请读

    :help /\1
    :help /\(
    :help /\)
    :help /\&lt;
    :help /\&gt;
    :help /\w
    :help /\k
    :help /\+
    :help /\ x
    :help 'iskeyword'

11.10. 我该如何搜索缓冲区中某个单词的的出现次数?

你可以使用如下的命令来计算缓冲区中特定单词的出现次数:

    :let cnt=0
    :g/\&lt;your_word\&gt;/let cnt=cnt+1
    :echo cnt

这会计算单词出现的行的行数。你可以使用如下的命令

    :%s/\&lt;word\&gt;/&amp;/g

为了计算文件中的alphabetic word数,你可以使用

    :%s/\a\+/&amp;/g

为了计算有非空白字符合成的单词数,你可以使用

    :%s/\S\+/&amp;/g

更多的资料,请读

    :help count-items
    :help word-count
    :help v g CTRL-G
    :help 12.5

11.11. 我该如何置光标位置到匹配模式中的单词的结尾处?

你可以使用'e'偏移到搜索命令来置光标到匹配单词的末尾处。例如

    /mypattern/e

更多的资料,请读

    :help search-offset
    :help /

11.12. 我该如何搜索空行?

你可以使用下面的命令搜索空行:

    /^$

    或

    /^\s*$

更多的资料,请读

    :help /^
    :help /4
    :help /\s
    :help /*
    :help search-commands

11.13. 我该如何搜索只包含单个字符的行?

你可以使用如下的命令来搜索只包含单个字符的的行:

    /^/s*\a\s*$

更多的资料,请读

    :help /^
    :help /\a
    :help /\s
    :help /*
    :help /$

11.14. 我该如何搜索/替换多个文件中的某个字符串?

你可以使用'argdo'或'bufdo'或'windo'命令来对多个文件执行ex命令。例如:

    :argdo %s/foo/bar/g

更多的资料,请读

    :help :argdo
    :help :bufdo
    :help :windo

11.15. 我在一个映射中使用了&quot;:s&quot;substitute命令。当对某种模式的搜索失败了,这
       个映射也就终止了。我希望即使这个substitue命令失败了,也能够继续执行
       映射中的命令。我该如何做?

你可以使用'e'标志加给substitute命令,即使当一个模式搜索失败了,也可以执行映
射中的别的命令。

更多的资料,请读

    :help :s flags

11.16. 我该如何搜索一行中第n次出现的字符?

为了搜索一行中第n次出现的字符,你可以在'f'命令假上记数前缀。例如,搜索第5次
在行中出现的字符@,你可以使用命令5f@。这是假设光标在行的开始处-而且第一个字
符不是你要搜索的那个字符。

更多的资料,请读

    :help f
    :help F
    :help t
    :help T
    :help ;
    :help ,

11.17. 我该如何置换一个tab(或者别的字符)为一个回车符(新行符)?

你可以使用如下的命令来替换一个tab(或者别的字符)为一个换行符(新行符):

    :s/\t/\r/

记住,在上面的命令中,假如你使用\n代替\r,那么tab字符将不会被替换为新行符。

更多的资料,请读

    :help sub-replace-special
    :help NL-used-for-Nul
    :help CR-used-for-NL

11.18. 我该如何根据ascii值来搜索字符?

你可以在&quot;/&quot;命令后按下CTRL-V后,跟10进制或16进制或8进制数来根据ascii值搜索字
符。为了确定某个字符的ascii值,你可以使用&quot;:ascii&quot;或&quot;ga&quot;命令。

更多的资料,请读

    :help i CTRL-V digit
    :help :ascii
    :help ga

11.19. 我该如何搜索长行?

你可以在搜索命令中使用正则表达式搜索长行或者行中包含很多较长的字符系列。例
如,搜索所有超过80个字符的行,你可以使用如下的命令:

    /^.\{80}.*$
    /^.*\80c.*$

更多的资料,请读

    :help /\{
    :help /\%c

11.20. 我该如何显示当前缓冲区中所有包含模式匹配的行?

你可以使用如下的命令来显示当前缓冲区中所有包含某种模式的行:

    :g/&lt;pattern&gt;/p

例如,下面的命令会显示缓冲区中所有包含&quot;vim&quot;的行:

    :g/vim/p

假如你想获得相应的行数,键入如下的命令:

    :g/&lt;pattern&gt;/#

更多的资料,请读

    :help :global
    :help :print
    :help :number

11.21. 我该如何搜索一个跨越多行的字符串?

你可以使用\_x正则表达式的原子操作符来搜索一个跨越多行的文本。例如,搜索一个
字符串&quot;Hello world&quot;,你可以使用如下的搜索命令:

    /Hello\_sWorld

这将会匹配单词&quot;hello&quot;跟一个新行符和另一行行首的单词&quot;world&quot;。当然这个新行符
也可以是一个空格符。当搜索&quot;Hello World&quot;字符串时,

    /Hello\_s\+World

更多的资料,请读

    :help 27.8
    :help pattern-atoms
    :help /\
    :help pattern-searches

11.22. 我该如何搜索一个缓冲区中特定的行范围内的模式呢?

你可以使用\%&gt;l和\%&lt;l正则表达式原子操作符来搜索一定行范围内的模式。

例如,要搜索缓冲区中位于第10行和第30行内的单词'white'时,你可以使用如下的命
令:

    /white\%&gt;10l\%&lt;20l

更多的资料,请读

    :help /\%l

===========================================================================

章节 12 - 修改文本

12.1. 我该如何删除文件中,所有尾部的空白符(space 和 tab)?

你可以对整个文件使用&quot;:substitute&quot;命令来搜索并删除所有的尾部空白符:

    :%s/\s\+$//

更多的资料,请读

    :help :%
    :help :s
    :help /\s
    :help /\+
    :help /$

12.2. 我该如何置换所有多个连续的空白为单个空白符?

你可以使用如下的命令来置换所有出现的多个空白符为单个空白符:

    :%s/ \{2, }/ /g

更多的资料,请读

    :help :%s
    :help :s
    :help /\{
    :help :s flags

12.3. 我该如何置换一系列的空行为单个空行?

你可以使用如下的命令来减少一系列的空行为一行:

    :v/./.,/./-1join

对于这个命令的解释如下:

    :v/./           对所有的空行执行某项操作。
        ./          使用当前行作为行范围的首行
            /./     使用包含单个字符的行作为末行
                -1  调整行的范围把最后行的前一行作为末行
                j   把所有范围内的行合并

记住,假如空行是在文件的底部的话,那么这个命令将会报错。为了矫正这个错误,
你可以在文件的末尾假如一个临时行,执行完了命令后,在去掉那行。

更多的资料,请读

    :help :v
    :help :join
    :help cmdline-ranges
    :help collapse

12.4. 我该如何删除文件中的所有空白行?
      我该如何删除所有只包含空白符的行?

想删除所有的空白行,可以使用下面的命令:

    :g/^$/d

想删除那些行中只有空白符(space | tab)的行,使用下面的命令:

    :g/^\s\+$/d

删除那些只有空白符或者什么都没有的行,使用如下命令:

    :g/^\s*$/d


12.5. 我该如何copy/yank当前单词?

你可以使用&quot;yiw&quot;(yank无空白符单词)命令或者&quot;yaw&quot;(yank含空白符单词)命令来
copy/yank当前单词。

更多的资料,请读

    :help 04.6
    :help 04.8
    :help iw
    :help yank
    :help text-objects
    :help objects

12.6. 我该如何yank一行内的部分文本,而不会yanking整个行?

你可以定义一个详细的移动命令来yank一行内的部分文本。例如,yank当前文本从当
前的光标下到字符x为止,使用yfx或者Fx或者tx或Tx。打算yank到第n列,使用n|.打算
yank到下一个'word'出现为止时,使用/word.假如打算yank到另一行的第n列,首先可以
使用'ma'命令来标记位置,然后到需要yank的起始位置然后使用命令y`a(记住引号的方
向)

更多的资料,请读

    :help yank
    :help motion.txt
    :help 4.6

12.7. 我该如何在我已经往寄存器内存入文本后,继续往积存器中追加文本?

当你在对寄存器执行某些操作后,假如你使用的是大写寄存器名,那么新的文本将会被
追加入到已存在的内容中去.例如,假如你已经有一些文本在积存器&quot;a&quot;.那么,假如你打
算继续加入文本,你可以使用大写的&quot;A&quot;积存器名.假如你使用了小写的,那么原先的内
容将会被覆盖.

更多的资料,请读

    :help quote
    :help quote alpha
    :help 10.1

12.8. 我该如何yank一个跨越多行的完整的句子?

想yank一个圆括号内的,跨越多行的句子,可以使用yank操作符跟一个移动命令.例如:

        y)

在句子中,你可以使用'yi)'来yank这个句子.

更多的资料,请读

    :help yank
    :help (motion)
    :help object-motions
    :help 4.6
译者注:这个命令似乎有点运行的奇怪,建议大家自己试下.

12.9. 我该如何yank缓冲区内所有包含某种模式的行?

你可以使用&quot;:global&quot;命令来yang所有的包含模式的行到一个寄存器中.然后把寄存器
中的内容粘贴到缓冲区中:

    :let @a=''
    :g/mypattern/y A

第一个命令,是用来清除寄存器的内容.第二条命令拷贝所有的包含&quot;mypattern&quot;的行
到寄存器&quot;a&quot;中.记住大写字母的&quot;A&quot;是被用于追加匹配的行到寄存器中去的.现在你可
以使用&quot;ap命令来粘贴寄存器的内容到缓冲区上.

更多的资料,请读

    :help :g
    :help :y
    :help let-register
    :help quote alpha
    :help put
    :help registers
    :help :registers

12.10. 我该如何删除所有不包含某种模式的行?

你可以使用&quot;:v&quot;命令来删除所有不包含某种模式的行:

    :v/pattern/d

或者

    :g!/pattern/d

更多的资料,请读

    :help :v
    :help :g

12.11. 我该如何在每个匹配的模式行前面加入自定义的一行?

你可以使用如下的命令每个模式匹配的行的前面加入自己定义的一行:

    :g/pattern/normal Oi&lt;line of text goes here&gt;

当然你也可以使用Y命令yank某行,然后使用如下的命令来插入这些行:

    g/pattern/put!

更多的资料,请读

    :help :g
    :help :put
    :help insert
    :help 0

12.12. 是否有方法可以对包含模式的行的前一行进行某种操作?

你可以使用&quot;:global&quot;命令来操作包含特殊模式行的前一行:

    :g/&lt;pattern&gt;/+{cmd}

更多的资料,请读

    :help :g
    :help :range

12.13. 我该如何对所有包含某种模式的行执行某项命令?

你可以使用&quot;:global&quot;(:g)命令来对所有包含模式的行执行某项命令.

    :g/my pattern/d

假如你想使用non-Ex命令,你可以使用&quot;:normal&quot;命令:

    :g/my pattern/normal {command}

除非你使用的命令被重映射过,可以考虑使用&quot;:normal!&quot;来进行代替(记住&quot;!&quot;).

更多的资料,请读

    :help :global
    :help :v
    :help :normal

12.14. 我是否能拷贝光标上面的字符到光标当前的位置?

在插入模式下,你可以拷贝通过按下&lt;Ctrl-Y&gt;来拷贝光标上的字符到光标当前位置.而
拷贝下面的字符可以按&lt;Ctrl-E&gt;.

更多的资料,请读

    :help i CTRL-Y
    :help i CTRL-E

12.15. 我该如何插入一个空白行到当前行的上面/下面,而不用进入插入模式?

你可以使用&quot;:put&quot;ex命令来插入空白行.例如.尝试

    :put =''
    :put! =''

更多的资料,请读

    :help :put

12.16. 我该如何在当前缓冲区中插入当前文件的文件名?

有几种方法可以在当前缓冲区中插入当前文件的文件名.在插入模式下,你可以使用
&lt;C-R&gt;%或者&lt;C-R&gt;=expand(&quot;%&quot;)命令.在正常模式下,你可以使用&quot;:put =@%&quot;命令.

更多的资料,请读

    :help i CTRL-R
    :help expand()
    :help !!

12.17. 我该如何插入Vim寄存器的内容到当前缓冲区中?

在插入模式下,你可以使用&lt;C-R&gt;&lt;register&gt;命令来插入寄存器的内容.例如,使用
&lt;C-R&gt;a来插入寄存器a中的内容到当前缓冲区中.

在正常模式下,你可以使用&quot;:put &lt;register&gt;&quot;命令来插入&lt;register&gt;的内容.例如,使
用&quot;:put d&quot;命令来插入寄存器&quot;d&quot;中的内容到当前缓冲区中.

更多的资料,请读

    :help i CTRL-R
    :help :put


12.18. 我该如何移动光标越过行终结符,并在这个位置插入些文本?

你可以设置&quot;virtualedit&quot;选项来移动光标越过end-of-line,并在这个位置插入字符.
想启动虚拟模式,使用

    :set virtualedit=all

更多的资料,请读

    :help 'virtualedit'

12.19. 我该如何在Vim中置换光标下的单词(例如:junk)为&quot;foojunkbar&quot;?

这里有几种方法做这些.假如这个单词是行中的第一个单词,使用如下的命令:

    :exe &quot;s/&quot;.expand(&quot;&lt;cword&gt;&quot;).&quot;/foo&amp;bar.&quot;

为了匹配更加严格的单词,你可以使用更加复杂的置换命令:

    :exe 's/\&lt;'.expand(&quot;&lt;cword&gt;&quot;).'\%&gt;'.(col(&quot;.&quot;)-1).'c\&gt;/foo&amp;bar/'

你也可以使用命令: ciwfoo&lt;C-R&gt;&quot;bar&lt;Esc&gt;

更多的资料,请读

    :help :substitute
    :help expand()
    :help col()
    :help /\%c

12.20. 我该如何置换一个目录中所有文件中的一段特定文本?

你可以使用&quot;argdo&quot;命令来对在参数中指定的文件执行置换命令:

    :args *
    :argdo %s/&lt;your_text&gt;/&lt;replacement_text&gt;/ge | update

更多的资料,请读

    :help :args f
    :help :argdo
    :help :s flags

12.21. 我有一些数据在文件中.我该如何增大/减小文件中的数?

你可以使用CTRL-A来增大数字,使用CTRL-X来减小这个数.你也可以指定详细的需要增
大或减小的数.这个可以工作在10,8,16进制的数下.你也可以改变Vim使用的基数,需要
修改'nrformats'选项.

更多的资料,请读

    :help 26.2
    :help CTRL-A
    :help CTRL-X
    :help 'nrformats'

12.22. 我该如何在&quot;:substitute&quot;命令中使用上一次使用过的搜索模式?

想在&quot;:substitute&quot;命令中使用上一次的搜索模式.不需要重新指定:

    :s/pattern/newtext/
    :s//sometext/

在第二个&quot;:s&quot;命令中,搜索模式并没有被详细指定过,但是第一个&quot;:s&quot;命令中的搜索模
式会被使用到.

假如你想改变搜索模式,但是重复置换模式,你可以使用special right hand side,你
可以使用波浪符:

    :s/newpattern/~/

更多的资料,请读

    :help :s
    :help :&amp;
    :help :~
    :help sub-replace-special

12.23. 我该如何使用&quot;:substitute&quot;命令改变字符串的大小写?

你可以在&quot;:substitute&quot;命令中在置换字符串中使用特殊的字符来改变匹配字符串的大
小写.例如,想改动字符串&quot;MyString&quot;为大写,你可以使用如下的命令:

    :%s/MyString/\U&amp;/g

想改为小写,你可以使用如下命令:

    :%s/MyString/\L&amp;/g

想改动当前行的所有单词的第一个字符,为大写字符,你可以使用下面的命令:

    :/\&lt;\(.\)\(\k*\)\&gt;/\u\1\L\2/g

更多的资料,请读

    :help sub-replace-special
    :help :substitute
    :help \U
    :help \L
    :help \u

12.24. 我该如何键入那些不在键盘上的字符?

你可以使用digraphs来键入那些不在键盘上的字符.你可以使用&quot;:digraphs&quot;命令来显
示所有当前定义的连字.你可以使用&quot;:digraphs&quot;命令来增加新的连字图标到列表中.

更多的资料,请读

    :help digraphs
    :help 'digraphs'
    :help 24.9

12.25. 是否有命令来删除任何一个或者所有的连字图标?

没有.digraphs表是在编译时被定义的.你只能往里面加入新的.在todo列表中,已经打
算加入一个命令来删除所有的图标.

12.26. 在插入模式中,当我按下backspace键,它只会删除我在这个插入模式实例中所
       键入的字符.我该如何使用&lt;bacispace&gt;删除我在以前的插入模式中所键入的字
       符?

 你可以设置&quot;backspace&quot;选项来擦除上次插入模式中所键入的字符:

    :set backspace=indent,eol,start

更多的资料,请读

    :help 'backspace'
    :help i backspacing

12.27. 我有一个文件,其中的一些行超过了72字符,并以&quot;+&quot;结尾,然后就饶行了.我该
       如何快速合并这些行?

你可以使用&quot;:global&quot;命令来搜索并合并这些行:

    :g/+$/j

然后,上面的例子,只能用来合并两行.下面有两个更复杂的例子可以合并所有连续的
以&quot;+&quot;结尾的行:

    :g/*$/,/\(^\|[^+]\)$/j
    :g/+$/mark a \ .,/\(^\|[^+]\)$/s/+$// | 'a,.j

更多的资料,请读

    :help :g
    :help :j
    :help :mark

12.28. 我该如何粘贴被yank的文本到一个新行中去?

你可以使用&quot;:put&quot;命令来粘贴被yank的文本到新行中去:

    :put =@&quot;

更多的资料,请读

    :help :put
    :help quote =

12.29. 我该如何改变文本中单词/字符/块的大小写?

你可以使用&quot;~&quot;命令拉来转变字符的大小写.

你可以使用&quot;gUiw&quot;或者&quot;viwU&quot;命令来改变光标下的单词为大写,也可以使用&quot;guiw&quot;或者
&quot;viwu&quot;来改为小写.

你可以使用&quot;viw~&quot;或者&quot;g~iw&quot;命令转换光标下单词的大小写(大写转成小写,或相反).

你也可以使用&quot;gUgU&quot;命令来转换当前行都为大写,也可以使用&quot;gugu&quot;把当前行都转换为
小写.

你可以使用&quot;g~g~&quot;来切换当前行的大小写状态.你可以使用&quot;g~{motion}&quot;或者使用
&quot;{Visual}~&quot;命令来切换一个文件块的大小写.

更多的资料,请读

    :help case

12.30. 我该如何键入那些不在键盘上的ASCII字符?

你可以通过按下CTRL-V然后跟上ASCII字符号来输入那些不在键盘上的ASCII字符.你也
可以使用digraphs来输入特殊的ASCII字符.

更多的字符,请读

    :help i CTRL-V digit
    :help digraphs
    :help 45.5

12.31. 我该如何置换文件中那些不可显示(non-printable)字符?

想置换一个不可显示字符,你首先要确定那个字符的ASCII值.你可以使用&quot;:ascii&quot;ex
命令或者普通模式下的&quot;ga&quot;命令来显示当前光标下字符的ASCII值.

你可以通过输入CTRL-V后跟一个10进制数1-255(没有前导的0),或者跟x加一个16进制
数00-FF,又或者是0-0377(有前导的0),或者是u加一个16进制数0-FFFF,还或者是U加一
个16进制数0-7FFFFFFF.

另外一个办法就是使用&quot;:digraphs&quot;ex命令来显示所有字符的连字,以及他们的10进制
值和字符.你可以键入CTRL-K后跟二个字母数字型字符(一个连字)来输入一个不可显
示字符.

更多资料,请读

    :help :ascii
    :help i CTRL-V
    :help i CTRL-V digit
    :help :digraphs

12.32. 我该如何从一个缓冲区中删除相同的行?

你可以使用下列用户定义的命令来从缓冲区中删除所有用户定义的行:

:command -range=% Uniq &lt;line1&gt;,&lt;line2&gt;g/^\%&lt;&lt;line2&gt;l\(.*\)\n\1$/d

假如以上你的命令到你的.vimrc文件中,然后调用&quot;:Uniq&quot;来删除所有的相同的行?

12.33. 我该如何给文件中的所有行,加上正确的行数前缀?

你可以使用几种方法来给文件中的所有行加上行前缀,一些方法在下面列出:

    :%s/^/\=line('.').' '
    :%s/^/\=strpart(line(&quot;.&quot;).&quot;     &quot;,0, 5)
    :g/^/exec &quot;s/^/&quot;.strpart(line&quot;.&quot;.&quot;    &quot;, 0, r)

更多的资料,请读

    :help sub-replace-special
    :help line()
    :help expr6
    :help strpart()
    :help :execute
    :help :global

12.34. 我该如何交换两个字符/单词/行?

你可以使用&quot;xp&quot;来交换两个字符.'x'会删除当前光标下的字符,而'p'会粘贴干才删除
掉的字符到当前光标的右边.这样就可以交换两个字符了.

你可以使用&quot;deep&quot;的合成命令来交换两个单词(光标必须得停留在第一个单词的左边空
白处).

你可以使用&quot;ddp&quot;来交换两行.'dd'会删除行,而'p'会粘贴删除的行到当前的行下面.这
样就可以交换两行了.

所有上面的操作都会改变&quot;的无名寄存器.

你可以使用&quot;:m +&quot;ex命令来交换两行而不用改动寄存器中的内容.

更多的资料,请读

    :help x
    :help p
    :help dd
    :help d
    :help e
    :help linewise-register
    :help quotequote
    :help :move

12.35. 我该如何改变用做单词定界符的字符?

Vim使用被'iskeyword'选项定义的字符作为单词定界符.默认的选项是&quot;@,48-57,_,
192-255&quot;.

例如,假如想增加':'为单词定界符,你可以使用

    :set iskeyword+=:

想删除单词定界符的'_',你可以使用

    :set iskeyword-=_

更多的资料,请读

    :help 'iskeyword'
    :help word

===========================================================================

章节 13 - 插入模式下的补全

13.1. 我该如何在插入模式下补全单词或行?

在插入模式下,你可以使用CTRL-P和CTRL-N键来补全单词.CTRL-N会向前搜索匹配的单
词.而CTRL-P会向后搜索匹配的单词.

在插入模式中,你可以使用CTRL-X CTRL-L命令序列来对光标前的字符序列相同的行进
行补全.假如想得到下一个匹配,可以按CTRL-P或CTRL-N键.在插入模式中,有很多的键
或方法可以用来补全单词.

Vim支持对以下条目的补全:

    CTRL-X CTRL-F   文件名
    CTRL-X CTRL-L   整行
    CTRL-X CTRL-D   macro definitions (also in include files)
    CTRL-X CTRL-I   当前和被包含的文件
    CTRL-X CTRL-K   字典里的单词
    CTRL-X CTRL-T   辞典里的单词
    CTRL-X CTRL-]   tags
    CTRL-X CTRL-V   Vim命令行

更多的资料,请读

    :help 24.3
    :help ins-completion

13.2. 我该如何在插入模式下进行文件名的补全?

在插入模式下,你可以使用CTRL-X CTRL-F命令序列来以当前行中,光标前的相同的字符
进行文件名的补全.

更多的资料,请读

    :help compl-filename

13.3. 我使用CTRL-P/CTRL-N在插入模式下补全单词.我该如何在刚补全的单词后继续
      补全单词?

你可以使用CTRL-X CTRL-N和CTRL-X CTRL-P在刚补全的单词后继续补全单词.

更多的资料,请读

    :help i CTRL-X CTRL-P
    :help i CTRL-X CTRL-N
    :help ins-completion

===========================================================================

章节 14 - 格式化文本

14.1. 我该如何格式化一个文本段落使其在每个回饶行后插入一个新行符?

你可以使用'gq'命令来格式化段落,他们将会根据当前的'textwidth'设置来格式化文
本.

记住gq操作符后该跟一个移动命令来操作一个范围内的文本.例如:

    gqgq - 格式化当前行
    gqqp - 格式化当前段落
    gq3j - 格式当前行和接着的三行

更多的资料,请读

    :help gq
    :help formatting
    :help usr 25.txt
    :help motion.txt

14.2. 我该如何格式化文件中的长行使每行包含少于'n'个的字符?

你可以设置'textwidth'选项来控制出现在文件中的行的字符数.例如,想控制行的字符
宽度为70字符,你可以使用下面的命令:

    set textwidth=70

现在可以把文件中的长行断开为'textwidth'选项规定的长度,你可以使用

    :g/./normal gqq

更多的资料,请读

    :help 'textwidth'
    :help gq

14.3. 我该如何合并一些短行来形成一个段落?

首先,确定'textwidth'选项设置一个高的值:

    :set textwidth=99999

下一步,使用命令来合并短行来形成一个段落:

    1GgqG

以上的命令会操作整个文件.假如想对特定范围内的段落进行格式化,使用:

    :'a,'bg/\S/normal gq}

更多的资料,请读

    :help gq
    :help G
    :help gqq

14.4.

14.5. 我该如何在插入模式下缩进行?

在插入模式下,你可以按CTRL-T键来在当前行的起始处插入一个缩进.在插入模式下,你
可以使用CTRL-D键来删除当前行起始处的shiftwidth或indent.你也可以使用
CTRL-O &gt;&gt;和CTRL-O &lt;&lt;命令来在插入模式下缩进当前行.

更多的资料,请读

    :help i CTRL-T
    :help i CTRL-D
    :help i O CTRL-D
    :help i CTRL-O
    :help &gt;&gt;
    :help &lt;&lt;
(译者注:奇怪的是,这些帮助命令无法在我这里很好的工作)

14.6. 我该如何格式化/缩进整个文件?

你可以使用gg=G命令来格式化/缩进整个文件,

    gg - 到文件头位置
    =  - 执行缩进
    G  - 到文件尾

更多的资料,请读

    :help gg
    :help =
    :help G
    :help 'formatprg'
    :help C-indenting

14.7. 我该如何增加或减少当前行的缩进?

你可以使用'&gt;&gt;'和'&lt;&lt;'命令来增加或减少当前行的缩进.

更多的资料,请读

    :help shift-left-right
    :help &gt;&gt;
    :help &lt;&lt;
    :help 'shiftwidth'

14.8. 我该如何缩进块或组?

你可以在可视模式选择一个行组然后按&gt;或&lt;来缩进/反缩进这个组.你也可以使用下面
的ex-command来缩进这些行:

    :10,20&gt;

更多的资料,请读

    :help shift-left-right
    :help v &gt;
    :help v &lt;
    :help :&lt;
    :help :&gt;

14.9. 当我使用&lt;,&gt;键缩进时,标准的8-tabstops代替了当前的'tabstop'设置.为什么?

使用&quot;&gt;&quot;操作符时,使用的格数是由'shiftwidth'选项控制的.'tabstop'设置并没有被
用于缩进.想改变缩进使用的空格数,使用如下命令:

    :set shiftwidth=4

更多的资料,请读

    :help 'shiftwidht'
    :help &gt;&gt;
    :help 'softtabstop'

14.10. 我该如何关闭文件的自动缩进?

默认的,文件的自动缩进是没有开启的.检查配置文件(.vimrc, .gvimrc)中有关缩进的
设置.确认&quot;:filetype indent on&quot;命令没有出现.假如出现了,删除他.当然,基于你自
己的选择,你也可以来检查'autoindent','smartindent','cindent'和'indentexpr'
选项并按需要来关闭他们.

更多的资料,请读

    :help :filetype-indent-off
    :help 'autoindent'
    :help 'smartindent'
    :help 'cindent'
    :help 'indentexpr'

14.11. 我该如何在当我编辑邮件的时候自动的把'textwidth'设置为特殊的值?

你可以使用'FileType'自动命令来设置'textwidth'选项:

    autocmd FileType mail set tw=&lt;your_value&gt;

更多的资料,请读

    :help :autocmd
    :help FileType
    :help usr 43.txt

14.12. 是否有方法使Vim魔法般的自动断行?

有.设置'textwidth'选项来做为一行长度的首选值.然后Vim将会自动的进行断行了.
例如:

    :set textwidth=75

更多的资料,请读

    :help 'textwidth'

更多资料,请读

    :help 'textwidth'
    :help ins-textwidth
    :help 'formatoptions'
    :help fo-table
    :help formatting

14.13. 我在自己的文件中看到了很多^M符号.我尝试着设定'fileformat'选项,为
       'dos',然后是'unix',再跟'mac'.但是似乎没有什么效果.我该如何隐藏这些
       字符?

当一个文件被载入Vim中,文件的格式是由以下的东西所决定:

- 假如所有的行都是以新行符(&lt;NL&gt;)结尾,那么这个文件格式就是'unix'.

- 假如所有的行以&lt;CR&gt;&lt;NL&gt;结尾,那么这个文件格式就是'dos'.

- 假如所有的行都以&lt;CR&gt;结尾,那么这个文件格式就是'mac'.

假如这个文件有一些行以&lt;CR&gt;结尾,有一些行以&lt;CR&gt;&lt;NL&gt;结尾,那么文件格式就为'uni-
x'.

你可以通过设置'fileformat'选项,并保存文件,来改变当前文件的格式:

    :set fileformat=dos
    :w

想显示当前文件的格式,使用

    :set fileformat?

上面的工作方式是由'fileformats'选项控制的.你可以尝试如下的命令:

    :set fileformats+=unix
    :e &lt;your_file&gt;
    :set fileformat=unix
    :w

假如想删除当前文件所有行尾的回车符,你可以用如下命令:

    :%s/\r^//

假如想强迫Vim使用一种特殊的格式,你可以在编辑一个文件时,使用如下命令:

    :e ++f=dos filename

更多的资料,请读

    :help 'fileformats'
    :help 'fileformat'
    :help file-formats
    :help DOS-format-write
    :help Unix-format-write
    :help Mac-format-write
    :help dos-file-formats
    :help 23.1
    :help ++ff

14.14. 当我从一个应用程序处复制了很多文本,粘贴到Vim缓冲区中的时候,所有的格
       式对齐(缩进)都没了,我该如何修正这些问题?

文本缩进的消失是由于不同的Vim中关于缩进的设置略有不同造成的(例如autoindent,
smartindent,textwidth etc).在粘贴文本到Vim前,你可以设置'paste'选项:

    :set paste

在粘贴完了文本后,你可以关闭这些选项:

    :set paste!

假如你能通过*寄存器存取剪贴板,然后你可以使用CTRL-R CTRL-O *,粘贴无缩进的文
本.

更多的资料,请读

    :help 'paste'
    :help 'pastetoggle'
    :help i_CTRL-R_CTRL_O
    :help clipboard
    :help xterm-clipboard
    :help gui-clipboard

14.15. 当一个长行饶行(wrap为&quot;on&quot;),所饶的行中的字符变成了'@'.假如我尝试滚动
       屏幕来安放这些行,那么'@'符号消失了然后这些行的字符又出现了.vim是如何
       控制这些行为的?

你可以设置'display'选项为'lastline'来尽可能的显示窗口最后的行以代替显示'@'
字符.

    :set display=lastline

更多的字符,请读

    :help 'display'

14.16. 我该如何转换文件Tab字符为空格字符?

你可以使用&quot;:retab&quot;命令来跟使用当前对'expandtab'和'tabstop'的设置来转变当前
文件中的Tab字符.例如,转变所有的字符为空格,使用:

    :set expandtab
    :retab

更多的资料,请读

    :help 'display'

14.17.

14.18. 我该如何能够合并两行而不用增加或减少任何的空格字符?

默认的,当你使用&quot;J&quot;或&quot;:join&quot;命令,Vim会在断行的处增加一个空格.假如这行以空格
符结尾或者以')'作为下一行的开始字符,那么Vim将不会往Vim中增加空格字符.

假如想合并行而不用增加或减少任何空白符,你可以使用gJ或&quot;:join!&quot;命令.

更多的资料,请读

    :help gJ
    :help :join
    :help J
    :help 10.5
    :help 'joinspaces'
    :help 'cpoptions'
    :help 'formatoptions'

===========================================================================

章节 15 - 可视模式

15.1. 我该如何做矩形块拷贝?

你可以使用可视模式中的块拷贝.使用CTRL-V键来开启块拷贝模式.使用任何的移动键
来移动光标,然后使用y操作符来yank可视模式中选择的文本.

假如CTRL-V不能如预期般的工作,可能是因为在windows系统中的mswin.vim脚本被
vimrc所调用,来模仿一些别的程序中的快捷键,导致了CTRL-Q被重映射.

更多的资料,请读

    :help 04.4
    :help blockwise-visual
    :help visual-mode
    :help Q vi

15.2. 我该如何删除文件中的竖向文本?

你可以在Vim的可视模式下执行块操作来选择竖向文本,并执行操作(删除,修改,拷贝,
等等).

更多的资料,请读

    :help visual-block
    :help visual-operators

15.3. 我该如何对可视模式中被选择的文本执行Ex命令?

当你在可视模式下选择了一定范围的文本,那么&lt;寄存器被设置为指向可视区域的开始
处而&gt;寄存器指向了结尾.你可以使用这些寄存器来指定区域,并执行ex命令.在可视化
模式中选择了文本后,按下&quot;:&quot;或跳入到命令行模式.Vim会自动插入可视区域'&lt;','&gt;'.
你可以对可视区域运行任何Ex命令.

更多的资料,请读

    :help v :
    :help '&lt;
    :help '&gt;

15.4. 我该如何对被选择的竖向文本执行Ex命令?

所有的Ex命令都是对整行的.假如你想对竖向文本执行Ex命令,那么Vim会把命令作用于
所有被选择的行上(包括被选择的列).你可以使用vis.vim插件来完成这方面的工作,从
<a href="http://vim.sourceforge.net上可以得到">http://vim.sourceforge.net上可以得到</a>.

更多的资料,请读

    :help cmdline-ranges
    :help 10.3
    :help cmdline-lines

15.5. 我该如何在可视模式下选择整个文件?

你可以在可视模式下使用ggVG来选择整个文件.

    gg - 到文件开始处
    V  - 开启可视模式的行选择
    G  - 到文件尾

更多的资料,请读

    :help gg
    :help linewise-visual
    :help G

15.6. 当我在可视模式中选择了部分文本后,按了&gt;键来缩进被选择的行,缩进模式也就
      结束了.我该如何重新选择这个区域来做更多的操作?(或着)我该如何重新选择
      上一次可视模式所选择的区域?

你可以在使用'gv'命令来重新选择上一次选择的文本.你也可以使用'&lt;和'&gt;来跳到可视
模式中的开始和结束处.

更多的资料,请读

    :help gv
    :help '&lt;
    :help '&gt;

15.7. 我该如何跳到可视模式中选择区域的开始/结束处?

你可以使用'o'命令来跳到开始/结束处.

更多的资料,请读

    :help v o

15.8. 当我用鼠标选择了文本后并按下了:来输入一个ex命令时,被选择的文本被置换
      成了:字符。我该如何用鼠标像在可视模式下那样选择了文本后,可以输入命令?

假如你通过设置'selectmode'选项来配置Vim,用选择模式代替可视模式,那么就会出现
这种情况.可以先检查这个值:

    :set selectmode?

被人所熟知的选择模式非常类似于可视模式.当你使用&quot;behave mswin&quot;命令时,那么这个
选项就会被自动设置.选择模式看起来很像可视模式,而且在MS-Windows下也是非常类似
的.

更多的资料,请读

    :help Select-mode
    :help 'selectmode'
    :help 9.4
    :help :behave

15.9. 当我用鼠标选择了文本后,Vim进如了选择模式而不是可视模式.为什么?

'selectmode'选项控制了,当用鼠标选取文本后,是否会启动选择模式.想在使用鼠标选
择文本后开启可视模式,可以从'selectmode'选项删除'mouse'值来实现这个功能:

    :set selectmode-=mouse

记住默认的,'selectmode'选项会被设置为空,所以一般都是使用可视模式的.

跟多的资料,请读:

    :help 'selectmode'
    :help Select-mode
    :help :behave

15.10. 我该如何以可视模式选择上次拷贝/粘贴过的文本?

你可以使用'[和']标志来以可视模式选择上次拷贝/粘贴过的文本.'[标记着上次拷贝/
粘贴文本的开头而']标记着结尾.想以可视模式来重选择文本,可以使用命令'[v'].

更多的资料,请读

    :help '[
    :help ']
    :help 'a
    :help v

===========================================================================

章节 16 - 命令行模式

16.1. 我该如何在命令模式中或着一个ex命令中使用当前文件的名字?

在命令行中,'%'字符会解释为当前文件的名字.在一些命令中,可能不得不使用
expand(&quot;%&quot;)来得到文件的名字:

    &quot;!perl%

更多的资料,请读

    :help : %
    :help cmdline-special
    :help expand()

16.2. 我该如何在命令行中有效率的编辑文本?

你可以使用命令行窗口来编辑Vim命令行文本.在正常模式下,可以使用&quot;q:&quot;打开Vim的
命令行窗口.在命令行模式中,使用CTRL-F键.在这个窗口中,命令历史记录会被显示出
来.你可以使用正常的Vim键/命令来编辑任何以前/新的命令行.假如想执行一个命令,
可以按下enter/return键.

形似的,搜索历史可以用&quot;g/&quot;和&quot;g?&quot;命令来编辑.

更多的资料,请读

    :help cmdline-window

16.3. 我该如何切换Vi模式到Ex模式?

你可以使用Q命令来从Vi模式切换到Ex模式.想从Ex模式切换回Vi模式,可以使用:vi命
令.

更多的资料,请读

    :help Q
    :help gQ
    :help Ex-mode
    :help :vi

16.4. 我该如何拷贝一个Ex命令的外部输出到一个缓冲区中去?

想拷贝一个Ex命令的输入到一个缓冲区中去,你首先得把命令所产生的输出到一个寄存
器中去.你可以使用&quot;:redir&quot;命令把外部输出的内容导入到寄存器中.例如,

    :redir @a
    :g/HelloWorld/p
    :redir END

现在寄存器'a'已经包含了来自ex命令&quot;g/HelloWord/p&quot;的输出了.现在你可以粘贴寄存
器'a'的文本到缓冲区中了.你也可以发送/追加一个ex命令的输出到一个文件中,但是
要使用'redir'命令.

你可以增加&quot;:global&quot;命令和&quot;:silent&quot;作为前缀,来避免这些行被写入到屏幕上.

想重定向一个Ex命令的输出到一个文件中去,你可以使用如下的命令集:

    :redir &gt; myfile
    :g/HelloWord/p
    :redir END

更多的资料,请读

    :help :redir
    :help :silent

16.5. 当我在命令行中按下tab键来补全文件名时,假如有超过一个匹配那么Vim会补全
      第一个匹配的文件名并显示所有匹配文件名的列表.我该如何配置Vim仅显示所
      有的匹配文件名而不会补全为第一个匹配的文件名?

你可以修改'wildmode'选项来配置Vim在命令行补全文件名的方式.在这里,你可以设置
'wildmode'选项为'list':

    :set wildmode=list

更多的资料,请读

    :help 'wildmode'

16.6. 我该如何拷贝文本从缓冲区到命令行中或者从命令行到缓冲区中?

在从缓冲区中yanking文本后,使用CTRL-R 0在命令行中粘贴文本,就可以从缓冲区中
拷贝文本到命令行中了.你也可以yank文本到一个指定的寄存器中然后使用CTRL-R
&lt;register&gt;来粘贴文本到命令行中.你也可以使用CTRL-R CTRL-W来粘贴光标下的单词
到命令行中.

想从命令行中抽取文本拷贝到缓冲区中,你可以使用&quot;:p命令来粘贴:寄存器中的内容.
经常使用的命令行存储在:寄存器中.

另外一种方法可以实现这些功能的就是在普通模式下使用q:或在命令行模式下使用
CTRL-F来打开命令行窗口模式.在命令行窗口模式你可以使用所有的Vim命令来编辑命
令行.

更多的资料,请读

    :help c CTRL-R
    :help quote :
    :help cmdline-window

16.7. 我该如何把一条命令放入到命令行历史中而不用执行它?

想把一条命令放入到命令的历史记录中而不执行它,只用输入命令并按&lt;Esc&gt;来结束这
个命令即可.

更多的资料,请读

    :help c &lt;Esc&gt;

16.8. 我该如何增加命令行的高度?

你可以通过修改'cmdheight'悬想来增加命令行的高度:

    :set cmdheight=2

更多的资料,请读

    :help 'cmdheight'
    :help hit-enter
    :help 05.7

===========================================================================

章节 17 - VIMINFO

17.1. 当我调用Vim时,我得到了一条错误信息是有关在viminfo文件中存在非法字符的
      问题.我该如何去掉这些错误信息?

你可以删除$HOME/.viminfo或者$HOME/_viminfo来去掉这些错误信息.

更多的资料,请读

    :help viminfo-errors
    :help viminfo-file-name
    :help viminfo
    :help 21.3

17.2. 我该如何关闭viminfo特性?

默认的,viminfo特性是被关闭的.假如viminfo特性被一个系统广泛支持的vimrc文件所
开启,那么你可以通过在你自己的.vimrc中设置'viminfo'选项为空串来关闭viminfo特
性.

    :set viminfo=&quot;&quot;

更多的资料,请读

    :help 'viminfo'

17.3. 我该如何跨越多个Vim会话,来保存和使用Vim标记?

你可以使用viminfo文件来跨越多个Vim会话保存并恢复Vim标记.想使用viminfo文件,
首先必须得确定'viminfo'选项不为空.想保存并恢复Vim标记,那么'viminfo'选项不能
包含'f'标志位或者对于'f'选项的值必须得大于0.

更多的资料,请读

    :help 21.3
    :help viminfo
    :help 'viminfo'
    :help :wviminfo
    :help :rviminfo

===========================================================================

章节 18 - 远程编辑

18.1.

18.2. 我该如何发送一个命令到Vim服务器端要求写入所有的缓冲区到硬盘中?

你可以使用如下的Vim远程服务函数来做这些:

    $gvim --servername myVIM --remote-send &quot;&lt;-\&gt;&lt;C-N&gt;:wall&lt;CR&gt;&quot;

更多的资料,请读

    :help client-server
    :help CTRL-\ CTRL-N
    :help :wall

18.3. 我该从哪里得到有关于Vim远程服务函数的文档?

你可以使用下面的命令来得到关于Vim远程服务函数的文档资料:

    :help client-server

===========================================================================

章节 19 - 选项

19.1. 我该如何以较简单的方式配置Vim?

你可以使用&quot;:options&quot;命令打开Vim选项窗口:

    :options

这个窗口可以被用于查看和设置所有的选项.

更多的资料,请读

    :help :options

19.2. 我该如何

19.3. 我该如何设置一个只会影响当前缓冲区/窗口的选项?

一些Vim选项有局部/全局值.局部值可以被用于一个指定的缓冲区/窗口.而全局值可以
被用于所有的缓冲区或窗口.

当一个Vim选项使用&quot;:set&quot;命令来改变Vim选项的值时,全局值和局部值都被改变.你可
以使用&quot;:setlocal&quot;变量来仅修改这个选项的局部值而&quot;:setglobal&quot;命令仅修改这个选
项的全局值.

你可以使用&quot;:setlocal&quot;命令来设置一个仅影响当前文件/缓冲区的选项.

    :setlocal textwidth=70

记住并不是所有的选项都有一个局部值的.你可以使用&quot;:setlocal&quot;命令来设置一个只
局部于某个缓冲区/窗口的选项,当然,前提是这个选项有局部值.

你也可以使用如下的命令来设置局部选项:

    :let &amp;l:{option-name} = &lt;value&gt;

更多的资料,请读

    :help :setlocal
    :help local-options

19.4. 我该如何在一个Vim选项中使用空格符?

想在Vim选项的值中使用空格符,你可以使用转义空格符.例如:

    :set tags=tags\ /usr/tags

更多的资料,请读

    :help option-backslash

19.5. 我该如何把对Vim选项的一些设置加入(插入)到文件的内容中去?

你可以使用模式行来增加Vim选项设置到文件内容中去.例如,在C文件中,你可以增加如
下的命令到文件的头部或尾部中去:

    /* vim:sw=4 */

当编辑C文件时,这将会设置'shiftwidth'选项为4.想完成这个功能,那么必须设置
'modeline'选项.默认的,'modeline'选项被设置.'modelines'会严格的指定Vim会检查
大约多少行.

更多的资料,请读

    :help 21.6
    :help modeline
    :help auto-setting
    :help 'modeline'
    :help 'modelines'

19.6. 我该如何显示文件中行的行号?

你可以设置'number'选项来显示所有行的行号.

    :set number

更多的资料,请读

    :help 'number'

19.7. 我该如何改变使用&quot;number&quot;选项所开启的显示行号所占的列的宽度?

'number'选项所开启的行号显示,所站的列宽度是靠Vim中编程硬性实现的.所以是没有
可能改变的.

现在这个要求,已经被加入到Vim列表中了:

    &quot;Add an option to set the width of the 'number' column. Eight
    positions is often more than needed. Or adjust the width to the length
    of the file?
    Add patch that adds 'numberlen' option. (James Harvey)
    Other patch with min and max from Emmanuel Renieris (2002 Jul 24)
    Other patch with out an option by Gilles Roy (2002 Jul 25)&quot;

19.8. 我该如何查看文件中的所有不可显示字符如space,tabs和newlines?

你可以设置'list'选项来查看你文件中的所有不可显示字符.

    :set list

当这个选项设置后,你可以查看所有的space,tabs,newlines,trailing space和
wrapped lines.

想要不显示这些非可见字符(默认的),你可以重置'list'选项:

    :set nolist
    (or)
    :set list!

&quot;:set list!&quot;命令将会

你可以修改'listchars'选项来配置如何显示那些不可见字符.例如,下面的命令就是把
尾部空格符显示为'.'字符.

    :set listchar=trail:.

更多的资料,请读

    :help 'listchars'
    :help 'list'

19.9. 我该如何配置Vim来显示当前行号,和列号?

你可以设置'ruler'选项来在状态栏上显示当前的行号和列号:

    :set ruler

更多的资料,请读

    :help 'ruler'

19.10. 我该如何显示当前Vim所在的模式?

你可以设置'showmode'选项来显示当前Vim的模式.在插入,置换,和可视模式中,Vim会
显示当前模式在末行中.

    :set showmode

更多的资料,请读

    :help 'showmode'

19.11. 我该如何配置Vim使其在状态栏上显示未完的/未决的命令?

你可以设置'showcmd'选项来在状态栏上显示为完的/未决的命令:

    :set showcmd

更多的资料,请读

    :help 'showcmd'

19.11. 我该如何配置Vim在状态行上显示未决的/部分的命令?

你可以设置'showcmd'来在状态行上显示为决的/部分的命令:

    :set showcmd

更多的资料,请读

    :help 'showcmd'

19.12. 我该如何配置Vim来显示不同的设置/值?

你可以设置'statusline'选项来显示不同的值/设置在Vim的状态行上.

更多的资料,请读

    :help 'statusline'
    :help 'laststatus'
    :help 'rulerformat'
    :help 'ruler'

19.13. 我该如何配置Vim来总是显示状态行?

你可以设置'laststatus'选项为2来总是显示状态行.

    :set laststatus=2

更多的资料,请读

    :help 'laststatus'

19.14.

19.14. 我该如何使一个Vim设置可以相当稳定的在不同Vim的invocations/instances/
       sessions通用?

假如想通用的话,请增加你的设置到.vimrc或.gvimrc文件中.你也可以使用&quot;:mkvimrc&quot;
命令来对于当前设置产生一个vimrc文件.

更多的资料,请读

    :help save-settings
    :help vimrc
    :help gvimrc
    :help vimrc-intro
    :help :mkvimrc
    :help initialization

19.15. 我该如何当我按下了&lt;ESC&gt;时过了一秒后,听到一次响声?

这是正常的行为.假如你的窗口闪烁了,那么你是得到了可视的响声.否则,你应该听到
一次响声.

Vim需要一个过期时间来辨别一个转义符和正常的键序列.当你在正常模式下按了键(即
使是在插入模式下),然后这个键是个映射的开始,Vim将会等待小会时间来查看剩下的
键序列.假如在给定的过期时间之前能够完成这个映射序列,那么这个键所映射的序列
将会被实现.假如你中断了这个映射,那么关于这些键的正常行为将会被执行.

例如,假如你有一个映射是如此定义的&quot;:imap vvv Vim is great!!&quot;,然后你迅速的键
入&quot;vvv&quot;,那么&quot;Vim is great!!&quot;将会插入到你的文本中去.但是假如你键入了&quot;vv v&quot;那
么这些文字会插入到你的文本中.或者你键入的相当慢,相当慢指的是你键入的时间超
过了规定的过期时间.把这个过期时间设置的大些,可以帮助你减轻因为较慢的输入速
度而产生的问题.

更多的资料,请读

    :help ttimeout

19.16. 我该如何使'c'和's'命令显示一个'$',而不是删除我正在改变的字符?

想使'c'和's'命令显示'$'代替删除字符,可以增加$标志到'cpoptions'选项中去:

    :set cpoptions+=$

更多的资料,请读

    :help 'cpoptions'

19.17. 我该如何使用单个&quot;:set&quot;命令删除一个Vim选项中的多个标志?

你可以通过按照它们在选项中出现的顺序,通过使用&quot;:set&quot;命令来删除多个标志.例如,
你使用下面的命令来删除'formatoptions'选项里的't'和'n'标志:

    :set formatoptions-=tn

't'和'n'标志将会从'formatoptions'选项中删除,仅当'formatoptions'选项包含这个
顺序的标志:'tn'.否则,它将不会删除这个标记.为了避免这个问题,你应该一个一个的
删除标志:

    :set formatoptions-=t formatoptions-=n

更多的资料,请读

    :set :set-=

===========================================================================

章节 20 - 映射

20.1. 我该如何知道某个键被映射做什么?

想知道一个键被映射为什么,可以使用如下的命令:

    :map &lt;key&gt;
    :map! &lt;key&gt;

你也可以使用下面的命令来检查特殊模式下的映射,&quot;:cmap&quot;,&quot;:nmap&quot;,&quot;:vmap&quot;,&quot;:ima-
p&quot;,&quot;:omap&quot;,之类.

更多的资料,请读

    :help map-listing
    :help map-overview

20.2. 我该如何列出所有用户定义的键映射?

你可以使用下列命令来列出所有用户定义的键映射:

    :map

更多的资料,请读

    :help map-listing

20.3. 我该如何解射(unmap)一个已被用于映射的键?

你可以使用&quot;:unmap&quot;命令来解射一个前面被用于映射的键:

    :unmap &lt;key&gt;
    :unmap! &lt;key&gt;

对于更多模式下的映射,你可以使用
&quot;:nunmap/:vunmap/:ounmap/:iunmap/:lunmap/:cunmap&quot;命令.

下列的命令在解射一个局部于缓冲区的映射会失败:

    :unmap &lt;key&gt;

想解射一个局部于缓冲区的映射键,你必须使用&lt;buffer&gt;关键字在unmap命令中:

    :unmap &lt;buffer&gt; &lt;key&gt;
    :unmap! &lt;buffer&gt; &lt;key&gt;

更多的资料,请读

    :help :unmap
    :help map-modes
    :help map-local
    :help 'mapleader'

20.4. 对于&lt;xxx&gt;键,我不能建立它的映射,这是怎么回事?

首先确定这个键确实已经传送给了Vim.在插入没收下,按CTRL-V后,在敲入想要的键

20.5. 我该如何映射小键盘上的键?

首先确定小键盘上的键已经传给Vim了.接下来,你可以使用下面的命令来映射小键盘上
的键了:

    :map &lt;kSomething&gt; &lt;your_command&gt;

&lt;kSomething&gt;可以是kHome,kEnd,kPageUp,kPageDown,kPlus,kMinus,
kDivide,kMultiply,kEnter,etc.

更多的资料,请读

    :help key-code
    :help terminal-options

20.6. 我该如何建立一个只工作在可视模式下的映射?

你可以建立指定模式下的映射(普通,命令,插入,可视,等等).想建立一个只工作在可视
模式下的映射,使用&quot;:vmap&quot;命令:

    :vmap &lt;F3&gt; &lt;your mapping here&gt;

更多的资料,请读

    :help :vmap
    :help map-modes
    :help 40.1

20.7. 在一个Vim脚本中,我该如何知道哪些键被用于映射,以使我用于映射的键不会和
      已存在的映射想冲突?

Vim使用键盘上的绝大多数的键.你可以使用&lt;leader&gt;作为映射中的前缀来定义键而不
会和Vim中使用的键想冲突.例如:

    :map &lt;leader&gt;S &lt;C-W&gt;s
    :map &lt;leader&gt;j &lt;C-W&gt;j
    :map &lt;leader&gt;k &lt;C-W&gt;k

默认的&lt;leader&gt;会被替换成\,所有用户该敲入

    \s
    \j
    \k

来调用上面的映射命令.用户可以改变mapleader变量为任何他们想要的键:

    :let mapleader = &quot;,&quot;

当在写一个插件或别的脚本的时候,更多的,比较可取的方法是使用:noremap代替:map
来避免用户定义的映射所导致的边际效果.

更多的资料,请读

    :help &lt;Leader&gt;
    :help &lt;LocalLeader&gt;


</pre>
</body>
</html>

Version: 
Create a group - Google Groups - Google Home - Terms of Service - Privacy Policy
©2009 Google