NovaによるVimエミュレーションは、Vimの一般的な機能をNova上で再現するためのカスタム実装です。

他の一般的なエディタが提供しているのと同じような方法で、同じように動作することを意図しています。本VimサポートはSwiftで開発されたNovaの最初の主要部分でもあります。Novaがリリースされて以来、ユーザの皆さまから寄せられたフィードバックのほとんどをカバーするものです。一方、Vimのすべてをカバーするものではなく、またそれに近いものでもありません。

私たちのアプローチは、ユーザの皆さまから要望の多いユースケースと、基本的なものから実装していくと言うものです。


NovaでVimを有効にする

書式メニューからVimモードを選択します。選択し有効にすると、エディタは現在のアクティブなモードと操作に関連したカーソルと動作をする様になります。


🙆 現在の対応状況

👍 ノーマルモード

  • オペレーター(変更、削除、ヤンク、置換、大文字にする、小文字にする、大文字と小文字の入替、インデントを増やす、インデントを減らす)

👍 ビジュアルモード

  • 文字単位選択
  • 行単位選択
  • ブロック(矩形単位)選択

👍 挿入モード

👍 モーション

👍 修飾子

  • テキストオブジェクトの周囲/内部

👍 カウント

  • オペレータ、モーションとコンボ

👍 レジスタ

  • 大文字が追加されたものを含む、名前付きレジスタ
  • (ヤンクされた)0と(削除された)1-9スタックを含む、番号付きレジスタ

👍 エディタ下部のVimバー

  • 現在のモード、ペンディング中の操作、サジェストの各表示

👍 構成のオプション設定

  • 書式設定にVimセクションが追加され、一般的なオプション設定を行えます。

🙅 未対応(現時点で?)

⛔️ マーク

  • 将来、私たちはこれに取り組むつもりです。

⛔️ 読み取り専用レジスタ

  • そのほとんどがNovaに関連しないものです。
  • Windows / Split Movement and Management Bindings
  • 少数の要望がありましたが現時点でのサポートは考えていません。将来、再検討される可能性があります。

⛔️ コマンドモード / Exモード

  • グラフィカルなUIとして : のサポートは比較的容易です。しかしながらモードでサポートされた膨大なコマンドの中からどの程度を統合するのが妥当なのかについて、現時点で定義することができないため計画から除外されています。

⛔️ 自動整形 / インデント整形 =

  • 将来、私たちはこれに取り組むつもりです。しかし現時点でNovaがサポートする言語に対し、統一された整形機能が搭載されていません。そのため、まずはその機能の実装から始める必要があります。

⛔️ フィルタリング !

  • 需要に応じ、近い将来にサポートする可能性があります。

⛔️ .vimrcファイルの解析

  • Novaはこのファイルを解析しません。
  • Vimエミュレーションに関連したオプションは、環境設定の書式タブからご利用いただけます。
  • 将来、特にカスタムバインディングをサポートするため再検討するかもしれません。

⛔️ キーコードのカスタムリバインド

  • .vimrc の一部、もしくはUIを通していずれサポートしたいと考えています。

⛔️ Vimプラグインのサポート

  • 技術的に複雑なため、現時点でサポートは予定しておりません。
  • ポピュラーなプラグインに関しては、似たようなものの提供を考えています。

⛔️ その他のたくさん

  • Vim is… a lot

💁 NeoVimに関する考察

何人かのユーザはNeoVimエディタエンジンを組み込むことで、Vimのすべての機能が手に入るとお考えです。NeoVimプロジェクトは素晴らしいものですが、そのタスクへのアプローチを大きく制限するいくつかの要因があります:

  1. NeoVimのソースコードは巨大です。そしてそのソースの更新を我々自身のプロジェクトと並行して観察し、取り入れ、メンテナンスしていくことは現在の我々のチームにとって大きな負担の増大となります。
  2. NeoVimのAPIデザインでは、エディタのテキストバッファと関連データの所有権をほぼ完全にライブラリに渡す必要があります。そのため、Novaの他の部分がその上に統合される必要があり、難しくなっています(例えば、言語カラーリング機能や機能拡張など)。
  3. NeoVimはエディタのコアでありラッパーではありません。そのため、事実上Novaをラッパーとして再構築することになってしまいます。

“NeoVimを単にラップするだけ。“という大きなメリットは理解していますが、これはNovaプロジェクトの範疇からかなり外れているため、Vimサポートについて我々はエディタコアのラッパーを独自に開発していきます。引き続き皆さまからのご意見をお待ちしております。

最終更新日: 2021年11月09日