How do I map ctrl x ctrl o to ctrl space in terminal vim?

后端 未结 7 1017
时光说笑
时光说笑 2020-12-08 18:40

After searching a bit on the net it seems that I can\'t map CtrlSpace to anything/alot. Is there a way to do it today, what I found was usually 2 years

相关标签:
7条回答
  • 2020-12-08 19:01

    I've run into the same issue, the short answer is yes you can, and not only in the gui version. Adding this on you .vimrc is enough:

    inoremap <C-Space> <C-x><C-o>
    inoremap <C-@> <C-Space>
    
    0 讨论(0)
  • 2020-12-08 19:01

    The problem seems to be that Terminal.app doesn't interpret <C-Space> correctly and Vim understands it as <C-@> which is a built-in mapping (:help CTRL-@).

    Maybe you could go with something like the following in your .vimrc:

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

    which seems to work, here, but I don't like the idea of overriding built-ins like that.

    Instead you should try with <Leader> (:help leader), it gives you huge possibilities for defining your own custom mappings and (depending on the mapleader you choose) won't interfere with OS/app specific shortcuts/limitations and hence be more portable.

    With this in my .vimrc:

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

    I just hit ,, to complete method names.

    0 讨论(0)
  • 2020-12-08 19:04

    To accommodate both Windows and Linux I applied this to ~/.vimrc

    if has("unix")
      inoremap <C-@> <c-x><c-o>
    elseif has("win32")
      inoremap <C-Space> <c-x><c-o>
    endif
    
    0 讨论(0)
  • 2020-12-08 19:05

    The nitpicker broke pablox solution. The crux of the solution was just about remapping. So when you disable remapping, it cannot work.
    If you really want to throw in a noremap, this is what it looks like:

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

    What will not work: inoremap <C-@> <C-Space> 'cause the <C-Space> part will not be remapped itself.

    0 讨论(0)
  • 2020-12-08 19:08

    Add the following code to ~/.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>
    

    Source: https://coderwall.com/p/cl6cpq

    0 讨论(0)
  • 2020-12-08 19:09

    I had better results with this set of mappings across all modes on Mac OS. Have not tested Windows or Linux.

    I don't understand how the excepted answer is supposed to work in terminal mode.

    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>
    
    0 讨论(0)
提交回复
热议问题