wasavi (VI editor for any web page)
wasavi は Chrome、Opera、Firefox 用のエクステンションです。 wasavi はあらゆるページ上の TEXTAREA 要素を VI エディタ化します。wasavi はほぼすべての VI コマンド、およびいくつかの ex コマンドをサポートします。
wasavi の開発は継続中です。バグレポートや機能の要請はどんなものでも歓迎します。
また、開発を継続するための寄付も歓迎します:
簡単な使い方
ネイティブな TEXTAREA があったとき
TEXTAREA にフォーカスし、
Ctrl+Enter
を押すと wasavi が起動します
込み入った使い方
wasavi はいくつかの ex コマンドをサポートします。これは
:set all
したところVim のインクリメンタルサーチ
オンラインアプリとしての wasavi。 このリンクを wasavi をインストールしたブラウザで開くと自動的に wasavi が起動し、dropbox/google drive アカウント上のファイルを読み書きできます。
インストール
現在、wasavi は以下のブラウザで動作します。各ブラウザで以下のリンクをクリックし、標準的なエクステンションのインストール方法に従ってください。これらのエクステンションは各ブラウザのアドオン・ストアに登録されています。
Firefox addon
ソースコードと最新の開発版は Github で管理しています:
Opera ユーザへの注意
Presto ベースの Opera は DOM3 Composition Event をサポートしていないので、IME を通した入力は保証されません。Presto ベースの Opera は拡張に対してシステムクリップボード操作を許していません。したがって Opera ではレジスタ *
は使用できません。
Chrome ユーザへの注意
Chrome は Ctrl+T、Ctrl+W および Ctrl+N の基本的なショートカットを予約しています。これらのキーは wasavi から使用することができませんが、その代わりに Alt+T、Alt+W および Alt+N を使うことができます。
よく聞かれる質問
wasavi の起動
TEXTAREA にフォーカスし、Ctrl+Enter
を押してください。
wasavi の終了
wasavi を終了するには ZZ
、:q
、:wq
などの VI の終了コマンドを入力してください。
wasavi が :set
コマンドで受け入れるオプションは?
表 を参照してください。
注意: 受け入れるが、まだ何の効力も持たないオプションもあります。
Firefox で Vimperator と共存する
wasavi_mediator.js を Vimperator のプラグインディレクトリに置いてください。たとえば ~/.vimperator/plugin
や %HOME%\vimperator\plugin
です。
このプラグインは wasavi の状態に従って Vimperator のパススルーモードを制御します。
Firefox で Keysnail と共存する
wasavi_mediator.ks.js を Keysnail のプラグインディレクトリに置いてください。
このプラグインは wasavi の状態に従って Keysanil のサスペンドモードを制御します。
単体のテキストエディタとしての利用
wasavi をインストールし、リンク オンラインアプリとしての wasavi を開いてください。wasavi が自動的に起動します。この状態では、Dropbox/Google Drive のファイルに対して ex コマンド :read
、:write
、:edit
、:file
が使用できます。Dropbox/Google Drive へのアクセスのために OAuth による承認が必要です。
自動的な設定の上書き
wasavi の実行時に入力された :set
コマンドは、エクステンションに永続的に記憶され、wasavi の次回の実行時に再生されます。
この設定の上書き機構は最大 30 の各 URL ごとに機能します。この機能が不要であるならば、exrc に :set nooverride
を追加してください。上書きは無効になります。
バグを見つけた
wasavi issue tracker で issue を作成してください。
Tips and Tricks
- wasavi の最大化:
:set fullscreen
or:set fs
- wasavi を元に戻す:
:set nofullscreen
or:set nofs
- カラーテーマを変える:
:set theme=blight
or:set theme=charcoal
or:set theme=matrix
- 初期設定を変更する:
各ブラウザのエクステンション管理機能から wasavi の設定ページを開き
(または wasavi 上で
:options
と入力)、"exrc" テキストボックスを編集する - :abbreviate の文法は:
:abbreviate
は、登録されている全ての略語を表示します:abbreviate [clear]
は、全ての略語を削除します:abbreviate lhs
は、lhs に対応する略語を表示します:abbreviate lhs rhs
は、lhs を rhs に展開する略語を登録します:abbreviate [noremap] lhs rhs
も登録しますが、こちらは remap の影響を受けません。
- :map の文法は:
:map
は、登録されている全てのマップを表示します:map [clear]
は、全てのマップを削除します:map lhs rhs
は、lhs を rhs に変換するマップを登録します。この変換は再帰します。<esc>
のような、lhs と rhs 内のキーストローク記述子の文法については、このページ を参照してください:map [noremap] lhs rhs
も登録しますが、 こちらは再帰しません:map
はノーマルモード用のマップを対象とします。一方、:map!
は挿入モード用です。これは vim の:imap
に相当します
- j k ^ $ はカーソルを物理行単位で移動させます。一方、gj gk g^ g$ は
折り返し行単位で移動させます。この振る舞いを交換するには:
:set jkdenotative
- 日本語のための f/F/t/T の拡張: これらのコマンドはひらがな、カタカナ、および
漢字の読み(ローマ字での表現)を認識します。たとえば、
fk
は 「か」「カ」「漢」などの上にカーソルを置きます。 - ラテン文字のための f/F/t/T の拡張: これらのコマンドはダイアクリティカルマーク
が付されたアルファベットの基底文字を認識します。たとえば
fa
は 「å」、「ä」、「à」、「â」、「ā」などの上にカーソルを置きます。対応表 も参照してください。 - オンラインストレージをファイルシステムとして使用する:
:filesystem status
は、現在使用可能なファイルシステムを表示します:filesystem default
は、デフォルトのファイルシステムを取得します。 設定の際は:filesystem default dropbox
や:filesystem default gdrive
と入力します:filesystem reset
はアクセストークンを破棄します。こちらも、ファイルシステム名を 指定することができます- ファイル名の先頭にファイルシステム名を明示することができます:
:read dropbox:/hello.txt
- A から Z までのレジスタを読み込む際、いくつかのレジスタは特別な内容を返します:
B
register: ユーザーエージェント文字列D
register: 現在の日付時刻文字列(datetime
オプションを strftime(3) のテンプレートとして使用します)T
register: タイトル文字列U
register: URL 文字列W
register: wasavi のバージョン文字列
- 設定をデフォルトの状態へ戻すには:
:set <オプション名>&
または:set <オプション名>&default
- 全ての設定をデフォルトの状態へ戻すには:
:set all&
または:set all&default
- 設定を exrc の評価直後の状態へ戻すには:
:set <オプション名>&exrc
- 全ての設定を exrc の評価直後の状態へ戻すには:
:set all&exrc
- テキストを書き出し、wasavi を閉じた後自動的にフォームをサブミットするには:
:wqs
:submit
(:sub
まで省略できます)
実装済みコマンド
- [count] operation [count] motion
- [count] operation [count] range-symbol
- [count] surround-operation [count] motion surround-string
- [count] surround-operation [count] range-symbol surround-string
- [count] de-surround-operation [count] surround-identifier
- [count] re-surround-operation [count] surround-identifier surround-string
- [count] operation-alias
- [count] surround-operation-alias surround-string
- [count] motion
- [count] scroll-command
- [count] edit-command
- [count]
:
ex-command
Operations
c
y
d
>
<
gq
gu
gU
Operation Aliases
cc
yy
dd
>>
<<
C
Y
D
gqq
guu
gUU
yss
ySS
最後の 1 文字の前にカウンタを挿入することができます。
Surround Operations
- 囲む:
ys
yS
- 囲みを除去する:
ds
- 囲みを変更する:
cs
Motions
-
+
^
<home>
$
<end>
%
|
,
;
_
/
?
'
`
(
)
{
}
[[
]]
<enter>
0
j
k
h
l
^N
^P
^H
<down>
<up>
<left>
<right>
<space>
w
W
b
B
e
E
gg
gj
gk
g^
g$
G
H
M
L
f
F
t
T
n
N
Range symbols (Vim text objects)
a"
a'
a`
a[
a]
a{
a}
aB
a<
a>
a(
a)
ab
aw
aW
ap
as
at
i"
i'
i`
i[
i]
i{
i}
iB
i<
i>
i(
i)
ib
iw
iW
ip
is
it
Scroll commands
^U
^D
^Y
^E
^B
^F
<pageup>
<pagedown>
z<enter>
z.
zz
z-
Edit commands
x
X
<delete>
p
P
J
.
u
^R
~
^L
^G
ga
gv
m
@
q
r
R
a
A
i
I
o
O
&
s
S
v
V
ZZ
gi
ex commands
abbreviate
cd
chdir
copy
delete
edit
file
filesystem
global
join
k
map
mark
marks
move
options
print
put
pwd
quit
read
redo
s
&
~
set
sort
submit
registers
to
unabbreviate
undo
unmap
version
v
write
wq
wqs
xit
yank
>
<
@
*
ex コマンドでのアドレス指定はフルサポートされています:
- バッファ全体:
%s/re/rep/
- 現在行:
.p
- バッファの最終行:
$p
- 絶対的な行番号:
1,2p
- 相対的な行番号:
+1,+2p
- 正規表現:
/re/p
?re?p
- マークの参照:
'a,'bp
さらに、/re/+1p
のようにオフセットも受け付けます。
2 つのアドレスは通常 ,
で繋ぎますが ;
で繋ぐこともできます。
入力モードのコマンド
^@
: 最後に入力したテキストを入力し、input モードを抜ける。このキーストロークは実際にはCtrl+Space
です。^D
: アンシフト。ただし最後に入力した文字が0
か^
のとき、インデントを全て削除する^H
: 1 文字削除^R
: レジスタの内容を貼り付ける^T
: シフト^U
: input セッションで入力されたすべての文字を取り消す^V
: 1 文字入力のためのエスケープシーケンス^W
: 1 単語削除
行入力モードのコマンド
^A
: カーソルを行頭へ^B
: 1 文字戻る^E
: カーソルを行末へ^F
: 1 文字前へ^H
: 1 文字削除^N
: 次の履歴^P
: 前の履歴^R
: レジスタの内容を貼り付ける^U
: 行全体を削除^V
: 1 文字入力のためのエスケープシーケンス^W
: 1 単語削除tab
: ex コマンド名、set オプション名、read/edit/write/file のファイル名引数の補完
範囲選択モードのコマンド
範囲選択するにはコマンドモードで v
または V
を押します。
c
: 選択範囲を削除し、insert モードに移るd
: 選択範囲を削除するy
: 選択範囲をヤンクする<
: 選択範囲を unshift する>
: 選択範囲を shift するC
: 選択範囲行を削除し、insert モードに移るS
: 選択範囲を囲むR
:C
と同じD
: 選択範囲行を削除するX
:D
と同じY
: 選択範囲行をヤンクするg
で始まるコマンドa
、i
で始まる Range Symbols~
: 選択範囲の大文字・小文字を交換する:
: ex コマンドモードに移るJ
: 選択範囲の改行を取り除くp
: 選択範囲を削除し、レジスタの内容を貼り付けるP
:p
と同じr
: 選択範囲を次に入力した 1 文字で置き換えるs
:c
と同じu
: 選択範囲を小文字化するU
: 選択範囲を大文字化するv
: 文字単位の選択に切り替えるV
: 行単位の選択に切り替えるx
:d
と同じ
囲み識別子
- 次のいずれかの記号類:
!#$%&*+,\-.:;=?@^_|~"'`
- 次のいずれかの括弧類:
abBrt[]{}()
囲み文字列
- 次のいずれかの記号類:
!#$%&*+,\-.:;=?@^_|~"'`
- 次のいずれかの括弧類
abBr[]{}()
- 次のいずれかで始まるタグ:
^T
,<Tt
Vim 互換の機能
- 多段 undo/redo
- インクリメンタルサーチ
- レンジシンボル(Vim で言うところのテキストオブジェクト)
- レジスタ
"
、:
、*
、/
(特に*
はクリップボードとのアクセスを行うので重要です) - textwidth > 0 の状態における input モードの自動整形、および自動整形オペレータ(gq コマンド)
- 範囲選択モード(Vim でいうところのビジュアルモード)
- オプション
iskeyword
、incsearch
、smartcase
、undolevels
、quoteescape
、relativenumber
、textwidth
、expandtab
、cursorline
、cursorcolumn
- A から Z レジスタへの書き込み
gu
/gU
+ モーションは領域を小文字化または大文字化します- Surround.vim の一部の機能
:sort
の一部の機能(正規表現パターン、r
、i
オプション)