我在 vimrc 文件中编写了一个函数:
function! InsertDebugBlock()
call append(line('.'), [", "])
call setline(line('.') + 1, '#if DEBUG')
call setline(line('.') + 2, '#endif')
normal j
startinsert
endfunction
但是,当我在 Visual Studio 中通过 vsvim 调用它时,它说:
不支持调用函数InsertDebugBlock
但它与 gvim 配合得很好
这里是vsvim中的一些配置
它说我的 vimrc 文件是 “C:\Users\Deler imfiles\_vimrc”,就是这样。
我找不到问题所在。我的vsvim版本是2.8.0.0,Visual Studio 2019
VsVim 不是 Vim,所以没有任何理由期望 Vim 的任何东西都能在 VsVim 中工作,反之亦然。
举个例子:这里是VsVim支持的非常有限的功能子集,这里是不支持vimscript的(非常合理的)理由。
初步结论:VsVim 不支持 vimscript,因此无法使您的代码片段工作。
现在……按原样,你的函数无论如何都无法完成你在 Vim 中声称的功能。当光标位于
foo
: 上调用时,它实际上会产生这个
foo
|#if DEBUG # cursor before #if
#endif
此外,在缓冲区末尾以外的其他地方使用
setline()
的方式将不可避免地导致数据丢失:
# before
foo
bar
baz
quux
# after
foo
#if DEBUG # oops! where is bar?
#endif
baz
quux
不好。
这是一个更简单的实现,保证可以在 Vim 中工作,并且根据链接资源判断,很可能也可以在 VsVim 中工作:
nnoremap <key> o#ifdef DEBUG<CR>#endif<Esc>O
使用任何你想要的
<key>
。