如何在vim终端中将ctrl x ctrl oMap到ctrl空间?

2eafrhcq  于 2022-11-11  发布在  其他
关注(0)|答案(8)|浏览(141)

在网上搜索了一下之后,我似乎不能将CtrlSpaceMap到任何东西/很多东西。今天有没有办法做到这一点,我发现通常是2年前的。

ckx4rj1h

ckx4rj1h1#

我也遇到过同样的问题,简单的回答是,是的,你可以,而且不仅仅是在gui版本中。

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

kyxcudwk2#

问题似乎是Terminal.app没有正确解释<C-Space>,Vim将其理解为<C-@>,这是一个内置的Map(:help CTRL-@)。
也许你可以在你的.vimrc中使用类似下面的东西:

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

这看起来是可行的,但是我不喜欢这样覆盖内置函数。
相反,你应该尝试使用<Leader>:help leader),它为你定义自己的自定义Map提供了巨大的可能性,并且(取决于你选择的mapleader)不会干扰操作系统/应用程序特定的快捷方式/限制,因此更具可移植性。
在我的.vimrc中有这个:

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

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

iqjalb3h

iqjalb3h3#

吹毛求疵的人破坏了pablox解决方案。解决方案的关键就是重Map。所以当你禁用重Map时,它就不能工作了。
如果你真的想加入一个noremap,它看起来是这样的:

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

什么是工作:inoremap <C-@> <C-Space> ',因为<C-Space>部分本身将不会被重新Map。

xlpyo6sf

xlpyo6sf4#

  • 你试过:inoremap <c-space> <c-x><c-o>吗?
  • 当您在插入模式下键入时,CtrlXCtrlO是否执行任何操作?是否设置了omnifunc
mbskvtky

mbskvtky5#

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

kx1ctssn

kx1ctssn6#

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

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

n8ghc7c17#

我在Mac OS上的所有模式下使用这组Map有更好的结果。没有测试过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>
qlzsbp2j

qlzsbp2j8#

就像其他人说的,使用inoremap和正确的关键字(使用i_Ctrl_v发现的)应该可以工作。* 粘贴模式 *.如docs状态:

When the 'paste' option is switched on (also when it was already on):
           - mapping in Insert mode and Command-line mode is disabled

这看起来似乎无关紧要,但正是这件事让我在尝试让类似的inoremap绑定在Vim 8.2中工作时遇到了麻烦。我的.vimrc中有set paste,不得不用:finish语句(如[vim常见问题解答中推荐的])将其分解,以隔离导致问题的行。

相关问题