- vi は :s コマンドに c オプションを付加して対話的に実行した場合、置換する(y)、スキップする(n)、終了する(q) の 3 つの選択肢をユーザーに提示する。vim は、より多くの選択肢を提示する。そのうち、これ以降全て置換する(a) および これを置換して終了(l) を実装した
- Range Symbols は [cci][({<[/cci] の各文字について、その全角版も認識するようになった
- 文字の分類に Unicode の Scripts.txt のデータを参照するようになった。これにより、たとえば U+0100 以降のダイアクリティカルマーク付きアルファベットが混ざった単語に対して w コマンドなどが正しく動作するようになった
- vim の :sort コマンドを実装した。このコマンドはいくつかのオプションを備えているが、そのうち [cci]i[/cci][cci]r[/cci] およびパターンの指定を実装した。また、各行の特定の桁数までスキップした上でソート対象にする場合、vim では正規表現のメタキャラクタで桁数を指定するらしいのだけど、そのかわり [cci]c[/cci] オプションを実装した。[cci]:sort c10[/cci] などとすると各行の 0 オリジンでの 10 桁目以降の文字列を取り出してソート対象にする
- % コマンドにカウンタ n を与えた場合、vim と同様にバッファの行の n% の位置にジャンプするようにした
- vi は歴史的に、カーソルが非空白文字の上にある場合に cw コマンドを ce コマンドとして扱う。より正しくその動作をエミュレートするように修正した
- magic オプションというものがあり、正規表現中のメタキャラクタの表し方を制御する。このオプション、とても強力すぎる。magic の値によってほとんどすべての ex コマンドが影響を受けるのである。そんなわけで magic の効果を除去した
- vim の *、# コマンドを実装した。ただし、vi での正規表現 [cci]\<[/cci][cci]\>[/cci] に相当するメタキャラクタを javascript のそれは持っていないのでそのへんはちょっと不完全
- vim の ga コマンドを実装した
- set コマンドに与えるオプションの中には、値の設定の完了を非同期的に待たないといけないものがある。たとえば fullscreen オプションはコンテントスクリプト間のメッセージングを伴うので非同期だ。この完了を正しく待つようにした。これは [cci]:set fs tw=80 cul[/cci] などと並べて書いた場合も同様で、正しく逐一実行される
最近のだいたい大まかなハイライトはこんな感じ。