vim状态行不显示问题:set laststatus=2
移除状态行:set laststatus=0
Set tabstop=4 tab缩进4个空格
在名称的前面加一个 & 符号是告诉Vim你正在引用这个选项,而不是在使用一个名称刚好相同的变量。
如果你想将某个选项作为变量来设置它的本地值,而不是全局值,你需要在变量名前面加前
缀。
你也可以将寄存器当作变量来读取和设置。
当某个变量由一个字符和冒号开头,那么这就表示它是一个作用域变量。
对字符串进行比较时使用==#或者==?进行大小写敏感与大小写不敏感的比较来减少因为用户设置而造成的问题(例如 set ignorecase)。
没有作用域限制的Vimscript函数必须以一个大写字母开头!
Vimscript里调用函数有两种不同的方法:使用call命令 --在表达式里调用函数。
一个vimscript函数不返回一个值,它隐式返回0。
当你在Vim中定义了一个接受可变参数的函数, a:0 将被设置为你额外给的参数数量(译注:注意是额外的参数数量)。
可以使用 a:1 , a:2 等等来引用你的函数接受的每一个额外参数。
当一个函数可以接受可变参数, a:000 将被设置为一个包括所有传递过来的额外参数的列表(list)。不能对列表使用echom。
不能对参数变量重新赋值。
. 是Vim中的"连接字符串"运算符,可以用来连接字符串。
echom的输出跟echo的输入有时会有所不同。主要是对特殊字符的转义显示 \n ^@
使用单引号将告诉Vim,你希望字符串所见即所得,无视转义字符串。 一个例外是一行中连续两个单引号将产生一个单引号。(译注:相当于某种转义)
execute 命令用来把一个字符串当作Vimscript命令执行。
normal 命令简单地接受一串键值并当作是在normal模式下输入的。就是那么简单!
normal命令将顾及当前的所有映射。这意味着我们需要给 normal 提供类似于 nnoremap 之于 nmap 的版本, 否则我们没法使用它——考虑到我们猜测不了用户的映射方式。在写Vim脚本时,你应该总是使用 normal! ,永不使用 normal 。不要信任用户在 ~/.vimrc 中的映射。
normal! 不会解析像 <cr> 那样的特殊字符序列。之前我们尝试过用 normal! 来执行一个搜索命令却无法输入必须的回车来开始进行搜索。 结合 execute 和 normal! 将解决这个问题。execute 允许你创建命令,因而你能够使用Vim普通的转义字符串来生成你需要的"打不出"的字符。
我们用 <c-u> 来执行"从光标所在处删除到行首的内容",移除多余文本。
使用负数索引一个字符串会没有报错地得到一个空字符串。
当键仅由字母,数字和/或下划线组成时,Vimscript也支持Javascript风格的"点"查找。
如果一个Vimscript变量要引用一个函数,它就要以大写字母开头。
~/.vim/plugin/
~/.vim/plugin/ 下的文件将在每次Vim启动的时候执行。 这里的文件包括那些无论何时,在启动Vim之后你就想加载的代码。
~/.vim/ftdetect/
~/.vim/ftdetect/ 下的文件在每次你启动Vim的时候也会执行。ftdetect 是"filetype detection"的缩写。 这里的文件仅仅负责启动检测和设置文件的 filetype 类型的自动命令。 这意味着它们一般不会超过一两行。
~/.vim/ftplugin/
~/.vim/ftplugin/ 下的文件则各不相同。一切皆取决于它的名字!当Vim把一个缓冲区的 filetype 设置成某个值时, 它会去查找 ~/.vim/ftplugin/ 下对应的文件。 比如:如果你执行 set filetype=derp ,Vim将查找 ~/.vim/ftplugin/derp.vim 。 一旦文件存在,Vim将执行它。Vim也支持在 ~/.vim/ftplugin/ 下放置文件夹。 再以我们刚才的例子为例: set filetype=derp 将告诉Vim去执行 ~/.vim/ftplugin/derp/ 下的全部 *.vim 文件。 这使得你可以按代码逻辑分割在 ftplugin 下的文件。因为每次在一个缓冲区中执行 filetype 时都会执行这些文件,所以它们只能设置buffer-local选项! 如果在它们中设置了全局选项,所有打开的缓冲区的设置都会遭到覆盖!
~/.vim/indent/
~/.vim/indent/ 下的文件类似于 ftplugin 下的文件。加载时也是只加载名字对应的文件。indent 文件应该设置跟对应文件类型相关的缩进,而且这些设置应该是buffer-local的。是的,你当然可以把这些代码也一并放入 ftplugin 文件, 但最好把它们独立出来,让其他Vim用户理解你的意图。这只是一种惯例,不过请尽量体贴用户并遵从它。
~/.vim/compiler/
~/.vim/compiler 下的文件非常类似于 indent 文件。它们应该设置同类型名的当前缓冲区下的编译器相关选项。
~/.vim/after/
~/.vim/after 文件夹有点神奇。这个文件夹下的文件会在每次Vim启动的时候加载, 不过是在 ~/.vim/plugin/ 下的文件加载了之后。这允许你覆盖Vim的默认设置。实际上你将很少需要这么做,所以不用理它, 除非你有"Vim设置了选项 x ,但我想要不同的设置"的主意。
~/.vim/autoload/
~/.vim/autoload 文件夹就更加神奇了。事实上它的作用没有听起来那么复杂。简明扼要地说: autoload 是一种延迟插件代码到需要时才加载的方法。
~/.vim/doc/
最后, ~/.vim/doc/ 文件夹提供了一个你可以放置你的插件的文档的地方。 Vim对文档的要求是多多益善(看看我们执行过的所有 :help 命令就知道),所以为你的插件写文档是重要的。
Vim设置 runtimepath 以便查找要加载的文件。
Vim自动替你把 ftdetect/*.vim 文件包装成自动命令组。
为了高亮某个语法:
你首先要用 syntax keyword 或相关命令(我们待会会提到),定义一组语法类型。
然后你要把这组类型链接到高亮组(highlighting groups)。 一个高亮组是你在配色方案里定义的东西,比如"函数名应该是蓝色的"。
自动加载调用的函数要使用绝对路径进行定义。当Vim找到它需要自动加载的文件后,它在调用对应函数之前就加载了整个文件。
网友评论