Answers:
我不知道您是否可以在编写自己的函数(例如omnifunc)之外进行WORD补全。但是,如果您不介意扩展单词以匹配您的字符,则可以将这些字符添加到“ iskeyword”中
例如,我的“ iskeyword”默认为
iskeyword=@,48-57,_,192-255
然后,将其设置为该值加上上面的其他字符
:set iskeyword=@,48-57,_,192-255,{,},,,(,),^
这增加了{
,}
,,
,(
,)
,和^
以组成一个字的文字(除了那些已经做了)
之后,键入{
Ctrl-n完成至{0,1}^n
(在仅包含您给出的两个示例的文件中)
注意:最好:set iskeyword+=
只使用其他内容,如下所示:
:set iskeyword+={,},,,(,),^
这样,通过将新字符附加到现有设置中,您就可以使其他任何东西都不再构成关键字。
尽管不是原始问题的一部分,但另一个相似的功能是使用nvi或Vim的缩写功能。与关键字完成不同,缩写不必看起来像最终文本。另外,与关键字补全不同,缩写会自动扩展,而不是仅在您要求时才扩展。根据您的目标和使用情况,这可以节省大量的键入时间,并且使您可以键入很多文本而不会中断要求填写的内容。
缩写词适合一小部分关键字,并且您可以提前定义它们(不会像单词补全一样从文本中发现它们)。
缩写的基本思想是将WORD与其他一些文本关联,并且每当编辑器检测到您键入该WORD时(即,您键入的文本被空白包围,完成操作将在其后添加空白)关键字或退出插入模式),则将其替换为其他文本。
假设您的文件包含{0,1}^n
很多内容,并且没有其他变体。键入时有点费力,所以也许您只想输入01n
或myvalue
并将其扩展为{0,1}^n
,但仅当01n
或是myvalue
一个单独的单词时(也就是说,如果它恰好出现在另一个单词中,则不要更改)。
在nvi中,您可以这样做:abbrev 01n {0,1}^n
。您可以在Vim中执行相同的操作,但是我建议使用:iabbrev 01n {0,1}^n
来限制扩展为仅插入模式。
然后,如果您有一些文本(其中|
表示光标)
We find that the value 01n|
然后您按下Esc或Space或Tab或以其他方式移动光标,文本被替换,并且您拥有了(使用空格的示例)
We find that the value {0,1}^n |
您可以继续输入而不会打扰。
这通常用于自动更正常见的拼写错误(例如,将“ teh”更改为“ the”),但对于您的用例也同样有用,再次假设您不介意提前设置映射。
:set iskeyword+={,},,,(,),^
按预期工作。
abbreviate
使其更适合此工作?
:abbreviate
改用。例如,发出:ab 01n {0,1}^n
命令。然后,每次01n
在插入模式下键入一个独立单词时,它将扩展为{0,1}^n
。