58

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

4

7 回答 7

58

我遇到了同样的问题,简短的回答是可以,而且不仅在 gui 版本中。添加这个就.vimrc足够了:

inoremap <C-Space> <C-x><C-o>
inoremap <C-@> <C-Space>
于 2012-09-10T01:25:43.187 回答
26

问题似乎是 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>

我只是点击,,完成方法名称。

于 2011-10-11T12:07:57.097 回答
6

挑剔者破坏了 pablox 解决方案。解决方案的关键在于重新映射。因此,当您禁用重新映射时,它无法工作。
如果你真的想加入 a noremap,它看起来是这样的:

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

什么不起作用inoremap <C-@> <C-Space>因为<C-Space>零件本身不会重新映射。

于 2014-07-03T10:08:09.280 回答
3
  • 你试过:inoremap <c-space> <c-x><c-o>吗?
  • CtrlX CtrlO在插入模式下键入时会做任何事情吗?定了吗omnifunc
于 2011-10-11T06:46:34.023 回答
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

于 2014-08-29T21:27:02.710 回答
2

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

if has("unix")
  inoremap <C-@> <c-x><c-o>
elseif has("win32")
  inoremap <C-Space> <c-x><c-o>
endif
于 2017-08-03T19:59:11.043 回答
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>
于 2018-09-20T22:44:37.237 回答