VSCode のNeovimプラグインのInsertモードで、Emacs風のキーバインドを使用する

表題通り、VSCode にNeovimプラグインを導入した状態で、 Insertモード中にEmacs風のキーバインドを使いたいと思い、以下のような設定をinit.vimに記述しました。

"Emacsキーバインド
inoremap <silent> <C-a> <Home>
inoremap <silent> <C-e> <End>
inoremap <silent> <C-h> <BS>
inoremap <silent> <C-d> <Del>

けど、全然想定通りに動かない・・・

ちょっと調べたところ、こんな記事を発見した。

VSCodeの拡張機能のVSCode NeoVimについて

Insertモードのキーバインドは、init.vimに記述してもダメなのね。

VSCodeのkeybindings.jsonに以下の記述を追加して解決!

{
"key": "ctrl+a",
"command": "cursorHome",
"when": "neovim.mode == insert && editorTextFocus"
},
{
"key": "ctrl+e",
"command": "cursorEnd",
"when": "neovim.mode == insert && editorTextFocus"
},
{
"key": "ctrl+h",
"command": "deleteLeft",
"when": "neovim.mode == insert && editorTextFocus"
},
{
"key": "ctrl+d",
"command": "deleteRight",
"when": "neovim.mode == insert && editorTextFocus"
},
{
"key": "ctrl+k",
"command": "deleteAllRight",
"when": "neovim.mode == insert && editorTextFocus"
},
{
"key": "ctrl+m",
"command": "type",
"args": { "text": "\n" },
"when": "neovim.mode == insert && editorTextFocus"
}

自分が使いたいものだけ記述しましたが、以下のドキュメントを参考にすれば、他にも色々と設定できそうです。

https://github.com/vscode-neovim/vscode-neovim

Vimの操作方法私的メモ

Vimの操作方法私的メモ

前提として知っておくべき知識

Vim Cheat Sheet 随時参考にしていく

  • 操作の取り消し
    • u <> ctr + r

ノーマルモードでの操作は、オペレータとモーションの組み合わせで行う。

vimのキー(主にノーマルモードについて)は、大きく分けて「オペレータ」と「モーション」の2種類がある。これを把握することが大事。 オペレータ: 動詞として動作を指定する。主要なものは4つなのでここから覚えよう モーション: 対象範囲を指定する オペレータは意味のあるキーバインドになっているので、以下のような感じで覚えよう:

c : change (変更) d : delete (削除) y : yank (ヤンク: コピーと同義) g : go (移動全般) ノーマルモードでは基本的に最初にオペレータを入力し、その後に範囲指定を行う(CUI的発想)が、ビジュアルモードでは範囲を最初に選んでそれからオペレータを入力する (GUI的発想)という違いがある。

Vim幼稚園からVim小学校へ #Vim - Qiita

vimtutorに取り組む

vimtutorにある操作は積極的に使って行きたい。

自分が知らなかった・使いたい操作を列挙していく。

モーション(ノーマルモードだとカーソル移動)

  • オペレータ:動詞
    • c : change (変更)
    • d : delete (削除)
    • y : yank (ヤンク: コピーと同義)
    • g : go (移動全般)
  • 数値のタイプで繰り返し設定ができる
  • モーション:対象範囲
    • w - カーソル位置から空白を含む単語の末尾まで。
    • e - カーソル位置から空白を含まない単語の末尾まで。
    • $ - カーソル位置から行末まで。
  • ex.
    • d3w -> 3単語を削除する

編集

  • p
    • 削除したものを貼り付け
  • D
    • 行末まで削除
  • 置き換え
    • r
      • 入力との置き換え
    • ce
      • 単語の末尾まで
    • cc
      • 行全体

移動

  • 0
    • 先頭 <> $
  • w
    • 単語 <> 末尾
  • 行番号 -> G
    • 行番号にジャンプ
  • 元の場所に戻る
    • ctr + o <> ctr + i
  • %
    • かっこに移動
  • 置換
    • :s/hoge/fuga/(g)
      • gがあると行全体
    • :#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定する。
    • :%s/old/new/g ファイル全体で見つかるものに対して変更する。
    • :%s/old/new/gc ファイル全体で見つかるものに対して、1つ1つ確認をとりながら変更する

検索

  • ?で検索
    • 逆方向
  • y or

その他

  • 外部コマンドの実行
    • :!コマンド

参考にした記事

Vim幼稚園からVim小学校へ #Vim - Qiita