如何将ctrl x ctrl o映射到终端vim中的ctrl空间?

时间:2011-10-11 06:31:24

标签: vim mapping omnicomplete

在网上搜索了一下后,我似乎无法将 Ctrl Space 映射到任何/很多。有没有办法今天做,我发现通常是2岁。

7 个答案:

答案 0 :(得分:45)

我遇到了同样的问题,简短的回答是肯定的,而且不仅仅是在gui版本中。在.vimrc上添加此内容就足够了:

inoremap <C-Space> <C-x><C-o>
inoremap <C-@> <C-Space>

答案 1 :(得分:24)

问题似乎是Terminal.app没有正确解释<C-Space>,Vim将其理解为<C-@>,这是一个内置映射(:help CTRL-@)。

也许你可以使用.vimrc中的以下内容:

if !has("gui_running")
    inoremap <C-@> <C-x><C-o>
endif

这似乎有用,但是我不喜欢像这样重写内置插件的想法。

相反,您应该尝试<Leader>:help leader),它为您提供了定义自己的自定义映射的巨大可能性,并且(取决于您选择的mapleader不会干扰操作系统/应用程序特定的快捷方式/限制,因此更便携。

在我的.vimrc:

let mapleader=","
inoremap <leader>, <C-x><C-o>

我只需点击,,即可完成方法名称。

答案 2 :(得分:5)

nitpicker打破了pablox溶液。解决方案的关键在于重新映射。因此,当您禁用重新映射时,它无法正常工作 如果你真的想要投入noremap,这就是它的样子:

inoremap <expr><C-space> neocomplete#start_manual_complete()
imap <C-@> <C-Space>

工作的内容:inoremap <C-@> <C-Space>'因为<C-Space>部分不会自行重新映射。

答案 3 :(得分:3)

  • 您是否尝试过:inoremap <c-space> <c-x><c-o>
  • 当你输入插入模式时, Ctrl X Ctrl O 执行任何操作吗?是omnifunc设置了吗?

答案 4 :(得分:3)

将以下代码添加到~/.vimrc

" Ctrl-Space for completions. Heck Yeah!
inoremap <expr> <C-Space> pumvisible() \|\| &omnifunc == '' ?
        \ "\<lt>C-n>" :
        \ "\<lt>C-x>\<lt>C-o><c-r>=pumvisible() ?" .
        \ "\"\\<lt>c-n>\\<lt>c-p>\\<lt>c-n>\" :" .
        \ "\" \\<lt>bs>\\<lt>C-n>\"\<CR>"
imap <C-@> <C-Space>

来源:https://coderwall.com/p/cl6cpq

答案 5 :(得分:2)

为了适应Windows和Linux,我将其应用于~/.vimrc

if has("unix")
  inoremap <C-@> <c-x><c-o>
elseif has("win32")
  inoremap <C-Space> <c-x><c-o>
endif

答案 6 :(得分:0)

使用Mac OS上所有模式的一组映射,我得到了更好的结果。尚未测试Windows或Linux。

我不明白例外答案应如何在终端模式下工作。

inoremap <C-space>   <ESC>
vnoremap <C-space>   <ESC>
cnoremap <C-space>   <C-c>
" When in terminal, <C-Space> gets interpreted as <C-@>
imap     <C-@>       <C-space>
vmap     <C-@>       <C-space>
cmap     <C-@>       <C-space>