Web制作環境を整える その4 – Vintage を使いやすくカスタマイズする

Vintageous カスタマイズ

前回では、Sublime Text 3 をVimライクな操作方法にする設定を行いましたので、今回はもう少し細かなカスタマイズや、便利なキーストロークの追加をしていきたいと思います。
「Vintageous」パッケージを導入している環境では、マニュアルに記載された通りに sublime-keymap ファイルを変更しても、動作しなかったり、別の機能に影響が出たりします。これは、「Vintageous」がキーマップをもっと柔軟に設定できるように上書きハックしているからのようです。前回導入しようとした「Vintage Surround」が上手く動作しなかったのもこのせいですね。

この辺りの情報が日本語で入手できず、少し苦労したので覚書を兼ねて。(バージョンアップで変わるかもしれません。現在 Vintageous のバージョンは3.8.8です。)

Vimのキモはカーソル移動にあり

私はカーソルの行頭・行末への移動(インデントを含まない)を多用します。キーボードで言うとHome, Endキーです。ただ、このキーって遠いですよね。Vimのキーマップでいうと^, $になるんですけど、押しにくいですよね。

ということで、行頭・行末への移動を別のキーストロークで行うための設定をします。行頭へは g h 、行末へは g l で移動する様に設定します。

Vintageous を利用したキーマップの設定は、コマンドパレット(Ctrl+Shift+p)の 「Vintageous:Open .vintageousrc」から行います。
Vimを使った事がある方ならお馴染みの .vimrc を模した機能です。何も設定していなければ、真っ新なファイルが開かれます。ここに次のように入力します。

保存したら、Sublime Text 3 を再起動するか、コマンドから Vintageous: Reset すればOKです。

カーソル行の行頭から行末までを範囲選択するキーストロークもついでに設定しました。 t t (t連打)に割り当てました。

改行コードを含まないように、最後に一文字分戻しています。

Vintageous のマッピングがサポートしているのは次の通りです。

  • :map / :unmap
  • :nmap / :nunmap
  • :omap / :ounmap
  • :vmap / :vunmap

制限事項

  • 再帰的・階層的マッピングは使えない
  • Vintageous が判断できるキーのみが使用できる
  • Vintageous が判断できるコマンドのみが使用できる

とのことです。

ノーマルモードへ戻ったらIMEを切る

インサートモードで日本語を入力し、Esc でノーマルモードへ戻った際に、IMEがONになったままで次の命令を打とうとしてイライラしたりしていませんか?

SublimeText3 – Windows版Sublime Text3のVintage Modeでnormal modeに戻ったらIMEを無効にする – Qiita

こちらのサイトにその対処方法が載っています。キーボードの何処かにIMEをOFFにするキーを指定して、ノーマルモードへ戻るときにキーを押す動作をエミュレートする仕組みで対処されています。これはWindows版ですが、同サイトにMac版での対処方法も掲載されています。

Pythonを書ける人は、こんな風に自作のプラグインを作成するのも面白いかと思います。

SublimeTextのプラグイン作成方法|ブログ|奈良先端科学技術大学院大学 情報基盤システム学研究室

Vintageous で衝突したキーボードショートカットを再定義する

Vintageous を導入した事で衝突し使えなくなったショートカットを、別のキーへ再定義します。

メニューの [Preference] – [Key Bindings – User] を選択し、設定ファイルを開きます。キーバインド設定の書式は条件や引数など複雑な指定もできますが、まずは簡単に。

Vintage のキーストローク覚書(自分用)

一度この辺で、カーソル移動・テキスト編集のキーストロークの一覧を作成しておきます。再定義したキーバインドなども含んでいるので、あくまで自分用です。

