1. Vim 命令模式时按 Tab 补全怎么设置才能像 Emacs 列出多个
*'wildmode'* *'wim'*'wildmode' 'wim' 字符串 (Vim 缺省: "full")全局{Vi 无此功能}用 'widechar' 指定的字符所用的补全模式。它是逗号分隔的不超过四部分的列表。每个部分指定每次连续使用的 'widechar' 要完成的动作。第一部分指定第一次使用时的行为。第二部分指定第二次使用时的,等等。每个部分的可能值如下:"" 只用第一个匹配补全。"full" 用下一个完整的匹配补全。在最后一次匹配之后,使用原来的字符串,然后又是第一个匹配。"longest" 用最长的公共子串补全。如果结果没有变长,使用下一个部分。"longest:full" 类似于 "longest",但如果 'wildmenu' 打开的话,使用之。"list" 如果有多于一个补全,列出所有的匹配。"list:full" 如果有多于一个补全,列出所有的匹配并先用第一个补全。"list:longest" 如果有多于一个补全,列出所有的匹配并先用最长的子串补全。如果只有一个匹配,所有情况下都完整补全。
2. vim怎么设置代码补全
按ctrl+p就可以出补全列表了,当然你也可以安装neocomplete之类的插件。
3. vim有自动补全功能吗
YouCompleteMe是Vim的自动补全插件,与同类插件相比,具有如下优势
1、基于语义补全
2、整合实现了多种插件
clang_complete、AutoComplPop 、Supertab 、neocomplcache 、Syntastic(类似功能,仅仅针对c/c++/obj-c代码)
3、支持多种语言
c、c++、obj-c、c#、python
对于其他的语言,会调用vim设置的omnifunc来匹配,因此同样支持php,ruby等语言。
4、YouCompleteMe除了提供了自动补全、自动提示错误的功能外,还提供了类似tags的功能
跳转到定义GoToDefinition
跳转到声明GoToDeclaration
以及两者的合体GoToDefinitionElseDeclaration
科普
Vim作为一款文本编辑器,针对文本自动补全这个功能来说,主要有两种实现方式:
复制代码
基于文本(acp,omnicppcompleter)
我们常用的omnicppcompleter,acp,vim自带的c-x, c-n的实现方式就是基于文本。更通俗的说法,其实就是一个字:猜
其通过文本进行一些正则表达式的匹配,再根据生成的tags(利用ctags生成)来实现自动补全的效果。
基于语义
顾名思义,其是通过分析源文件,经过语法分析以后进行补全。由于对源文件进行分析,基于语义的补全可以做到很精确。但是这显然是vim所不可能支持的。而且经过这么多年发展,由于语法分析有很高的难度,也一直没有合适的工具出现。直到,由apple支持的clang/llvm横空出世。YouCompleteMe也正是在clang/llvm的基础上进行构建的。
4. vim自动补全设置问题
不用这么复杂的吧~ 括号自动补全,越简单越好,多了反而麻烦。我的是这样的,用着还可以:
"括号等的自动完成
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {<CR>}<ESC>O
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endfunction
好像一模一样哦,不过我的没什么问题啊~
5. linux vim 怎么实现代码补全的啊
vim 比较灵活,有自己的习惯的话,可以把它们加到 vim 里。
如果楼主希望在插入模式里,用 ctrl-d 它来实现删除当前行的话,只要将如下语句加到 vimrc 文件即可:
inoremap<C-D><C-o>dd
<c-o> 用于在插入模式下暂时执行一个普通模式下的命令,执行后返回插入模式。
所以加了上面那个映射之后,ctrl-d 就相当于 eclipse 下的删除当前行了。不过定义这个映射之后,ctrl-d 本来的功能(减少当前行的缩进)就会被覆盖。
我没用过 eclipse,ctrl-alt-up 是什么功能也不知道。不过原理类似,想用 vim 模拟一些其它编辑器的快捷键不会很困难。
至于那个 for 的补全,可能是一些插件。有不少人开发了 vim 的插件以方便书写代码,原理基本上是一些替换。
最简单的比如:
iabbrforifor(inti=0;i<10;i++)
加在 vimrc 里(如果只是想试验一下,只要按冒号再照敲上面的语句就可以了),之后写码的时候只要写 fori 空格回车之类的随你,就会被自己替换成你之前定义好的代码。当然要想让这个自己替换的工作更方便好用,比如补全之后把光标停在第二个分句的 i < 后面等等之类的功能,就需要更复杂的定义。
vim 有很强的扩展能力,可以用来增强它的工作效率。插件楼主可以去官网上搜,不过越是方便的插件可能就越复杂,用起来可能也就越不顺手(因为操作习惯很可能和自己需要的很不一致),学习起来的难度一般也越大。
6. vim怎么设置括号,引号等自动补全
假设你的需求是这样的:输入左括号或引号(包括({['"),结果是成对出现的,并且光标自动移动到中间。
根据这个需求就可以写个配置了:
inoremap(()<ESC>i
inoremap{{}<ESC>i
inoremap[[]<ESC>i
inoremap'''<ESC>i
inoremap"""<ESC>i
把这个配置放到~/.vimrc即可,重启vim即可。
有问题欢迎追问评论!!!
7. Vim 敲代码时的自动补全问题
如果你不能补全所有文件,请看'complete'选项的设置
命令行输入 :set complete?
然后对照下面的说明,看看到底是怎么回事?
'complete''cpt'字符串(缺省:".,w,b,u,t,i")
局部于缓冲区
{Vi无此功能}
本选项控制关键字补全|ins-completion|在使用CTRL-P或CTRL-N时如何工
作,也用于整行的补全|i_CTRL-X_CTRL-L|。它指示补全的类型和需要扫描的位
置。这是一个逗号分隔的标志位的列表:
.扫描当前缓冲区(忽略'wrapscan')
w扫描其它窗口的缓冲区
b扫描其它缓冲区列表里载入的缓冲区
u扫描缓冲区列表里卸载的缓冲区
U扫描不在缓冲区列表里的缓冲区
k扫描'dictionary'选项给出的文件
kspell使用当前激活的拼写检查|spell|
k{dict}扫描文件{dict}。可以给出多个"k"标志位,也可以使用模式。比
如:>
:setcpt=k/usr/dict/*,k~/spanish
<s扫描'thesaurus'选项给出的文件
s{tsr}扫描文件{tsr}。可以给出多个"s"标志位,也可以使用模式。
i扫描当前文件和包含的头文件
d扫描当前文件和包含的头文件里的定义名或宏|i_CTRL-X_CTRL-D|
]标签补全
t等同于"]"
卸载的缓冲区不会载入,因而它们的自动命令|:autocmd|也不会执行,这使得
有些文件的补全效果出人意表(比如gzipped压缩的文件)。整行补全也不会扫
描卸载的缓冲区。
缺省是".,w,b,u,t,i",它意味着扫描:
1.当前缓冲区
2.其它窗口的缓冲区
3.其它载入的缓冲区
4.卸载的缓冲区
5.标签
6.头文件
如你所知,CTRL-N和CTRL-P可用于完成任何基于'iskeyword'的扩展(比如
字典|i_CTRL-X_CTRL-K|、头文件里的模式|i_CTRL-X_CTRL-I|、标签
|i_CTRL-X_CTRL-]|和普通的扩展)。
8. vim的命令行tab补全不好用啊,有什么替换方案
'wildmode' 'wim' 字符串 (Vim 缺省: "full")全局{Vi 无此功能}
用'widechar' 指定的字符所用的补全模式。它是逗号分隔的不超过四部分的列
表。每个部分指定每次连续使用的 'widechar' 要完成的动作。第一部分指定第
一次使用时的行为。第二部分指定第二次使用时的,等等。
每个部分的可能值如下:
"" 只用第一个匹配补全。
"full" 用下一个完整的匹配补全。在最后一次匹配之后,使用原来的
字符串,然后又是第一个匹配。
"longest" 用最长的公共子串补全。如果结果没有变长,使用下一个部分。
"longest:full" 类似于 "longest",但如果 'wildmenu' 打开的话,使用之。
"list" 如果有多于一个补全,列出所有的匹配。
"list:full" 如果有多于一个补全,列出所有的匹配并先用第一个补全。
"list:longest" 如果有多于一个补全,列出所有的匹配并先用最长的子串补全。
9. 如何在vim中使用tab进行python代码补全
我这里要介绍的功能叫"new-omni-completion(全能补全)", 你可以用下面的命令看看介绍:
:help new-omni-completion
你还需要在~/.vimrc文件中增加下面两句:
filetype plugin indent on
打开文件类型检测, 加了这句才可以用智能补全
set completeopt=longest,menu
关掉智能补全时的预览窗口
请确定你的Ctags 已经安装好, 并且生成的tags文件已经可以用了, 那么我们就要抄家伙开搞了.
用vim打开源文件
$ vim /home/wooin/vim71/src/main.c (linux下的,文件是一样的。)
设置tags文件
:set tags=/home/wooin/vim71/tags
随便找一个有成员变量的对象, 比如"parmp",
进入Insert模式, 将光标放在"->"后面,
然后按下"Ctrl+X Ctrl+O",, 显示所有匹配的标签,。
如果你增加了一些成员变量, 全能补全还不能马上将新成员补全, 需要你重新生成一下tags文件, 但是你不用重启vim, 只是重新生成一下tags文件就行了,
这时全能补全已经可以自动补全了。
vim中的其他补全方式还有:
Ctrl+X Ctrl+L 整行补全 Ctrl+X Ctrl+N
根据当前文件里关键字补全
Ctrl+X Ctrl+K
根据字典补全 Ctrl+X Ctrl+T
根据同义词字典补全
Ctrl+X Ctrl+I
根据头文件内关键字补全 Ctrl+X Ctrl+]
根据标签补全
Ctrl+X Ctrl+F
补全文件名 Ctrl+X Ctrl+D
补全宏定义
Ctrl+X Ctrl+V
补全vim命令 Ctrl+X Ctrl+U
用户自定义补全方式
Ctrl+X Ctrl+S
拼写建议
是不是还是觉得没有tab方便?好的,人家开发了一个叫做supertab.vim这个插件。安装后,
在你的~/.vimrc文件中加上这两句:
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
以后当你准备按"Ctrl+X
Ctrl+O"的时候直接按<Tab>就好了,这下你满足了吧。
我稍微再介绍一下上面那两句配置信息:
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
" 设置按下<Tab>后默认的补全方式, 默认是<C-P>, “
现在改为<C-X><C-O>. 关于<C-P>的补全方式,
" 还有其他的补全方式,
你可以看看下面的一些帮助:
" :help ins-completion
" :help compl-omni
let g:SuperTabRetainCompletionType=2
" 0 -
不记录上次的补全方式
" 1 - 记住上次的补全方式,直到用其他的补全命令改变它
" 2 - 记住上次的补全方式,直到按ESC退出插入模式为止