web-dev-qa-db-ja.com

ターミナルvimでctrl x ctrl oをctrlスペースにマッピングするにはどうすればよいですか?

ネットで少し検索した後、マップできないようです CtrlSpace 何でも/たくさん。今日それを行う方法はありますか、私が見つけたものは通常2歳でした。

50
plitter

私は同じ問題に遭遇しました、短い答えはあなたができるはい、そしてGUIバージョンだけではありません。これをあなたに追加.vimrcで十分です:

inoremap <C-Space> <C-x><C-o>
inoremap <C-@> <C-Space>

問題は、Terminal.appが<C-Space>を正しく解釈せず、Vimが組み込みのマッピング(<C-@>)である:help CTRL-@として解釈することです。

多分あなたはあなたの.vimrcで次のようなもので行くことができます:

if !has("gui_running")
    inoremap <C-@> <C-x><C-o>
endif

これは機能しているようですが、私はそのような組み込みをオーバーライドするという考えは好きではありません。

代わりに<Leader>:help leader)を試す必要があります。これにより、独自のカスタムマッピングを定義する大きな可能性が得られ、(選択したmapleaderに応じて)OS /に干渉しなくなりますアプリ固有のショートカット/制限事項により、移植性が向上します。

これで私の.vimrcに:

let mapleader=","
inoremap <leader>, <C-x><C-o>

,,を押してメソッド名を完成させます。

25
romainl

Nitpickerはpabloxソリューションを壊しました。ソリューションの要点は、再マッピングについてだけでした。したがって、再マッピングを無効にすると機能しません。
本当にnoremapを投入したい場合は、次のようになります。

inoremap <expr><C-space> neocomplete#start_manual_complete()
imap <C-@> <C-Space>

何が動作するかnot機能:inoremap <C-@> <C-Space> '<C-Space>パーツ自体は再マッピングされません。

6
oliver

次のコードを~/.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

3
  • やってみました :inoremap <c-space> <c-x><c-o>
  • する CtrlXCtrlO 挿入モードで入力したときに何かしますか? omnifuncは設定されていますか?
3
Benoit

WindowsとLinuxの両方に対応するために、これを~/.vimrc

if has("unix")
  inoremap <C-@> <c-x><c-o>
elseif has("win32")
  inoremap <C-Space> <c-x><c-o>
endif
2
Kidquick

Mac OSのすべてのモードでこのマッピングのセットを使用した方が良い結果が得られました。 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>
0
cmcginty