Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Visual Studio Codeの機能拡張「Vim」の為のメモ

$
0
0

動機

  • うろ覚えvi使いの自分が最近Codeを使う関係上、VSCodeVimの挙動を理解しておく必要があった
  • 本当はPureなViの便利コマンドとかも覚えたいけど、Code上で使えないと混乱するのでCode で使えるもののみメモしておこうと思った。

注意事項

VSCodeのステータスバーに出るモード表示が、一般のVimと異なるので対応表をつけておく。

Code+VimVim
NORMAL MODEコマンドモード
INSERT MODE挿入モード
REPLACE上書きモード
VISUAL MODEビジュアルモード

また、日本語入力状態のままNORMAL MODEに戻ると、NORMAL MODE時のコマンドが
入力できないので、日本語入力モードをOFFにする必要がある。

したがって、オフィスはWindows、家ではMacを使っているので日本語入力ON/OFFキーの
位置が異なる為、たまに困る。

苦肉の策としてはせめてWindowsとMacで同じようなキー操作感にする為、Windowsの
OSレベルでのキーバインド編集で「スペースキー」左にある「無変換」を「IMEオフ」に
なるよう設定する。

モード切替編

困ったらEscキーを押すとよい。

キー入力モード動き
EscすべてNORMAL MODEへ遷移
iNORMALカーソル位置からINSERT MODEに遷移
INORMAL行頭からINSERT MODEに遷移
aNORMALカーソルの次位置からINSERT MODEに遷移
ANORMAL行末からINSERT MODEに遷移
RNORMALカーソル位置からREPLACEに遷移
sNORMALカーソル位置の文字を削除すると同時にINSERT MODEに遷移

移動編

キー入力モード動き
j, k,h or lNORMALカーソル移動。それぞれの文字が「↓↑←→」に対応
njNORMALn行↓に移動(他k,h,lキーも同様)(nは数字です
^NORMAL行頭に移動
$NORMAL行末に移動
ggNORMAL先頭行へ移動
GNORMAL最終行へ移動
nGNORMALn行目に移動(nは数字です)
Ctrl-fNORMAL1画面分下に移動
Ctrl-bNORMAL1画面分上に移動
Ctrl-eNORMAL画面の下スクロール
Ctrl-yNORMAL画面の上スクロール

入力編

特にCtrl-e, Ctrl-yは機能は知っていても、欲しいときに思い出せないという
ジレンマを味わうこと過去多数。今度こそ覚えた!

キー入力モード動き
Ctrl-eINSERT真下の文字と同じものが入力される
Ctrl-yINSERT真上の文字と同じものが入力される
Ctrl-hINSERTバックスペース
Ctrl-wINSERT単語レベルでのバックスペース

Ctrl-e, Ctrl-yの挙動はこんな感じになる

letE_HOGE_INVALID_ARGS=1//<-----------------------------------この位置からCtrl-yを押すと
letE_HOGE_INVALID_ARGS=1letE_HOGE_INVALID_//<----------------異なる部分まで繰り返す
letE_HOGE_INVALID_ARGS=1letE_HOGE_INVALID_TIME=2//<-------残りはそのままキー入力で記述

行コピーを利用しても良いんだが、変更箇所の部分まで移動して、INSERT MODEにして、またNORMAL MODEに戻して移動して……というのが地味にツライ。
(カーソルキーとDeleteキーを併用すれば1回のINSERT MODEでいけるけどポジショニングが悪くなるので微妙)

編集編

キー入力モード動き
uVISUAL選択領域の英字をすべて小文字化
UVISUAL選択領域の英字をすべて大文字化
~NORMALカーソル位置の英字の大文字小文字反転して次に進む。
VISUAL MODE時にも使用できる
xNORMALカーソル位置の文字を削除(Delete)
rNORMALカーソル位置の1文字だけ置換するモードに変わり置換後はNORMAL MODEに戻る
uNORMALUndo
Ctrl-rNORMALRedo

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>