这一章的内容结合了前面学到的知识.
Buffer-Local, 顾名思义, 基于 Buffer, 只针对当前 Buffer 有效.
前面遇到的 mappings, options , abbreviations, 当需要只对当前 Buffer 生效时, 命令分别是什么呢?
来逐个说明下.
mappings
打开任意文件, 在命令行模式下, 输入:
:nnoremap <buffer> <Leader>x dd
normal 模式下, 按
<Leader>x
, 等同于dd, 删除当前行.此时, 另开一个文件, 执行同样的操作, 按
<Leader>x
, 没有变化.Buffer-Local mappings 跟通用的 mappings 不一样的地方, 就是多了一个
<buffer>
, 也很好记.需要稍稍注意的是, 当 buffer 与
<Leader>
结合时, 建议使用<LocalLeader>
来代替<Leader>
, 这样避免覆盖了他人的<leader>
mapping.上面的例子建议改成:
:nnoremap <buffer> <LocalLeader>x dd
再看个例子:
:nnoremap <buffer> Q x
:nnoremap Q ddnormal 模式下, 按 Q, 发现执行的操作等同 x. 第二个 mapping 配置无效.
Buffer-Local mappings 会覆盖对应的通用的 mappings 配置.这点同 set options 不大一样, 待会会提到.
set options
基于 Buffer-Local 的设置, 用命令
setlocal
.打开任意文件, 在命令行模式下, 输入:
:set number
:setlocal nonumber会发现行号已经消失.
需要注意的是, 如果 setlocal option 后, 又 set 了同一个 option, 则 setlocal 所做的改变会被覆盖.
比如:
:setlocal nonumber
:set number
:setlocal number?此时输出的结果是 number.
abbreviations
同 mappings, Buffer-Local abbreviations 也只需要在
abbrev
后, 添加一个<buffer>
, 看个例子:在当前打开的文件下, 命令行模式输入:
:iabbrev <buffer> log logger.debug
切换到 insert 模式, 输入log, 会替换成 logger.debug.
此时, 更换另一个文件, 再次在 insert 模式下, 输入log, 发现没有变化.
同 mappings 一样, Buffer-Local abbreviations 会覆盖通用的 abbreviations.
刚刚设置的文件中, 命令行模式输入:
:iabbrev log logger.info
切换到 insert 模式, 输入log, 替换的仍然是 Buffer-local 设置的 logger.debug.
OK. Buffer-Local 基本缕完, 下一章来点不一样的.