web-dev-qa-db-ja.com

vimでオートコンプリートするために使用されるキーバインドを変更するにはどうすればよいですか?

私はCtrl-nの大ファンではないので、Ctrl-Spaceを使用できるようにしたいと思います。どうすればそれができるのでしょうか?

38
Geo
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
34
Jeffson

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にスペースを扱うように指示しない限り、スペースとして Ctrl-Space 別の方法で。

Xmodmapだけでこの変更を行うことができるとは思えません。おそらく、低レベルの/ usr/share/X11/xkb/*ハッキングを行う必要があります。これは複雑で、そもそもXを使用しているかどうかさえわからないので、そのままにしておきます。

Urxvtのような一部の端末では、独自のキーバインディングを指定できます。 Firefoxのように、Xを構成するために特別なことをしなくても、スペースであるかコントロールスペースであるかを知ることができます。したがって、を押すと「\ 033I_TYPED_CONTROL_SPACE_DAMMIT」を出力するようにurxvtに指示できます。 Ctrl-Space。そして、vimにthat<C-N>にマップするように指示できます。

編集:Ctrl-Spaceが\0を出力するために使用されたことを忘れました(キーボードの別の場所に再マップしました)。その場合、上記で説明した複雑さはすべて不要です。私が言ったことは、次のような、よりエキゾチックなマッピングを使用したい人に当てはまります。 Ctrl-コロンまたは Alt-Space

10
dubiousjim