本地缓冲区的选项设置和映射
编辑教程本地缓冲区的选项设置和映射
现在我们先花点时间复习一下我们已经谈论过的三个东西:映射(mappings),缩写(abbreviations)和选项设置(options),这个过程中会讲到一些新的东西。我们将在一个单一的缓冲区中同时设置它们。
这一章所讲到的东西会在下一章中真正的显示它们的作用,目前我们只需先打下基础。
在这一章中你需要在Vim中打开两个文件,两个文件是分开的。我先将它们命名为foo和bar,你可以随便对它们命名。然后为每个文件输入一些文字。
映射
选择文件foo,然后执行下面的命令:
:nnoremap <leader>d dd
:nnoremap <buffer> <leader>x dd
现在保持在文件foo下面,确保当前处于常用模式下,然后敲击<leader>d。Vim会删除一行。这个之前讲到过,没什么新鲜的。
仍然保持在文件foo下面,敲击<leader>x。Vim也会删除一行。这很正常,因为我们也将<leader>x映射到dd了。
现在切换到文件bar。在常用模式下敲击<leader>d。同样的,Vim会删除当前行,也没有什么新鲜的。
ok,现在来点新鲜的:在文件bar下敲击<leader>x。
Vim只删除了一个字符,而不是删除整个行! 为什么会这样?
第二个nnoremap命令中的<buffer>告诉Vim这个映射只在定义它的那个缓冲区中有效:
当你在bar文件下敲击<leader>x,Vim找不到一个跟它匹配的映射,它将会被解析了两个命令:<leader>(这个什么都不会干)和 x(通常会删除一个字符)。
本地Leader
在这个例子中,<leader>x是一个本地缓冲区映射,不过这种定义方式并不合适。如果我们需要设定一个只会用于特定缓冲区的映射,一般会使用<localleader>,而不是<leader>。
使用两种不同的leader按键就像设置了一种命名空间,这会帮助你保证所有不同的映射对你而言更加清晰直接。
但你在编写一个会被其他人用到的插件的时候,这点显得尤其重要。使用<localleader>来设置本地映射会防止你的插件覆盖别人用<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 <buffer> Q x
:nnoremap Q dd
然后敲击Q,看看会发生什么?
当你敲击Q,Vim会执行第一个映射,而不是第二个,因为第一个映射比起第二个要显得更具体,这可以看成第二个映射被第一个映射遮盖了。
切换回文件bar,然后敲击Q,Vim会使用第二个映射。这是因为在这个缓冲区中第二个映射没有被第一个映射遮盖。
选择支付方式:
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间