原文
2023
更好的UTF-16支持
添加strutf16len()和utf16idx(),并在byteidx(),byteidxcomp()和charidx()中添加utf16标志,在内置.txt文档中.
添加'crypymethod' xchacha20v2
与xchacha20基本相同,但更能抵御libsodium的变化.
2022
添加"smoothscroll"
用鼠标滚动换行屏幕行,而不是文本行.
在"statusline"和"tabline"中添加'showcmdloc',%S
控制"showcmd"的显示位置,或添加到状态行或标签行.
支持kitty-keyboard-protocol键盘协议,添加'keyprotocol'
对KiTTY终端;更好处理修改键.
添加WinResized事件
更改窗口大小时触发,事件.
WinScrolled适合非活动窗口,有更多信息
以前,仅适合当前窗口,且不提供更改内容信息,滚动.
在col()和charcol()中添加winid选项
从另一个窗口取光标列,col,char.
在readblob()中添加offset和size参数,允许读取符设备
之前,总是读取整个文件,读块.
添加'lispoptions'
设置lispoptions=indentexpr:1,在启用'lisp'时允许使用'indentexpr'.
添加TextChangedT
在终端窗口中,更改文本后触发.
在"shortmess"中添加"C"
在补全(ins-completion)过程中抑制消息
声音功能可在macOS上运行
sound_playevent()这里现在适合macOS.
添加:echowindow
在弹窗中显示消息;同时添加popup_findecho()这里.这里
在"fillchars"中添加最后一行
设置当'display'包含fillchars或truncate时使用的符.
添加"splitkeep"
控制打开,关闭或调整水平分割时的滚动行为.
matchaddpos()可添加许多匹配项
以前限制为8个,这里.
虚文本
允许添加虚文本到缓冲.
放弃对WindowsXP和Vista的支持
添加keytrans()
转换转义序列为串,这里.
添加:defer
退出函数时运行代码,这里.
在writefile()和mkdir()中添加'D'标志
在退出函数时,删除文件或目录,1,2.
在窗口终端中设置光标形状
termcap-cursor-shape适合窗口,这里.
添加getscriptinfo()
:scriptnames,但对脚本来说更方便,这里,1.
添加setcmdline()
从脚本设置命令行内容和光标位置,这里.
添加indexof()
用回调函数,在列表中查找值,这里.
支持双,点和虚线下划线
可在:highlight中使用双,点和虚下划线属性.
添加virtcol2col()
从虚列中取字节索引,这里.
添加<<和>>符号
按位移位符号.
添加autocmd_add(),autocmd_get(),autocmd_delete()
操作autocmd的函数,加,取,删.
在'formatoptions'中添加/
在带内联注释(仅'cindent')的行上使用o时,不要插入\\.
加getcmdcompltype(),getcmdscreenpos()
取当前命令行补全的类型和位置1,2.
加串插值
串以$为前缀时,允许在{...}内使用式;如
$"Hello, {$USER} at {strftime('%c', localtime())}"
添加列到"breakindentopt"
在指定列处缩进软包装行.
恢复映射
mapset()接受从maparg()或maplist()返回的字典,从而可轻松保存和恢复映射.
1,2,3
添加isabsolutepath()
检查路径是否为绝对路径,1.
添加maplist()
取所有映射列表.这里
添加hl-CurSearch
高亮当前搜索匹配项.这里
允许在heredoc中使用式
如果添加了eval,则允许heredoc中按=expr的表达式:
let lines =<< trim eval ENDSee the file `=$HOME`/.vimrc
END
支持通道中的LSP
在通道中支持语言-服务器-协议(LSP).
添加--log
启动时开始记录.
WinScrolled事件
滚动窗口内容后触发.
添加:profile停止和转储
(以前仅在退出Vim时),允许停止分析并把配置文件转储到文件中.这里
在Unix域套接字上打开通道
ch_open("unix:/tmp/socket")
添加"fuzzy"到"wildoptions"中
命令行的"模糊"补全.
DirChangedPre事件
在更改目录前触发.
在"errorformat"中添加%e和%k
尾行和列.
将"pum:"添加到'wildoptions'
对命令行补全,显示弹出菜单.
添加"timeout"到"spellsuggest"
限制搜索拼写建议时间;以前总是5000毫秒.
在可视模式下的P
在可视模式下"放"(粘贴)文本,而不会复制已删除文本到未命名寄存器中.
win_move_separator(),win_move_statusline()
移动并调整窗口大小.1,2
2021
内置.txt
把eval.txt拆分为内置.txt
在*expr选项中允许本地脚本函数
现在可用如setdiffexpr=s:MyDiffExpr().
添加:argdedeupe
从参数列表中删除重复项.
reduce(),filter()和map()对串起作用
赋值λ给带函数的选项
'operatorfunc','tagfunc','completefunc','omnifunc'和'imactivatefunc'现在可接受λ.
添加hl-CursorLineSign,hl-CursorLineFold
调整"'cursorline'"的符号高亮.
添加hlget(),hlset()
编程操作高亮.1,2
添加WinClosed事件
关闭窗口时触发.
添加v:colornames
映射颜色名到十六进制代码.
添加"guiligatures"
支持在GTKGUI中使用连字.
添加'thesaurusfunc'
同义补全的函数.
ModeChanged事件
在更改模式时触发.这里
添加多空格到"listchars"
无论在哪,显示两个或多个空格.
添加digraph_get(),digraph_getlist(),digraph_set(),digraph_setlist()
列举并定义函数的二分法.1
2
3
4
添加列表到"breakindentopt"
对(用"formatlistpat"设置)匹配编号列表或项目符号列表的行添加额外缩进.
添加\%.l,\%<.l和\%>.l模式
匹配光标当前所在行;见/\%l这里.
添加'cryptmethod'=xchaha20
libsodium的更安全加密.
添加zp,zP,zy
zp不带尾随空格按块模式粘贴,zy不带尾随空格复制.
加{%到"状态行"
{%expr%}按"statusline"格式串重新计算式.
在:vimgrep中添加f标志
"模糊"匹配:vimgrep结果.这里
添加"autoshelldir"
从终端窗口自动更改Vim中的目录.
添加strcharlen()
分别组合符,取串计数的长度这里.
遍历串
循环串为'for char in "str"';循环是用组合符按代码点的.
扩展"fillchars"
新值:"eob"更改(~)表示不存在的行,"foldopen","foldclose"和"foldsep"更改"foldcolumn"标记.
可按每窗口设置"fillchars"(以前总是全局的).还允许在"fillchars"和"statusline"中使用多字节符.
添加followwrap到"diffopt"
对差异窗口,不要重置"换行".
添加fullcommand()
从缩写中取完整命令名(如:s->:substitute),这里
lead:在"ListChars"中
设置"list"时,高亮前导空格.
检测终端中的焦点事件
FocusGain和FocusLost自动命令可在终端内工作.见xterm-focus-event.
:sleep!
休息并隐藏光标.
添加charcol(),getcharpos(),setcharpos(),getcursorcharpos(),setcursorcharpos()
col(),getpos(),setpos(),getcurpos(),cursor()的多字节相关版本.
2020
加charidx()
转换字节索引为符索引.
添加VimSuspend和VimResume
暂停/恢复时触发;仅针对<C-z>而不是SIGSTP/SIGCONT信号.1,2
添加<Cmd>
勿更改此键映射中的模式,以便无需使用<C-u>或<C-o>,插入或可视模式中映射总是有效.如,noremap<C-q><Cmd>:normal!K<CR>
:sort和sort()可本地相关排序
:sortl或sort(...,'l').
matchfuzzy(),matchfuzzypos()
"模糊"匹配.
添加InsertLeavePre
离开插入模式前触发这里.
??符号
echo value ??
如果值为空,则用上面.
添加gettext()
可用来翻译插件.这里
添加setcellwidths(),charclass()
允许覆盖宽度歧义符的显示宽度.
添加g<Tab>;支持:tabnext#,:tabclose#等
g<Tab>返回上次访问的选项卡,而:tab*命令中的#引用上次访问的选项卡.
expand('<SID>')
对*func和*expr设置很有用,如
let &includexpr = expand('<SID>') .. 'fun()'
来使用s:fun()
添加"quickfixtextfunc"
自定义快修窗口的文本内容;也可按参数传递给setqflist()这里
为readir(),readirex()添加排序
向readdir()和readdirex()添加可选参数以控制排序.这里和这里
添加terminalprops()
列举此终端支持功能.
添加'spelloptions'
唯一接受的值是驼峰(camel)来拼写检查CamelCase单词.
添加SigUSR1autocmd
用来检测SIG_USR1的事件.
添加flatten()
变平列表
添加getreginfo()
返回寄存器信息细节;可通过传递给setreg()这里来恢复.
添加searchcount()
取有关当前搜索的细节.
允许在终端中设置下划线颜色
可在:highlight中使用ctermul来设置下划线颜色,如果启用了'termguicolors',则可用guisp.
添加reduce()
化简列表为单个值这里.
添加readirex()
与readdir()类似,但返回带属性字典(即Unix上的stat()).
添加getmarklist()
类似:marks,取标记列表这里
添加unsigned到"nrformats"
在数字前忽略-,并总是当作<C-a>和<C-x>的正,以便在如1985-06-18上正常工作.
添加mapset()
从脚本设置映射,并可恢复映射,这里.
从Lua调用Vim函数
vim.call("fun_name", "arg")
vim.fn.fun_name("arg")
从Lua调用Vim函数.
通道中的IPv6支持
通道中的IPv6支持
添加echoraw()
无需处理,输出串到终端;可用来发送转义码,这里.
添加可选错误码到:cquit
用指定代码退出,而不是总是使用1.v:exiting已在8.2.2070中添加.
2019
rand()和srand()
生成随机数.1,2
interrupt()
中止运行中的脚本.
strptime()
解析时间串这里
:terminal ++shell
在shell中运行:terminal命令.这里
v:argv
取调用Vim时使用的命令行参数.
添加gM
移动到行的中间这里.
hl-LineNrAbove,hl-LineNrBelow
设置"relativenumber"时,高亮光标上下方的行号.
添加'cursorlineopt'
更多控制如何显示"光标".
边框和对齐'completepopup'
控制补全弹出菜单的更多选项.
"completeopt"中的弹窗
(按预览窗口的替代)在弹窗中显示额外补全信息.
:spellrare
在拼写文件中按稀有标记单词.
->符号
expr->fun(args)是fun(expr, args)提高可读性的快捷方法:
[1, 2]->map({_, v -> v + 1})
见方法
弹窗
弹窗类似补全窗口,但可在VimScript中更大程度地控制它.见弹窗"previewpopup".这仍是一个实验性功能.
“补全斜杠”
覆盖'shellslash'以补全.
#{}字典注解
除了键值不需要引号,#{}表示法与普通{}字典表示法相同:
#{foo: "bar"}
声音功能
可播放声音;见sound_playevent().
v:option_command,v:option_oldlocal,v:option_oldglobal
改进了OptionSet事件.
:常量
常量,与如下等价
:let v = 1 | :lockvar v
win_execute()
在指定窗口的环境中execute().
"wincolor"(温色)
对此窗口,要用的高亮组,而不是hl-Normal.
g:actual_curwin,g:statusline_winid
在"状态行"(%{expr})中运行表达式时的临时设置.
:let=<<
Heredoc赋值,这里:
let text =<< trim ENDtext
END
文本属性
赋值元数据给缓冲中的文本,作为Vim语法高亮的替代方法.见textprop.这仍是实验性功能.
listener_add()
添加更改缓冲时调用的回调.
函数参数的默认值
如函数Fun(value=10).见optional-function-argument.
:xrestore
重启后重新连接到X服务器.
environ(),getenv()和setenv()
处理环境变量,123.
chdir()
用域和恢复能力更改目录.
:cbefore,:cafter
浏览光标前后的错误.
搜索时显示匹配位置
用n时且"S"不在"shortmess"中时,显示"3/44".
:cabove,:cbelow,:labove,:lbelow
浏览与光标相关的错误.
控制窗口上的字体权重
在"guifont"中使用"W"来控制窗口上的字体权重.见gui-font.
Tab-local目录
见:tcd.类似带有:lcd的window-local目录.
v:前缀为必填项
以前,如计数也可.当:scriptversion>=3时,必需要有v:前缀.
给winnr()添加更多参数
找出邻居窗口.
CompleteChanged事件
每次更改"插入模式"补全菜单后,这里.
str2list()和list2str()
按字节列表转换串,及相反.
readdir()
取目录内容这里.
:scriptversion
指定VimScript兼容版本.
..符号
串连接符号,因为一个.有歧义,"a"..'b'和'a'."b"是相同的.还添加了..=.
:autocmd的++once参数
只运行一次自动命令,如:
au CursorMoved * ++once :echom 'ONCE'
添加窗口ID参数到matchdelete(),clearmatches(),getmatches(),setmatches()
complete_info()
取有关当前补全信息.
rubyeval()
计算Ruby式.
CTRL-W_gt组合键,CTRL-W_gT组合键
像gt和gT切换选项卡.主要用来从终端窗口切换.
*=,/=,%=
如,let var*=2
a:变量是不变的
以前,有时可更改a:变量.
[:ident:], [:keyword:], [:fname:]
允许在"listchars"中使用"tab:"的第三个符
set listchars=tab:(_)
如上,按制表符的最后符设置第三个符,按(______)显示制表符.
Blob类型
Blob存储二进制数据.Blob文字以0z开头,如0zDEADBEEF.见blob这里.
"FormatOptions"中的"p"标志
不要在句点后面的单个空格处换行.
:redrawtabline
更改"tabline"后重画tabline(插件用).
sign_place(),sign_unplace()等
定义和保存标志的函数1,2.
允许函数和命令重定义自身
以前总是必须把!添加到函数中,才能覆盖带相同名字的函数.现在Vim更智能了,它允许函数覆盖自身.即在vimrc或插件中,不再需要自动加载或加上!了.
:filter支持更多命令
这里
:tlmenu
终端的弹出菜单.
包括xdiff库
包括diff库,而不依赖外部工具来提高diff质量.许多新的"diffopt"设置如:
set diffopt+=internal,algorithm:patience
是个很好的设置.
"\
继续行注释;见line-continuation-comment:
au FileType git"\ Go to commit.\ nnoremap <Leader>g :exe printf(":!cd ~/src/vim && git diff %s^\!", split(getline("."), ' ')[1])<CR>"\ Delete commit.\| nnoremap <Leader>d :call search('^commit ', 'bc') \| :exe 'd' . (search('^commit ', 'n') - line("."))<CR>
cfilter插件
过滤快修/位置列表
'vartabstop','varsofttabstop'
可变制表位宽度,如set vartabstop=4,8使第一个制表符为4个空格,其余为8个空格.
选项集(OptionSet)autocmd
每当设置选项时触发.
提示缓冲
主要用来给作业提供用户输入.
允许:unlet的$ENV
以前无法真正取消设置环境变量(只需设置为空串).
CTRL-R CTRL-L
在命令行中,从缓冲插入行
无参的job_info()列举所有作业
如果目录已存在,mkdir('p')不会失败
添加终端API.
见terminal-api这里.
trim()
清除空格;之前必须使用substitute(),这里.
将"!"添加到"guioptions"
对!shell命令,使用Vim终端窗口.
终端菜单
使:popup和右击,在终端中工作.
窗口控制台中的24位颜色
见"termguicolors".
‘pumwidth’
补全菜单的最小宽度.
DirChanged事件
(使用:cd,:lcd等)更改目录时,[这里]9https://vimhelp.org/autocmd.txt.html#DirChanged)
CmdlineChanged事件
在命令行中,更改文本后,这里.
2017
TextYankPost事件
复制或删除文本后,这里.
win_screenpos().
取窗口位置这里.
CmdlineEnter,CmdlineLeave
进入和离开命令行时.1,2
:terminal
终端缓冲.
--clean,'viminfofile'
不用插件,使用默认设置启动Vim.
"cinoptions"中的E标志
为extern块设置缩进.
'pyxversion',:pythonx
根据可用代码,更轻松地在Python2和3中运行Python代码.