nyagos では大丈夫なんだけど、コンソール版 vim.exe だと、Ctrl-H をタイプすると Backspace と認識されず豆腐(□)が表示される。
ちょっとしたコードを書いて、違いを比較してみた。
package main import ( "fmt" "github.com/zetamatta/go-console/getch" ) func main() { getch.Flush() // get console event fmt.Println("Type ESC-Key to program shutdown.") for { e := getch.All() if k := e.Key; k != nil { fmt.Printf("key down: code=%04X scan=%04X shift=%04X\n", k.Rune, k.Scan, k.Shift) } if k := e.KeyUp; k != nil { fmt.Printf("key up: code=%04X scan=%04X shift=%04X\n", k.Rune, k.Scan, k.Shift) if k.Rune == 0x1B { break } } } }
コマンドプロンプトでは:
$ ./example5.exe Type ESC-Key to program shutdown. key up: code=000D scan=000D shift=0000 key down: code=0000 scan=0011 shift=0008 key down: code=0008 scan=0048 shift=0008 key up: code=0008 scan=0048 shift=0008 key up: code=0000 scan=0011 shift=0000 key down: code=001B scan=001B shift=0000 key up: code=001B scan=001B shift=0000
Ctrl-H のコードがBackspace文字通り Ctrl + H (code=0008,shift=0008)と認識されている。
Windows Terminal では:
$ ./example5.exe Type ESC-Key to program shutdown. key down: code=0000 scan=0011 shift=0008 key down: code=007F scan=0008 shift=0008 key up: code=007F scan=0008 shift=0008 key up: code=0000 scan=0011 shift=0000 key down: code=001B scan=001B shift=0000 key up: code=001B scan=001B shift=0000
Ctrl-H のコードが Ctrl+Del(code=007F,shift=0008) と認識されている。なるほど。
.vimrc で Ctrl+Del を Backspace 相当にアサインすればよさそうだけど、どうすりゃいいんだ?
inoremap <C-Del> <Bs> inoremap <Del> <Bs>
と書いてみたけど、効いてなさそう…うーむ
(追記)
inoremap <C-Char-0x7f> <Bs>
で Ctrl-H がBackspace として機能するようになった。
(さらに追記)
Windows Terminal 1.4.3.141.0 では直ってた。