カーソル移動
キーストローク 機能
k, j, h, l 上下左右
w, b 単語単位(語頭)
e, g e 単語単位(語尾)
0 行頭へ移動
^, Home, *g h 行頭へ移動(インデントを含まない)
$, End, *g l 行末へ移動
g m カーソル位置から行末までの中間に移動
f [検索文字] カーソル行の次の指定文字へ進む
F [検索文字] カーソル行の前の指定文字へ戻る
Ctrl+e, Ctrl+y 1行分上下移動
Ctrl+d, Ctrl+u 半ページ分上下移動
Ctrl+f, Ctrl+b,PageUp, PageDown 1ページ分上下移動
z t カーソル行を画面の先頭に
z z カーソル行を画面の中間に
z b カーソル行を画面の最後に
g g ファイルの先頭へカーソルを移動
G ファイルの末尾へカーソルを移動
[行番号] g g,
[行番号] G
指定した行へカーソルを移動
H 画面内の上部へカーソルを移動
M 画面内の中間へカーソルを移動
L 画面内の下部へカーソルを移動
% 対応する括弧にカーソルを移動
m [a-z] マークを設定(aからz)
` [a-z] マーク位置へジャンプ
' [a-z] マークの行頭へジャンプ
Ctrl+o カーソルを元の位置に戻す
Ctrl+i カーソル位置のやり直し
範囲選択
キーストローク 機能
v 文字選択
V 行選択
*t t カーソル行を選択(インデント・改行を含まない)
Ctrl+Shift 右クリック,
Ctrl+Alt+Down Shift+Right
矩形選択
g g v G,
1GvG
全選択
*Ctrl+m 複数選択追加
*Ctrl+Shift+m 複数選択やり直し
*Ctrl+l 複数選択スキップ
Alt+F3 カーソル位置の単語を全て選択
テキスト挿入
キーストローク 機能
i カーソルの前に挿入
a カーソルの後ろに挿入
I 行頭に挿入(インデントを除く)
A 行末から挿入
R 上書き挿入
o 下に行を追加して挿入
O 上に行を追加して挿入
テキスト削除
キーストローク 機能
x カーソルの後ろを一文字削除
X カーソルの前を一文字削除
d w カーソル位置から1単語削除
d d カーソル行を削除
D カーソルから行末まで削除
d a w カーソル位置の1単語を削除(空白を含む)
d i w カーソル位置の1単語を削除(空白を含まない)
テキスト変更
キーストローク 機能
c w カーソル位置から1単語変更
c a w カーソル位置の1単語を変更(空白を含む)
c i w カーソル位置の1単語を変更(空白を含まない)
C カーソル位置から行末まで変更
s 一文字消して変更開始
S, c c カーソル行を変更
r 1文字変更
J 次の行と繋げる
. 直前の動作を繰り返す
Ctrl+Shift+Up/Down 行の入れ替え
Ctrl+Shift+d カーソル行を複製
Ctrl+a カーソル位置の数字をインクリメント(1増加)
Ctrl+x カーソル位置の数字をデクリメント(1減少)
~ カーソル位置の大文字・小文字を変更
g u 選択範囲を小文字へ変更
g U 選択範囲を大文字へ変更
コピー・ペースト
キーストローク 機能
y w カーソル位置から1単語ヤンク(コピー)
y y 1行ヤンク
p カーソル位置の後ろへペースト
P カーソル位置の前へペースト
"[a-z] ヤンクバッファの指定(aからz)
“ay ならバッファaにヤンク。貼り付け時は”ap
編集
キーストローク 機能
u アンドゥ
Ctrl+r リドゥ
検索・置換
キーストローク 機能
/ 後方検索
? 前方検索
n 次を検索
N 前に検索
* カーソル位置の単語を後方検索
# カーソル位置の単語を前方検索
:%s/[match]/[replace]/gi ファイル内の正規表現置換(スイッチ: g – マッチする全て、i – 大文字・小文字を無視)
:’<,'>s/[match]/[replace]/gi 選択範囲内の正規表置換(スイッチ: g – マッチする全て、i – 大文字・小文字を無視)
Ctrl+Shift+f 高度な検索・置換
インデント・成形
キーストローク 機能
> 選択中の行のインデント増加
< 選択中の行のインデント減少
> > カーソル行のインデント増加
< < カーソル行のインデント減少
= 選択範囲を自動成形
表示
キーストローク 機能
Ctrl+PageDown, g t 次のタブへ
Ctrl+PageUp, g T 前のタブへ
マクロ
キーストローク 機能
q [a-z] [マクロ] q キーボードマクロ記録開始・終了
@ [a-z] マクロを実行
@ @ 最後に実行したマクロを実行
保存・終了
キーストローク 機能
:w 保存
:wq, Z Z 保存して終了
:q 終了(内容が変更されている場合は警告)
:q!, Z Q 強制終了
テキストオブジェクト・Surround
キーストローク 機能
v i [引用符・括弧] [引用符・括弧]で囲まれているテキストを選択
v i t 直前のTABで囲まれているテキストを選択
d i [引用符・括弧] [引用符・括弧]で囲まれているテキストを削除
d i t 直前のTABで囲まれているテキストを削除
c i [引用符・括弧] [引用符・括弧]で囲まれているテキストを変更
c i t 直前のTABで囲まれているテキストを変更
y s [範囲] [引用符・括弧] [引用符・括弧]で[範囲]を囲む
e.g. ysiw( ・・・カーソル位置の単語を○括弧で囲む
e.g. ysit<p> ・・・カーソル位置を囲んでいるTAB内をpタグで囲む
d s [引用符・括弧] カーソル位置を囲んでいる直近の[引用符・括弧]を削除
d s t カーソル位置を囲んでいる直近のTABを削除
c s [引用符・括弧] [引用符・括弧(置換)] カーソル位置を囲んでいる直近の[引用符・括弧]を[引用符・括弧(置換)]へ変更
(テキスト選択状態で)S [引用符・括弧・TAB] 選択したテキストを[引用符・括弧・TAB]で囲む