如何在vim中更改用于自动完成的键绑定?

时间:2010-02-15 21:21:44

标签: vim autocomplete key-bindings

我不是Ctrl-n的粉丝,我希望能够使用Ctrl-Space。我有什么想法可以做到吗?

3 个答案:

答案 0 :(得分:33)

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

答案 1 :(得分:18)

我也喜欢Ctrl + Space贴图。

" Remap code completion to Ctrl+Space {{{2
inoremap <Nul> <C-x><C-o> 

根据您的情况,您需要:

inoremap <Nul> <C-n>

答案 2 :(得分:8)

如果你想将它映射到Ctrl-E,它就像是:

inoremap <C-E> <C-N>

Ctrl - Space 的问题是大多数终端只会将其视为空格。我假设你在X里面使用了一些终端程序;如果你使用不同的东西,你必须自己提供相关的替换。

Bash的readline通常有 Ctrl - V 映射到“将下一个键视为文字”。所以按 Ctrl - V 然后在bash命令行的Home将在命令行中插入^[[H或类似的东西,而不是去的开始线。尝试按 Ctrl - V 然后按 Ctrl - Space 。可能你会看到一个空间。

在这种情况下,当你按 Ctrl - <时,你将不得不愚弄xmodmap或编写你自己的/ usr / share / X11 / xkb / *文件来告诉X输出不同的东西KBD>空间。像Firefox这样的程序并不关心;他们检测出正在按下哪个基本键,并自行计算出正在按下的修改器。但是大多数基于终端的程序只会看到 Ctrl - Space 作为空格,除非你告诉X处理空格并且 Ctrl - 空格不同。

我怀疑你可以单独使用xmodmap进行此更改;你可能需要做更低级别的/ usr / share / X11 / xkb / *黑客攻击。这很复杂,我甚至不知道你是否首先使用X,所以我就把它留在那里。

某些终端如urxvt允许您指定自己的键绑定。像Firefox一样,他们可以判断它何时是一个空间,什么时候它是一个控制空间,即使你没有做任何特殊的配置X.所以当你按 Ctrl 时,你可以告诉urxvt输出“\ 033I_TYPED_CONTROL_SPACE_DAMMIT” - 空间。然后你可以告诉vim将那个映射到<C-N>

编辑:我忘记了Ctrl-Space用于输出\0(我将其重新映射到键盘上的其他位置)。在这种情况下,我上面描述的所有复杂性都是不必要的。我所说的将适用于想要使用更奇特的映射的人,例如 Ctrl -colon或 Alt - Space