【问题标题】:How do I map ctrl x ctrl o to ctrl space in terminal vim?如何将 ctrl x ctrl o 映射到终端 vim 中的 ctrl 空间?
【发布时间】:2011-12-05 01:11:51
【问题描述】:

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

【问题讨论】:

    标签: vim mapping omnicomplete


    【解决方案1】:

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

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

    【讨论】:

    • 我知道这是真的吹毛求疵,但我会考虑使用inoremap 而不是仅仅使用imap,因为前者会确保你以后搞砸不会更改这些设置。但是,真的,这是过于谨慎的矫枉过正。
    • 对我来说它只在inoremap &lt;C-@&gt; &lt;c-x&gt;&lt;c-o&gt;(在Linux上)工作
    • 我又试了一次,事实上......它只适用于inoremap &lt;C-Space&gt; &lt;C-x&gt;&lt;C-o&gt;,并且在终端vim和gvim中运行良好。现在,如果我添加最后一部分,它将停止工作。尝试使用“空”vimrc (vim -u NONE),没有一个组合有效。所以我猜想必须在你的.vimrc 中设置一些配置(哪个是我不知道的)。
    • 根据我的经验,将inoremap 用于这两个映射在 Mac 上有效,但在 Linux 上无效。我将它们更改为imap,现在它可以在两个平台上运行。所以::imap &lt;C-@&gt; &lt;C-Space&gt;:imap &lt;C-Space&gt; &lt;C-x&gt;&lt;C-o&gt;
    • 您能否添加指向&lt;C-@&gt; 相关文档的链接?我一直在寻找,但找不到任何东西。我很好奇这个答案实际上做了什么。我很想对此有更深入的了解……没关系。由@romainl 回答。它可以在:h CTRL-@ 中找到。好像太简单了!
    【解决方案2】:

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

    也许您可以在 .vimrc 中使用类似以下内容:

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

    这似乎可行,但我不喜欢这样覆盖内置插件的想法。

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

    在我的 .vimrc 中有这个:

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

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

    【讨论】:

    • 当您输入&lt;C-Space&gt; 时,不仅仅是Terminal.app 输出NULL。如果我发现它是以某种标准编写的,我不会感到惊讶:至少 urxvt 和 konsole 也这样做。
    【解决方案3】:

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

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

    不起作用的方法:inoremap &lt;C-@&gt; &lt;C-Space&gt;,因为&lt;C-Space&gt; 部分不会自行重新映射。

    【讨论】:

    • 对我来说结果:E117: Unknown function: neocomplete#start_manual_complete E15: Invalid expression: neocomplete#start_manual_complete()
    • @user2609980 您需要映射到设置中可用的功能。我用作示例的函数取自我的个人设置。
    【解决方案4】:

    将以下代码添加到~/.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

    【讨论】:

    • 我认为 是html标签,意思是'
    • 忽略我的版本。我认为是错误的。应该有一个取消编辑选项。
    【解决方案5】:
    • 你试过:inoremap &lt;c-space&gt; &lt;c-x&gt;&lt;c-o&gt;吗?
    • 在插入模式下键入时,CtrlX CtrlO 是否有任何作用? omnifunc 设置了吗?

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

        我在 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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-27
          • 2014-09-06
          • 1970-01-01
          • 2012-11-18
          • 2011-06-11
          • 1970-01-01
          • 2016-06-26
          • 1970-01-01
          相关资源
          最近更新 更多