VimScript笔记
VimScript 五分钟入门(翻译) - 知乎
Vimscript 高级折叠_w3cschool
wsdjeg/vim-plugin-dev-guide: Vim 插件开发指南
基本语法
:source %
: %表示当前文件的路径
e #
: 切换到最近编辑的另一个文件
expand() 将具有特殊意义的标记(如%,#,
文件名修饰
文件名修饰是指如何从一个文件名中获取其目录、全路径名、后缀名等相关的名字字符串。函数 fnamemodify({fname}, {mods}) 的第二参数就叫做修饰符,修饰符以冒号开头带一个单字母表示不同意义,且可连续使用。主要的修饰符如:
:p
文件全路径名:h
父目录名(文件名头部,去除路径分隔符最后一部分):t
文件名尾部(一般是 ':h' 剩余部分,纯文件名):e
文件名后缀:r
文件名主体(相对于 ':e' 而言,不包括后缀,但可能包含父目录)
变量
let
命令用来对变量进行初始化或者赋值。unlet
命令用来删除一个变量。unlet!
命令同样可以用来删除变量,但是会忽略诸如变量不存在的错误提示。
默认情况下,如果一个变量在函数体以外初始化的,那么它的作用域是全局变量;而如果它是在函数体以内初始化的,那它的作用于是局部变量。同时你可以通过变量名称前加冒号前缀明确的指明变量的作用域:
g:var - 全局 a:var - 函数参数 l:var - 函数局部变量 b:var - buffer 局部变量 w:var - window 局部变量 t:var - tab 局部变量 s:var - 当前脚本内可见的局部变量 v:var - Vim 预定义的内部变量
含$
前缀的变量是环境变量。
含v:
前缀的变量是 vim 内部提供的预定义常量或变量。用户不能增删这类特殊变量,也不能修改其类型与含义。v:
本身也是个字典集合变量,可用:echo v:
命令查看所有这类变量。比如v:lnum
表示和折叠功能相关的行号。
含&
前缀的变量表示选项的值,相当于把选项变量化,以便于在 VimL 中编程。比如&filetype
表示文件类型。
字符串比较
<string>
==<string>
: 字符串相等<string>
!=<string>
: 字符串不等<string>
=~<pattern>
: 匹配 pattern<string>
!~<pattern>
: 不匹配 pattern<operator>#
: 匹配大小写<operator>?
: 不匹配大小写
注意:设置选项 ignorecase
会影响 == 和 != 的默认比较结果,可以在比较符号添加 ? 或者 # 来明确指定大小写是否忽略。
函数
强制创建一个全局函数(使用感叹号),参数使用 ...
这种不定长的参数形式时,a:1 表示 ...
部分的第一个参数,a:2 表示第二个,如此类推,a:0 用来表示 ...
部分一共有多少个参数。
function! g:Foobar(arg1, arg2, ...) let first_argument = a:arg1 let index = 1 let variable_arg_1 = a:{index} " same as a:1 return variable_arg_1 endfunction
插件开发
<SID>含义
Vim 脚本学习笔记 · 幽谷奇峰 | 燕雀鸣幽谷,鸿鹄掠奇峰
<SID>
和 <Plug>
都是用来避免映射的键序列和那些仅仅用于其它映射的映射起冲突。
<Plug>
在脚本外部是可见的。它被用来定义那些用户可能定义映射的映射,
<SID>
是脚本的 ID,用来唯一的代表一个脚本。
命令补全
wsdjeg/vim-plugin-dev-guide: Vim 插件开发指南
command! -nargs=* -complete=custom,helloworld#complete HelloWorld call helloworld#test()
其中 -complete=custom,helloworld#complete
表示,改命令的补全方式采用的是自定义函数 helloworld#complete。
vim运行时目录
插件的目录,可参考 vim 本身安装的运行时目录。所谓运行时目录,顾名思义,就是在 vim 运行时如果要加载 *.vim 脚本,应该到哪里找文件。
有两个相关的环境变量,可用如下命令查看:
:echo $VIM :echo $VIMRUNTIME
如果从源码安装 vim ,且自定义安装于家目录的话,它们的值大概如下:
$VIM = ~/share/vim $VIMRUNTIME = ~/share/vim/vim81
所以
:!ls -F $VIMRUNTIME
$VIMRUNTIME 既是官方目录,显然是不建议用户在其内修改或增删的。如果不是自定义安装在个人家目录,使用系统默认安装的 vim 的话,普通用户也无权修改。于是 vim 提供了一个选项叫 &runtimepath (常简称 &rtp),那是类似系统 shell 的环境变量 $PATH,就是一组目录,只不过不用冒号分隔,而是用逗号分隔。可用如下命令查看 &rtp :
:echo &rtp :echo split(&rtp, ',')
通常,~/.vim/ 目录会在 &rtp 列表中,而且往往是第一个。另外,官方目录
一般建议用户将个人的 vimrc 及其他 vim 脚本放在 ~/.vim/ 目录中。可以用这个命令:
:echo $MYVIMRC
查看当前你运行的 vim 启动时读取 vimrc。如果显示是 ~/.vimrc ,则建议将其移至 ~/.vim/vimrc 或软链接指向它。vim 会尝试读取 vimrc 的几个位置及顺序,也可用如下命令查看:
:version
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!