×

vi 命令手册

vi/vim 命令大全

vim 命令手册

Vim 关于Vim 安装Vim 用法Vim 配置vim 配置.vimrc方案vim 配置.vimrc方案1vim 配置.vimrc方案2Vim 文件合并Vim 技巧和建议Vim 插件Vim 参阅

Vimscript 编程参考

Vimscript 前言Vimscript 鸣谢Vimscript 预备知识Vimscript 打印信息Vimscript 设置选项Vimscript 基本映射Vimscript 模式映射Vimscript 精确映射Vimscript LeadersVimscript 编辑你的Vimrc文件Vimscript AbbreviationsVimscript 更多的MappingsVimscript 锻炼你的手指本地缓冲区的设置和映射Vimscript 自动命令Vimscript 本地缓冲区缩写Vimscript 自动命令组Operator-Pending 映射Operator-Pending 更多映射Vimscript 状态条Vimscript 负责任的编码Vimscript 变量Vimscript 变量作用域Vimscript 条件语句Vimscript 比较Vimscript 函数Vimscript 函数参数Vimscript 数字Vimscript 字符串Vimscript 字符串函数Vimscript Execute命令Vimscript Normal命令Vimscript 执行normal!Vimscript 基本的正则表达式Grep 运算符Operator 第1部分Grep 运算符Operator 第2部分Grep 运算符Operator 第3部分Vimscript 列表Vimscript 循环Vimscript 字典Vimscript 切换Vimscript 函数式编程Vimscript 路径Vimscript 创建一个完整的插件Vimscript 基本插件配置方式用Pathogen配置插件Vimscript 检测文件类型Vimscript 基本语法高亮Vimscript 高级语法高亮Vimscript 基本折叠Vimscript 高级折叠Vimscript 段移动原理Vimscript Potion段移动Vimscript 外部命令Vimscript 自动加载Vimscript 文档Vimscript 发布Vimscript 还剩下什么?

Vimscript 本地缓冲区的选项设置和映射


现在我们先花点时间复习一下我们已经谈论过的三个东西:映射(mappings),缩写(abbreviations)和选项设置(options),这个过程中会讲到一些新的东西。我们将在一个单一的缓冲区中同时设置它们。

这一章所讲到的东西会在下一章中真正的显示它们的作用,目前我们只需先打下基础。

在这一章中你需要在Vim中打开两个文件,两个文件是分开的。我先将它们命名为foobar,你可以随便对它们命名。然后为每个文件输入一些文字。

映射

选择文件foo,然后执行下面的命令:

:nnoremap          d dd
:nnoremap  x dd

现在保持在文件foo下面,确保当前处于常用模式下,然后敲击d。Vim会删除一行。这个之前讲到过,没什么新鲜的。

仍然保持在文件foo下面,敲击x。Vim也会删除一行。这很正常,因为我们也将x映射到dd了。

现在切换到文件bar。在常用模式下敲击d。同样的,Vim会删除当前行,也没有什么新鲜的。

ok,现在来点新鲜的:在文件bar下敲击x

Vim只删除了一个字符,而不是删除整个行! 为什么会这样?

第二个nnoremap命令中的告诉Vim这个映射只在定义它的那个缓冲区中有效:

当你在bar文件下敲击x,Vim找不到一个跟它匹配的映射,它将会被解析了两个命令:(这个什么都不会干)和 x(通常会删除一个字符)。

本地Leader

在这个例子中,x是一个本地缓冲区映射,不过这种定义方式并不合适。如果我们需要设定一个只会用于特定缓冲区的映射,一般会使用,而不是

使用两种不同的leader按键就像设置了一种命名空间,这会帮助你保证所有不同的映射对你而言更加清晰直接。

但你在编写一个会被其他人用到的插件的时候,这点显得尤其重要。使用来设置本地映射会防止你的插件覆盖别人用设置的全局映射,因为他们可能已经对他们做设置的全局映射非常之习惯了。

设置

在这本书的前面几个章节里,我们谈论了使用set来设置选项。有一些选项总是会适用于整个Vim,但是有些选项可以基于缓冲区进行设置。

切回到文件foo,执行下面的命令:

:setlocal wrap

然后切换到文件bar,执行下面的命令:

:setlocal nowrap

把你的Vim窗口调小一些,你会发现有些行在foo中会自动换行,而在bar中则不会。

让我们来测试下另外一个选项。切换到foo执行下面的命令:

:setlocal number

现在切换到bar,然后执行下面的命令:

:setlocal nonumber

现在在文件foo中会出现行号,而在bar则没有。

不是所有的选项都可以使用setlocal进行设置。如果你想知道某个特定的选项是否可以设置为本地选项,执行:help查看它的帮助文档。

对于本地选项如何_真正地_地工作,我说的有些简略。在练习中你会学到更多这方面的细节。

遮盖

ok,在开始下一节之前,我们先来看关于本地映射的一个非常有趣的特性。切换到文件foo,然后执行下面的命令:

:nnoremap  Q x
:nnoremap          Q dd

然后敲击Q,看看会发生什么?

当你敲击Q,Vim会执行第一个映射,而不是第二个,因为第一个映射比起第二个要显得更具体,这可以看成第二个映射被第一个映射遮盖了。

切换回文件bar,然后敲击Q,Vim会使用第二个映射。这是因为在这个缓冲区中第二个映射没有被第一个映射遮盖。

练习

阅读:help local-options

阅读:help setlocal

阅读:help map-local


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)