我不是 的忠实粉丝Ctrl-n
,我希望能够使用Ctrl-Space
。任何想法我该怎么做?
3 回答
if has("gui_running")
" C-Space seems to work under gVim on both Linux and win32
inoremap <C-Space> <C-n>
else " no gui
if has("unix")
inoremap <Nul> <C-n>
else
" I have no idea of the name of Ctrl-Space elsewhere
endif
endif
我也喜欢 Ctrl+Space 映射。
" Remap code completion to Ctrl+Space {{{2
inoremap <Nul> <C-x><C-o>
在您的情况下,您想要:
inoremap <Nul> <C-n>
如果你想将它映射到,比如说,Ctrl-E,它会是这样的:
inoremap <C-E> <C-N>
Ctrl-的问题Space是大多数终端只会将其视为一个空间。我假设你在 X 中使用一些终端程序;如果你使用不同的东西,你必须自己提供相关的替换。
Bash 的 readline 通常具有Ctrl-V映射到“将下一个键视为文字”。因此,在 bash 命令行中按Ctrl-V然后 Home 将在命令行上插入^[[H
或类似的东西,而不是转到行首。尝试按Ctrl-V然后Ctrl- Space。可能你只会看到一个空格。
在这种情况下,您将不得不使用 xmodmap 或编写自己的 /usr/share/X11/xkb/* 文件来告诉 X 在您按Ctrl-时输出不同的内容Space。像 Firefox 这样的程序不在乎;他们检测正在按下哪个基本键并自己弄清楚正在按下哪些修饰符。但是大多数基于终端的程序只会将Ctrl-Space视为 Space ,除非您告诉 X 以不同的方式对待 Space 和Ctrl- Space。
我怀疑您是否可以仅使用 xmodmap 进行此更改;您可能需要进行较低级别的 /usr/share/X11/xkb/* 黑客攻击。这很复杂,而且我什至不知道您是否首先使用 X,所以我就把它留在那里。
像 urxvt 这样的一些终端允许您指定自己的键绑定。与 Firefox 一样,它们可以分辨出它何时是 Space 以及何时是 Control-Space,即使您无需对 X 进行任何特殊配置。因此您可以告诉 urxvt 在您按下Ctrl-时输出“\033I_TYPED_CONTROL_SPACE_DAMMIT” Space。然后你可以告诉 vim 把它映射到<C-N>
.
编辑:我忘记了用于输出的 Ctrl-Space \0
(我在键盘上的其他地方重新映射了它)。在那种情况下,我上面描述的所有复杂性都是不必要的。我所说的适用于想要使用更具异国情调的映射的人,例如Ctrl-colon 或Alt- Space。