繁体   English   中英

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

[英]How can I change the keybinding used to autocomplete in vim?

我不是Ctrl-n忠实粉丝,我希望能够使用Ctrl-Space 我有什么想法可以做到这一点?

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映射为“将下一个键视为文字”。 因此按下Ctrl - V然后在bash命令行中按Home将在命令行中插入^[[H或类似的东西,而不是转到行的开头。 尝试按Ctrl - V然后按Ctrl - Space 可能你会看到一个空间。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM