在网上搜索了一下之后,我似乎不能将CtrlSpaceMap到任何东西/很多东西。今天有没有办法做到这一点,我发现通常是2年前的。
ckx4rj1h1#
我也遇到过同样的问题,简单的回答是,是的,你可以,而且不仅仅是在gui版本中。
inoremap <C-Space> <C-x><C-o> inoremap <C-@> <C-Space>
kyxcudwk2#
问题似乎是Terminal.app没有正确解释<C-Space>,Vim将其理解为<C-@>,这是一个内置的Map(:help CTRL-@)。也许你可以在你的.vimrc中使用类似下面的东西:
<C-Space>
<C-@>
:help CTRL-@
if !has("gui_running") inoremap <C-@> <C-x><C-o> endif
这看起来是可行的,但是我不喜欢这样覆盖内置函数。相反,你应该尝试使用<Leader>(:help leader),它为你定义自己的自定义Map提供了巨大的可能性,并且(取决于你选择的mapleader)不会干扰操作系统/应用程序特定的快捷方式/限制,因此更具可移植性。在我的.vimrc中有这个:
<Leader>
:help leader
mapleader
let mapleader="," inoremap <leader>, <C-x><C-o>
我只是点击了,,来完成方法名。
,,
iqjalb3h3#
吹毛求疵的人破坏了pablox解决方案。解决方案的关键就是重Map。所以当你禁用重Map时,它就不能工作了。如果你真的想加入一个noremap,它看起来是这样的:
noremap
inoremap <expr><C-space> neocomplete#start_manual_complete() imap <C-@> <C-Space>
什么是不工作:inoremap <C-@> <C-Space> ',因为<C-Space>部分本身将不会被重新Map。
inoremap <C-@> <C-Space>
xlpyo6sf4#
:inoremap <c-space> <c-x><c-o>
omnifunc
mbskvtky5#
将以下代码添加到~/.vimrc:
~/.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
kx1ctssn6#
为了适应Windows和Linux,我将此应用于~/.vimrc
if has("unix") inoremap <C-@> <c-x><c-o> elseif has("win32") inoremap <C-Space> <c-x><c-o> endif
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>
qlzsbp2j8#
就像其他人说的,使用inoremap和正确的关键字(使用i_Ctrl_v发现的)应该可以工作。* 粘贴模式 *.如docs状态:
inoremap
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常见问题解答中推荐的])将其分解,以隔离导致问题的行。
set paste
:finish
8条答案
按热度按时间ckx4rj1h1#
我也遇到过同样的问题,简单的回答是,是的,你可以,而且不仅仅是在gui版本中。
kyxcudwk2#
问题似乎是Terminal.app没有正确解释
<C-Space>
,Vim将其理解为<C-@>
,这是一个内置的Map(:help CTRL-@
)。也许你可以在你的.vimrc中使用类似下面的东西:
这看起来是可行的,但是我不喜欢这样覆盖内置函数。
相反,你应该尝试使用
<Leader>
(:help leader
),它为你定义自己的自定义Map提供了巨大的可能性,并且(取决于你选择的mapleader
)不会干扰操作系统/应用程序特定的快捷方式/限制,因此更具可移植性。在我的.vimrc中有这个:
我只是点击了
,,
来完成方法名。iqjalb3h3#
吹毛求疵的人破坏了pablox解决方案。解决方案的关键就是重Map。所以当你禁用重Map时,它就不能工作了。
如果你真的想加入一个
noremap
,它看起来是这样的:什么是不工作:
inoremap <C-@> <C-Space>
',因为<C-Space>
部分本身将不会被重新Map。xlpyo6sf4#
:inoremap <c-space> <c-x><c-o>
吗?omnifunc
?mbskvtky5#
将以下代码添加到
~/.vimrc
:来源:https://coderwall.com/p/cl6cpq
kx1ctssn6#
为了适应Windows和Linux,我将此应用于
~/.vimrc
n8ghc7c17#
我在Mac OS上的所有模式下使用这组Map有更好的结果。没有测试过Windows或Linux。
我不明白在终端模式下,例外答案是如何工作的。
qlzsbp2j8#
就像其他人说的,使用
inoremap
和正确的关键字(使用i_Ctrl_v发现的)应该可以工作。* 粘贴模式 *.如docs状态:这看起来似乎无关紧要,但正是这件事让我在尝试让类似的
inoremap
绑定在Vim 8.2中工作时遇到了麻烦。我的.vimrc中有set paste
,不得不用:finish
语句(如[vim常见问题解答中推荐的])将其分解,以隔离导致问题的行。