[[Neovim]]にて、`Shift+Space`で[[Hippie completion]]みたいなことをできるようにしたい。 ## 使う機能 `<C-x><C-p>`による補完でやりたいことはできる。 ## キーマップ `Shift+Space`へのキーマップ割り当てがうまくいかない。 ```lua key('i', '<S-Space>', '<C-x><C-p>') ``` は無理だった。軽く調べてみると厳しそう。 仕方ないので[[AutoHotkey]]で`Shift+Space`を別のキーにマッピングして、それを[[Neovim]]で設定する。はじめは`F13`とかにしようとしてみた。 ```autohotkey $+Space:: if (isTerminal()) { send {F13} } else { send +{Space} } return ``` しかし、これだと[[Ubuntu]]環境の[[Neovim]]では反応しなかった。[[Ubuntu]]環境で`F13`が認識されてなさそう。 仕方ないので`Shift+F6`に割り当てることにした。もともと`Shift`の修飾子を含むキーなので、[[AutoHotkeyの押しっぱなし問題]]も起こりにくいはず。 ```autohotkey $+Space:: if (isTerminal()) { send +{F6} } else { send +{Space} } return ``` 今度は[[Windows]]と[[Ubuntu]]で`Shift+F6`の解釈が変わるという問題が発生した。 > [[📝NeovimでShift+Functionキーを入力するとWindowsとUbuntuでキー入力が異なる]] 解決策は結局分からずだったので、これは[[OS]]の違いと割り切って[[Neovim]]の[[init.lua]]で吸収するようにした。 ```lua -- Hippie completion if is_windows then key('i', '<S-F6>', '<C-x><C-p>') else key('i', '<F18>', '<C-x><C-p>') -- Ubuntu(WSL)ではS-F6がF18となるため end ``` あまりスマートではないがこれで一応動いた。 ## まとめ [[AutoHotkey]]の設定。 ```autohotkey $+Space:: if (isTerminal()) { ; WSLだとF18になる send +{F6} } else { send +{Space} } return ``` [[Neovim]]の設定。 ```lua -- Hippie completion if is_windows then key('i', '<S-F6>', '<C-x><C-p>') else key('i', '<F18>', '<C-x><C-p>') -- Ubuntu(WSL)ではS-F6がF18となるため end ```