在网上搜索了一下后,我似乎无法映射CtrlSpace到任何东西/很多。今天有没有办法做到这一点,我发现通常是2岁。
7 回答
我遇到了同样的问题,简短的回答是可以,而且不仅在 gui 版本中。添加这个就.vimrc
足够了:
inoremap <C-Space> <C-x><C-o>
inoremap <C-@> <C-Space>
问题似乎是 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>
我只是点击,,
完成方法名称。
挑剔者破坏了 pablox 解决方案。解决方案的关键在于重新映射。因此,当您禁用重新映射时,它无法工作。
如果你真的想加入 a noremap
,它看起来是这样的:
inoremap <expr><C-space> neocomplete#start_manual_complete()
imap <C-@> <C-Space>
什么不起作用:inoremap <C-@> <C-Space>
因为<C-Space>
零件本身不会重新映射。
- 你试过
:inoremap <c-space> <c-x><c-o>
吗? - CtrlX CtrlO在插入模式下键入时会做任何事情吗?定了吗
omnifunc
?
将以下代码添加到~/.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>
为了同时适应 Windows 和 Linux,我将其应用于~/.vimrc
if has("unix")
inoremap <C-@> <c-x><c-o>
elseif has("win32")
inoremap <C-Space> <c-x><c-o>
endif
我在 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>