我试图用vimscript复制页面https://castel.dev/post/lecture-notes-1/上显示的beg缩写的行为,这意味着我想让它在插入模式下在行首键入“beg”时,它调用我选择的函数。
我试着用iabbrev
创建它,但是它直到我按空格键才扩展,而且空格是在我的缩写后面键入的,它也不能识别它是否是一行的开头。
我尝试的另一种方法是使用auto命令。
function SayHello ()
if (getline('.') =~ "\s*beg$")
s/^\(\s*\)beg/\1\\begin{}\r\r\\end{}/
endif
endfunction
autocmd TextChangedI *.tex call SayHello ()
这几乎是可行的,但有一个问题。如果自动完成弹出窗口是活动的,它就不工作,这总是因为我使用了一个插件。所以这段代码的效果是,当我第一次键入beg时,没有任何效果,但如果我退格一个字母并再次添加它,它就能正常工作。我试图通过添加以下命令来补救它
autocmd CompleteChanged *.tex call SayHello ()
所以如果有自动完成功能,它仍然可以工作。不幸的是,它不起作用,因为它试图编辑弹出窗口的缓冲区。我试着让函数退出弹出窗口,但没有效果。
我怎样才能让它像在网站上一样工作?
特别有用的是知道如何使用TextChangedI命令而不考虑自动完成,因为这将使其他有用的事情成为可能。
1条答案
按热度按时间ctehm74n1#
1.创建无害插入模式Map:
当你输入
beg
时,它会插入beg
。很酷。1.把它变成一个同样无害的“表达式Map”:
在运算式对映中,右边是当您按下左边时所评估的运算式,以产生要为您执行的宏。在这里,运算式是字串
beg
,因此对映的运作方式与第一个一样。1.在RHS中进行逻辑实验:
在这里,你要么得到一个
beg
,要么得到一个geb
,这取决于当前文件类型。1.使它只在行首插入一个粗略的代码片段:
1.使“动态”命名环境成为可能:
好的。它能用,但感觉很笨重。
这就是人们通常开始怀疑是否值得推出自己的插件时,现有的插件已经处理所有这些更优雅。