<C-p>
和<C-n>
允许完成当前文档中找到的单词。我做一些笔记并多次写说
{0,1}^n
和(E,D)
。这些单词是由几个单词组成的单词。是否可以用
<C-p>
和<C-n>
(或其他相关的ins-completion
命令)来完成WORD?#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
,并且没有其他变体。键入时有点费力,所以也许您只想输入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 + = {,} ,(, ^)可以正常工作。
– 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
评论
您最好使用:abbreviate代替。例如,发出:ab 01n {0,1} ^ n命令。然后,每次在插入模式下将01n输入为独立单词时,它将扩展为{0,1} ^ n。@ 200_成功,谢谢。我曾考虑过缩写,但仍然想知道ins-completion是否可行。