【发布时间】:2011-12-05 01:11:51
【问题描述】:
在网上搜索了一下后,我似乎无法将 CtrlSpace 映射到任何东西/很多。今天有没有办法,我发现通常是2岁。
【问题讨论】:
标签: vim mapping omnicomplete
在网上搜索了一下后,我似乎无法将 CtrlSpace 映射到任何东西/很多。今天有没有办法,我发现通常是2岁。
【问题讨论】:
标签: vim mapping omnicomplete
我遇到了同样的问题,简短的回答是可以,而且不仅在 gui 版本中。在你身上添加这个.vimrc 就足够了:
inoremap <C-Space> <C-x><C-o>
inoremap <C-@> <C-Space>
【讨论】:
inoremap 而不是仅仅使用imap,因为前者会确保你以后搞砸不会更改这些设置。但是,真的,这是过于谨慎的矫枉过正。
inoremap <C-@> <c-x><c-o>(在Linux上)工作
inoremap <C-Space> <C-x><C-o>,并且在终端vim和gvim中运行良好。现在,如果我添加最后一部分,它将停止工作。尝试使用“空”vimrc (vim -u NONE),没有一个组合有效。所以我猜想必须在你的.vimrc 中设置一些配置(哪个是我不知道的)。
inoremap 用于这两个映射在 Mac 上有效,但在 Linux 上无效。我将它们更改为imap,现在它可以在两个平台上运行。所以::imap <C-@> <C-Space> 和 :imap <C-Space> <C-x><C-o>
<C-@> 相关文档的链接?我一直在寻找,但找不到任何东西。我很好奇这个答案实际上做了什么。我很想对此有更深入的了解……没关系。由@romainl 回答。它可以在:h CTRL-@ 中找到。好像太简单了!
问题似乎是 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>
我只是点击,, 来完成方法名称。
【讨论】:
<C-Space> 时,不仅仅是Terminal.app 输出NULL。如果我发现它是以某种标准编写的,我不会感到惊讶:至少 urxvt 和 konsole 也这样做。
挑剔者破坏了 pablox 解决方案。解决方案的关键在于重新映射。因此,当您禁用重新映射时,它无法工作。
如果你真的想输入noremap,它是这样的:
inoremap <expr><C-space> neocomplete#start_manual_complete()
imap <C-@> <C-Space>
不起作用的方法:inoremap <C-@> <C-Space>,因为<C-Space> 部分不会自行重新映射。
【讨论】:
E117: Unknown function: neocomplete#start_manual_complete E15: Invalid expression: neocomplete#start_manual_complete()
将以下代码添加到~/.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>
【讨论】:
:inoremap <c-space> <c-x><c-o>吗?omnifunc 设置了吗?【讨论】:
为了同时适应 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>
【讨论】: