时隔一个多月没更了, 这频率委实慢了些😄️
虽慢但不弃坑, 来继续填坑😉.
从这一节开始, 我们正式来学 VimScript 的语法知识啦.
先从变量开始. 来看下变量的声明, 赋值及作用域.
声明与赋值
VimScript 使用 let 来声明变量.
:let foo='bar' |
会分别输出:
bar |
之前我们提到 option, option 可以通过 &{option}
来做为变量进行读写操作.
看个例子:
:set textwidth=80 |
会依次输出:
80 |
这里也可以看出, 把 option 转为变量, 使用 let 来更新 option 的值, 比 set option={value}
要灵活一些.
如果只想针对当前 Window 的 option 进行写操作而不修改全局的 option, 只需要给变量添加相应的 namespace 即可.[其实是变量的作用域, 待会会提到]
= 10 |
此时输出是10. [我们也可以使用:setlocal textwidth = 10
来设置 local textwidth]
开一个新的 Window, 继续输出:
:e text.txt |
此时输出是 90.
说明刚刚针对 textwidth 的修改, 只对前一个 Window 有效.
[ 这里需要在不同的 Windows 下进行上面的操作, 因为同一个 Window 下的 buffers 共享相同的 option, 如果在同一个 Window 下的不同 buffer 中执行 :echo &textwidth
, 输出都是10.]
除了 option 外, registers 也可以作为变量来进行读写. 格式为 @{register}
比如, 我们设置寄存器 a 的值为 hello.
:let ="hello" |
Normal 模式下, 在文件的任何位置, 按"ap
, Vim 会把 寄存器 a 的值 hello, 粘贴在光标处.
也可以读取寄存器的值. 在文件中, 选中某个单词, 比如 world, 按 y
后, 在命令行执行:
:echo @" |
会输出 world.
使用:help registers
, 可以查看所有可以读写的寄存器.
除了声明变量外, 当我们想要删除某个变量时, 可以使用 unlet
.
:unlet foo |
此时会输出错误信息: Undefined variable: foo.
注意, unlet 不能用于 &{option}
, @{register}
.
作用域
在设置 local option 时, 我们已经提到了作用域.
现在以 buffer 为例, 我们来定义一个 buffer-variable:
= "world" |
输出: world.
在另一个 buffer 中, 执行:
:echo b:hello |
输出: Undefined variable: b:hello.
因为声明的 b:hello 只对前一个 buffer 有效.
可以通过 :help internal-variables
, 来查看内部变量的 scope 列表.
|buffer-variable| b: Local to the current buffer. |
这里可以看出, 刚刚我们通过&l:textwidth={value}
设置了textwidth, 我们可以猜 Vim 中的 {option}
, {option}=
本质上应该是个函数.
上述列表中的 script-variable, function-argument 大量存在plugin中,随意选择一个Vim 插件,查看其源代码,就会看到s:var
, a:var
的身影.
OK, 变量的介绍就到这啦, 下一篇来说说 if.