2012年以来、私はAlexei Torgashinが作成したエディターを使用して、 VFP / JS / Python / XML / HTML言語のほぼすべてのテキストファイル、ログ、およびプログラムコードを表示および変更します。最初はSynWriteでしたが 、現在はCudaTextの子孫です。 彼は、 AkelPad 、 Notepad ++ 、 Sublime Textなど、テスト済みのリストからエディターを意図的に選択しました。 テクニカルサポートの応答性が決定的であることが判明しました。Alexeyはユーザーからの膨大な数の要望/苦情を受け入れ、すぐにそれらを実装しました。 説明します。 願い/苦情の数は長年にわたってほぼ一定でしたが、3年前にGitHubに切り替えた後、 それは測定可能になり、年間400の願いと100のバグ/年と推定されています。 ワーカーの要求に応じて機能を拡張しても、エディター全体の信頼性に影響を与えなかったことは、驚くべきことです。 そして、 SynWriteの持続可能な開発リソースが使い果たされると、 CudaTextが生まれました。
Alexeyとさまざまなトピックについて会話しています。 彼は最近「Sublimeに欠けているもの」を挙げました。 私には面白そうだったので、これらのアイデアをHabréで発表することに同意しました。 さらに、私の編集でアレクセイからの論文のプレゼンテーションがあります。
プログラムを作成するのに数年を費やしてきたので、競合他社の結果を違った見方をしています。 あなたはそれらの中に良い特性(すでにそれらを適用したか、適用したい)だけでなく、欠点にも気づきます。 私がCudaText (以降Cuda )と比較した場合、 Sublime Text (以降Sublime )で何が改善できるかを示します。 同時に、 Sublimeがすでに普及しているときに私のエディターが生まれたことを強調します。彼のアイデアの多くはCudaの基本でした。
- テキスト設定ファイル
- オーバーレイ設定
- マルチキャリッジ
- Pythonプラグイン
- すべてのチームのパレット
Sublimeは 、テキストチームスタイルの作業を厳格に課します。
たとえば。
- 設定するダイアログはありません-jsonファイルのみです(多くのファイルがあります)。
- [ファイルで検索]ダイアログには追加のコントロールはありません-代わりに、テキストフィールドに入力するための「言語」があります。
このスタイルは効率的で、柔軟性があり、拡張可能ですが、ユーザーによる継続的な学習が必要です。 初心者にとって、これは顕著なエントリーしきい値を作成します。
Cudaはより手頃な価格のツールになろうとしています。 これは、 Lazarus環境で作成されているため可能です。これは、 Win / Linux / Mac間の豊富なGUIの武器と移植性を提供します。 その結果、 Cudaのjson設定の柔軟性は、たとえばファイルによる検索( habrの概要があります )、設定エディターなどのダイアログプラグインと組み合わされます。
Sublimeをどのように改善するかについて、いくつかのアイデアを表現しようと思います。 もちろん、これは私の個人的な意見です。
ツールバー
Sublimeにはツールバーはありません。 したがって、彼のテキストチームスタイルが現れます。 どうやら、編集可能なコードの便利な場所がより重要であると思われます。 すべてのコマンドは、メニューから、または名前からパレットから、またはホットキーから呼び出すことができます。 このアプローチには明らかな欠点があります-チームの名前またはホットキーを事前に知る必要があります。 しかし、適切なチームの存在とその名前は、常に明白とはほど遠いものです。
切断可能を含むカスタマイズ可能なツールバーは、使用のしきい値を下げる詳細の1つです。
Cudaには、コマンドを呼び出すための水平カスタムツールバーと、パネル、ツリー、プロジェクト、コンソールを切り替えるための垂直サイドバーがあります。 APIは、ツールバーのセットアップを担当します。つまり、プラグインを介して実行されます。 プラグインが新しいパネルを追加すると、サイドバーに新しいボタンが表示される場合があります。
Sublimeにツールバーを追加しても、以前のテクノロジーに違反することはありません。
ステータスバー
Sublimeでは、ステータスバーが貧弱です。
(1)コンソール/検索/置換/パネルファイルスイッチによる
(2)投稿
(3)エンコード
(4)タイプEOL
(5)タブ設定
(6)構文
これらの6つのフィールドのうち、設定で非表示にできるのは2つ(エンコードとEOL)のみで、メッセージフィールドでは、プラグインはキーと値のペアを追加/削除できます。 残りのフィールドを非表示、再配置、または構成することはできません。 キャリッジ(s)/選択(s)に関する重要な情報が[メッセージ]フィールド内に取得され、チームからのテキストと混合されることは特に奇妙です。
user.json
では、ユーザーはuser.json
でステータスバーのフィールドを使用して、シーケンス、幅、配置を指定できます。
"ui_statusbar_panels": "caret,L,250|msg,L,0|lexer,L,70|tabsize,L,70"
caret
フィールドの入力(キャリッジ/選択に関する情報)は、マクロ置換を使用して個別に構成できます。 たとえば
"ui_statusbar_no_sel": "r={y}/{count} c={xx}", "ui_statusbar_carets": "carets={carets} top/bot={y}/{y2}", "ui_statusbar_col_sel":"r={y}/{count} c={xx} s=[{sel} x {cols}]",
これらの設定の結果、 Cudaはステータスバーに表示されます
- キャリッジが1つの場合:
- キャリッジが4つある場合:
- 垂直選択の場合:
Cudaでは、[メッセージ]フィールドにテキストを表示するのにかかる時間を設定することもできます。
コードツリー
すべてをテキスト形式で提示するという崇高な願望は理解できます。 ただし、すべてのIDEおよび高度なテキストエディタにあるツリーパネルの拒否は、非常に苦痛です。 通常のタブ(たとえば、 Outline
プラグイン)に配置された「テキストツリー」を使用できますが、 Sublimeインターフェイスとの統合が不十分であり、完全な代替ではありません。
Cudaには、アクティブファイルの構文要素を表示するためのCode tree
パネルがあります:プログラム言語の関数/クラス/フィールド、マークアップ言語のタグ/キー。
統合:
- 表示は同期です。つまり、ツリーには、コードが変更された直後にコードのステータスが表示されます(カスタム遅延付き)。
- 選択したツリーノードは、コード内のキャリッジの位置と同期します。
- ツリーノードは、ブロックの選択、キャリッジの移動、およびその他の操作に使用されます。
さらに、 Cuda APIを使用すると、ツリーを含む新しいパネルを作成して入力できます。 Project Manager
プラグインはまさにそれを行います。
設定とプラグインのあるフォルダー
Sublimeのマニュアルに深く没頭していないユーザーにとっては、設定/パッケージ/プラグインをフォルダーに配置する状況は混乱するように見えます。 新たにインストールされたエディター内の最初のステップは驚異的です:メニューコマンドPreferences -- Settings
2つのファイルを開きます。エディターのタイトルの1つ(デフォルト設定)は(Winで)
Sublime Text 3/Packages/Default/Preferences.sublime-settings
しかし、ディスクにはそのようなファイルやフォルダはありません。 一般的に、このようなトリックのロジックは推測されます。 デフォルト設定はエディターコードに配線する必要があり、それらはファイルに複製されるかどうかにかかわらず、これは開発者の裁量によるものです。 崇高は、ファイルにあるふりをします。
Cudaでは、デフォルト設定も保護されていますが、アセンブリには実際のファイルがあります
settings_default\default.json
複製され、コメントが付けられます。 このようなファイルの存在は、ユーザーだけでなくプラグインにとっても便利です。 たとえば、設定エディターは、このファイルからオプション自体のリスト、オプションへのコメント、およびツリー全体にオプションを配布するためのマークアップを抽出します。
Sublimeのパッケージでも同様の問題が発生します-パッケージでそれらを探しても見つかりません。
CudaにはSublimeのような強力な追加パッケージのベースはありませんが、 Cudaの配置ロジックは透過的です。 たとえば、プラグインの場合、すべてが表示される1つのpy
フォルダーがあります-標準とプリインストールの両方です。 data/themes
はdata/themes
フォルダー、 data/snippets
はdata/lexlib
data/snippets
、 data/lexlib
はdata/lexlib
があります。
パッケージ管理
Package Control
プラグインの奇妙な状況。 一方、 Sublimeはこのプラグインなしですぐに使用できます。 一方で、それなしではほとんど何も深刻なことはできません-追加なしでは、エディターは非常に乏しいです。 [ Tools--Packages
]ではなく、[ Preferences
]メニューにプラグインを配置しても、その特別なステータスが示されます。 どうやら、いくつかの「著作権」により、このプラグインをSublimeアセンブリに含めることができません。
Cudaには 、 Addons Manager
を含むいくつかのプラグイン(現在10)がディストリビューションに含まれています。
フローティングパネル
Sublimeにはモノリシックウィンドウレイアウトがあります。つまり、コンソールグループとタブグループは一緒に配置されています。 複数のインスタンスを実行できますが、各インスタンスには常にタブがあり、場合によってはコンソールがあります。
Cudaには、コンソールを別のウィンドウに表示するための設定とコマンドがあります。 これにより、メインテキストの高さに影響を与えずに簡単にストレッチしたり、たとえば2番目のモニターに配置したりできます。 さらに、メインテキストの幅を制限しないように、ツリーでパネルを分離できます。
ちなみに、 Atom (またはVS Code )ユーザーはフローティングパネルを使用したいと考えていますが、開発者はElectronの制限を理由に拒否しました。 そのため、これはSublimeが直接の競合他社より優れている可能性があります。
設定プラグイン
Sublimeには 、100 を超えるカーネル設定(バージョン3.1.1の107)と、変更された値に対応するための6つの追加の重複レベルがあります。
(1) Packages/Default/Preferences (<platform>).sublime-settings
(2) Packages/User/Preferences.sublime-settings
(3) <Project Settings>
(4) Packages/<syntax>/<syntax>.sublime-settings
(5) Packages/User/<syntax>.sublime-settings
(6) <Buffer Specific Settings>
700の値のわずかな部分(7レベルで100のキー)の純粋な手動追跡が問題になる状況を想像するのは簡単です。
Cudaには、ほぼ300のカーネル設定があり、それらをオーバーラップさせるための3つの追加レベルがあります。
(1) settings/user.json
(2) settings/lexer <syntax>.json
(3) <File Settings>
問題は同じです-多すぎる値(最大300 * 4)を考慮する必要があります。 ユーザーを支援するために、テーブル内のすべてのレベルのすべての設定を表示するプラグインがあり、検索と編集を簡素化します。
Section
列に注意してください-設定はツリーノードに割り当てられます。 これにより、追加のソートとフィルターが提供されます。 このツリーを構築するためのマークアップは、 settings_default\default.json
ファイルの設定コメントに含まれています。 たとえば、コメント
// [UI/Listbox]`
それに続くオプションをUI/Listbox
ノードに割り当てます。 木全体も見ることができます
Sublimeでは、同様のダイアログが可能です:
- 名前と7レベルのオーバーラップは、表の8列にすぎません。
- フォームとコントロールは、Tkまたはより高度なPython GUIライブラリから取得できます。
- オプションを変更すると、ファイルが変更され、保存時にリロードされる可能性があります。
ささいなこと
軽微な苦情がいくつかありますが、もちろんここでは適切な場所ではなく、 Sublime技術サポートフォーラムにあります。 完全を期してください。
-
PgDn
/PgUp
は、コマンドパレットなどのリストダイアログでは機能しません。 - 多くの場合、矢印や分数などのトリッキーな文字を挿入する必要があります。 すべてのUnicode文字を表示/選択するのに十分なツールがありません。 Cudaでは、そのようなツールは
Char map
ダイアログの形式です。
- 個々のカラーラベルを設定する方法はありません。 多くのファイルが開いているとき、それらのいくつかのラベルを色付けしたいという要望がしばしばあります。 Cudaでは、
Set tab color...
コマンドはショートカットの上のローカルメニューにあります。 この方法で構成された色は、セッションに保存されます。
おわりに
ヒントを出すのは簡単です!
しかし、私の意見では、上記の考慮事項にはメリットがないわけではありません。 Sublime Textの次のバージョンで何か便利なものがあれば、 それで問題ありません。 ちなみに、誰かがアイデアを翻訳し、Skinner(Jon Skinner)に伝えるかもしれません。