vim tab 自动补全,怎样取消其提示

之前设置了vimtab自动补全提示,但是有一个问题是,当我在一行行首,希望tab缩进一下的时候,它也会弹出自动补全提示窗口,并且尝试多个按键都不能撤销其已上位内容,该怎么... 之前设置了 vim tab 自动补全提示,但是有一个问题是,当我在一行行首,希望 tab 缩进一下的时候,它也会弹出自动补全提示窗口,并且尝试多个按键都不能撤销其已上位内容,该怎么处理?(部分表述可能不够专业,不知道术语,还请各位朋友理解就好。)

举例:

如上图,1,3 行先输入了
test

test again

之后在第5行,我希望按 tab 缩进一级,我没有先输入任何内容,直接 tab,它会弹出上图那样的提示窗口,并且内容 test 已上位,我无法取消其上位,以一级 tab 缩进替代,希望各位朋友指教?

比如很多其他环境也会有 tab 自动补全,但是按 esc 就可以撤销其补全的内容,保留自己输入的部分,然后再按 tab 就不自动补全而是跳格。但在此处按 esc 是切换到 normal 模式,并且保留已上位内容,比如现在处于上图情况,按 esc 则会转换到 normal 模式,并且 test 成为输入内容。我知道可以再按 >> 来取得缩进效果,但是这样每次在行首希望缩进都得反复击键多次非常麻烦。
================================================
补充:
或者能提供比较好的自动补全解决方案吗?
展开
 我来答
OAqrYu
2016-07-12
知道答主
回答量:1
采纳率:100%
帮助的人:1109
展开全部

在Vim 7.4的帮助文档中有这样一段:


For example, the following will map <Tab> to either actually insert a <Tab> if
the current line is currently only whitespace, or start/continue a CTRL-N
completion operation:

        function! CleverTab()
           if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
              return "\<Tab>"
           else
              return "\<C-N>"
           endif
        endfunction
        inoremap <Tab> <C-R>=CleverTab()<CR>


也就是说,把上面这段代码贴进配置文件就可以实现:当光标到行首都未出现非空白字符时,Tab还是Tab;否则,Tab就被映射为Ctrl+N的补全命令。用:help expression查看语法,弄明白了可以自己写函数搞点高级功能。

zhengyw55
2014-10-20 · 超过26用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:56.4万
展开全部
这个tab补全是很蛋疼的事,建议不要折腾
之前我折腾了很久最后也装过插件supertab但还是用的很不爽,
还是用回原生的Ctrl+n和Ctrl+p来补全
更多追问追答
追问
多谢,不过刚刚后来在搜索的过程中发现有人还有其他的一些补全需求,比如说输入一个括号自动分行之类的,看到有在配置中编写函数的方法,估计可以解决,不过这几天事儿多确实没心力搞这个。后面找到解决方案了也跟你分享一下。或者也说不定还有朋友已经做了类似的工作。
追答

我猜您说的其他的一些补全需大多应该是比较个性化的,使用键盘映射实现

比如再vimrc配置文件中添加后

inoremap {{ {<CR><CR>}<ESC>kia<ESC>gg=G<C-o><C-o>zzws

打到

int func()

后再输入两个大括号就变成

int func()
{
    //在此处进入插入模式
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式