Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
98
Help us understand the problem. What is going on with this article?
@kuroyakov

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

More than 3 years have passed since last update.

動機

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

注意事項

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

Code+Vim Vim
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へ遷移
i NORMAL カーソル位置からINSERT MODEに遷移
I NORMAL 行頭からINSERT MODEに遷移
a NORMAL カーソルの次位置からINSERT MODEに遷移
A NORMAL 行末からINSERT MODEに遷移
R NORMAL カーソル位置からREPLACEに遷移
s NORMAL カーソル位置の文字を削除すると同時にINSERT MODEに遷移

移動編

キー入力 モード 動き
j, k,h or l NORMAL カーソル移動。それぞれの文字が「↓↑←→」に対応
nj NORMAL n行↓に移動(他k,h,lキーも同様)(nは数字です
^ NORMAL 行頭に移動
$ NORMAL 行末に移動
gg NORMAL 先頭行へ移動
G NORMAL 最終行へ移動
nG NORMAL n行目に移動(nは数字です)
Ctrl-f NORMAL 1画面分下に移動
Ctrl-b NORMAL 1画面分上に移動
Ctrl-e NORMAL 画面の下スクロール
Ctrl-y NORMAL 画面の上スクロール

入力編

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

キー入力 モード 動き
Ctrl-e INSERT 真下の文字と同じものが入力される
Ctrl-y INSERT 真上の文字と同じものが入力される
Ctrl-h INSERT バックスペース
Ctrl-w INSERT 単語レベルでのバックスペース

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

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

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

編集編

キー入力 モード 動き
u VISUAL 選択領域の英字をすべて小文字化
U VISUAL 選択領域の英字をすべて大文字化
S<t> VISUAL 選択領域の前後を文字で囲む。サラウンド入力
~ NORMAL カーソル位置の英字の大文字小文字反転して次に進む。
VISUAL MODE時にも使用できる
x NORMAL カーソル位置の文字を削除(Delete)
r NORMAL カーソル位置の1文字だけ置換するモードに変わり置換後はNORMAL MODEに戻る
u NORMAL Undo
Ctrl-r NORMAL Redo
ds<t> NORMAL 文字で囲まれている領域のだけ削除する。サラウンド削除

VISUAL MODEでのS<t>は意外とややこしい。とりあえず、手段は色々ありますが、わかりやすいのは対象の領域をVISUAL MODEで選択し、Sを入力した後に、囲みたい文字を入れる手順。
例えば、マークダウンで「`」で囲みたい時なんかこれを使うと楽になる。

サラウンド削除するためのds<t>コマンドがたまに効かなくなるのが辛い…。

98
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
kuroyakov
伝統産業企業からITベンチャー会社に転職した、元ソフトウェア開発者です。 ここでの情報提供は個人の判断で行っているものであり、所属する団体の見解を示すものではありません。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
98
Help us understand the problem. What is going on with this article?