vim中经常用let和set给变量赋值,主要操作的变量分为几种类型
- variables。用户自己定义的变量
- options。系统定义的变量
- register。其实这个不是变量,是register的名字,也可以使用let赋值,本文放一起讨论
variables:自定义变量
自定义变量一般出现在脚本中,如果你不想写个vim插件,基本上不会去碰自定义变量。我们碰到自定义变量的场景,大多数是在使用vim插件的时候,需要配一下相关变量。
variable使用let赋值,语法:
:help variables //设置 let foo=123 //查看 echo foo
options:系统变量
options是用户经常碰到的变量,比如说我们想设置下工作路径,tab等于多少个字符,显示行号等,都是设置option。
options使用set赋值,但是也可以用let &option的方式进行赋值,语法:
:help options //查看 echo &path 设置方法1 let &path=&path+/user/include 设置方法2 set path+=/usr/lib //查看当前值 set option? //恢复默认值 set option&
register变量
register可以用let直接赋值,语法:
//设置 let @a = "hello!" //查看 echo @a
local vs global作用域
无论是options,还是variables,都分为local和global作用域。比如打开了两个文件,在文件1中设置了local属性,只对文件1有效,文件2无效
- global针对当前的vim实例。
- local是仅对当前的buffer
使用的命令有set, setl, setg:
:help set :help setg :help setl
具体区别如下:
- set会同时设置local和global
- setl只设置local
- setg只设置global
Command global value local value :set option=value set set :setlocal option=value - set :setglobal option=value set - :set option? - display :setlocal option? - display :setglobal option? display -
当设置global的时候,并不会覆盖local的值。除非使用<符号,比如:
:setg path<
同理, 除了使用set,也可以使用let设置
//系统变量 let &[g|l]:optionname=xxx //自定义变量 let [g|l]:optionname=xxx
let还可以指定更复杂的范围:
To set a local variable, use w, b, t, s, or l instead of g in g:var.
w is for the current window, b is for the current buffer, t is the current tab, s is the current script, and l is the current function.If you don’t use a prefix, it defaults to global (but l if inside a function)
let vs set
set只用于设置系统变量
let可以用于设置所有变量,包括自定义变量
发表回复