例如,当我输入“inclu”时,是否有一种方法可以将其自动完成为“include”?
谢谢。
vim
(复杂)自动完成是通过^X
键映射完成的。 ^X^]
将基于由ctags(1)
生成的标签自动完成。 ^X^P
搜索文件中可用于完成的先前关键字。 ^X^K
查找可用于完成的可配置dictionary
中的单词。 ^X^I
查找已包含的文件并弹出菜单,以从这些文件中完成关键字。 ^X^D
从#define
中完成。
也许获得所需的最简单方法是在文件中完全输入#include <...>
。然后可以通过#incl^X^P
处理第二个要包含的文件,以此类推。
如果您想付出更多努力,请创建一个包含要自动完成的关键字的~/.vim/dict
文件,并将该文件添加到dictionary
变量(:help dictionary
),然后使用^X^K
插入它。
^N
еПѓдї•е∞Ж inclu
и°•еЕ®дЄЇ include
пЉМиАМдЄФжѓФ ^X^P
пЉИжИЦ ^X^N
пЉЙжЫізЯ≠гАВ - VesCTRL-X CTRL-[NP]
仅在当前缓冲区中搜索。 - BenoitCTRL-N
和CTRL-X CTRL-N
之间的区别。在使用较慢的硬件或通过ftp工作时,这可能非常重要。 - VesSnipmate默认可以实现这个功能。输入'inc'并按Tab键,它将转换为
#include <stdio.h>
iab inc #include ""
iab Inc #include <>
inc<SPACE>
,Vim会自动展开为#include ""
。你可以添加各种缩写来减少所需的按键次数。#include ""
示例。snippet sptr "std::shared_ptr< type >"
std::shared_ptr< ${1:type} >
endsnippet
std::shared_ptr< type >
,并选择单词type
,以便我可以继续输入模板类型而无需暂停。// <C> is where I would press the UltiSnip complete/next key.
fun<C>sptr<C><C>load_widget<C>cu32<C>offset<C>, cc<C>name<C>ret<C>msptr<C>widget<C>offset<C>name<C>;
这将扩展为:
std::shared_ptr< widget > load_widget( const std::uint32_t offset, const char* name )
{
return std::make_shared< widget >( offset, name );
}
[c]type[r|p]
。[c]
是可选的const,[r]
或[p]
表示可选的引用或指针。(r
和p
比&
和*
更容易输入)。例如,std::string
的速记如下:str = std::string
strp = std::string*
strr = std::string&
cstr = const std::string
cstrp = const std::string*
cstrr = const std::string&
因此,在我的代码中最常见的cstrr将19个按键(有一个尾随空格)减少到仅6个。
:help ins-completion
作为权威参考资料。 - sarnold