<C-p><C-n>允许完成当前文档中找到的单词。

我做一些笔记并多次写说{0,1}^n(E,D)。这些单词是由几个单词组成的单词。

是否可以用<C-p><C-n>(或其他相关的ins-completion命令)来完成WORD?

评论

您最好使用:abbreviate代替。例如,发出:ab 01n {0,1} ^ n命令。然后,每次在插入模式下将01n输入为独立单词时,它将扩展为{0,1} ^ n。

@ 200_成功,谢谢。我曾考虑过缩写,但仍然想知道ins-completion是否可行。

#1 楼

使用Ctrl-n插入模式补全


我不知道您是否可以在编写自己的函数(例如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或Vi m的缩写功能。与关键字完成不同,缩写不必看起来像最终文本。另外,与关键字补全不同,缩写会自动扩展,而不是仅在您要求时才扩展。根据您的目标和用途,这可以节省大量的键入时间,并且使您可以键入许多文本而不会中断要求输入完成内容的情况。

缩写对于少数关键字以及在什么情况下适用您可以提前定义它们(不会像单词补全一样从您的文本中发现它们)。

缩写词的基本思想是将WORD与其他一些文本关联,并且每当编辑器检测到您键入该WORD时(即,键入的文本被空白包围,完成操作将在其后添加空白)

假设您的文件包含大量{0,1}^n,并且没有其他变体。键入时有点费力,所以也许您只想输入01nmyvalue并将其扩展为{0,1}^n,但是仅当01nmyvalue本身是一个单词时(也就是说,如果它恰好出现在另一个单词中)一句话,请不要更改。)

在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 + = {,} ,(, ^)可以正常工作。

– Karl YngveLervåg
15年2月18日在8:54

确实如此。上次尝试时,Vim一直告诉我这是语法错误。一定是在别的地方。更新我的答案。

– John O'M。
2015年2月20日在1:24

@ JohnO'M。您能补充一下缩写可能更适合此工作的参考吗?

–贡萨洛·里贝罗(GonçaloRibeiro)
2015年2月20日在22:34

@GonçaloRibeiro完成。希望对您有所帮助。

– John O'M。
15年2月22日在4:41