
テキストエディタは、メモ帳などのユーザーがプレーンテキストを編集できる対話型ソフトウェアです。[ 1 ] [ 2 ] [ 3 ]
他のソフトウェアと同様に、テキストエディタもシステムにインストールできますが、テキストファイルの編集はどのシステムにとっても比較的基本的なニーズであり、またシンプルなテキストエディタは比較的低コストで提供できるため、多くの場合、比較的シンプルなテキストエディタがオペレーティングシステム(OS)のデフォルトインストールに含まれています。
ソースコードはテキストなので、どのテキストエディタでもコードを編集できますが、ソースコードエディタはコード編集に特化した機能を備えています。ソフトウェア開発ツールとの統合機能やデバッグ環境を提供するものもあります。[ 4 ]
プレーンテキスト(テキストエディタで作成・編集されるテキスト)とリッチテキスト(ワープロソフトやデスクトップパブリッシングソフトなどで作成されるテキスト)には、重要な違いがある。
プレーンテキストは文字表現のみで構成されます。各文字は、ASCII、ISO/IEC 2022、Shift JIS、UTF-8、UTF-16などの特定の文字エンコーディング規則に従って、1、2、または4バイトの固定長シーケンス、または1~4バイトの可変長シーケンスで表現されます。これらの規則は、多くの印刷可能な文字だけでなく、スペース、改行、改ページなど、テキストの流れを制御する非印刷文字も定義しています。プレーンテキストには、使用されている文字エンコーディング規則を含め、テキスト自体に関するその他の情報は含まれていません。プレーンテキストはテキストファイルに保存されますが、テキストファイルにはプレーンテキストのみが格納されるわけではありません。コンピュータの初期の頃から、プレーンテキストは(かつては必要性から、現在は慣習として)一般的に等幅フォントを使用して表示され、水平方向の配置や列形式の書式設定は、空白文字を使用して行われることがありました。
一方、リッチテキストには、メタデータ、文字書式設定データ(書体、サイズ、太さ、スタイルなど)、段落書式設定データ(インデント、配置、文字と単語の分布、行間または段落間のスペースなど)、ページ仕様データ(サイズ、余白、読み方向など)が含まれる場合があります。リッチテキストは非常に複雑になることがあります。リッチテキストは、バイナリ形式(DOCなど)、マークアップ言語に準拠したテキストファイル(RTFやHTMLなど)、または両方のハイブリッド形式(Office Open XMLなど)で保存できます。
テキストエディタは、プレーンテキスト、またはリッチテキストのマークアップやその他のもの(例: SVG )のマークアップなど、プレーンテキストとして解釈できるものを含むテキストファイルを開いたり保存したりすることを目的としています。

テキストエディタが存在する以前は、コンピュータのテキストはキーパンチマシンでカードにパンチされていました。[ 5 ]これらの薄いボール紙のカードの物理的な箱がカードリーダーに挿入されました。このようなカードデッキから作成された磁気テープ、ドラム、ディスクカードイメージファイルには、行区切り文字がまったくない場合が多く、固定長[ a ] 80文字または90文字[ 6 ]のレコードを想定していました。[ 7 ]カードの代替としてパンチテープがありました。これは、レコードの終わりを示すために特殊文字を使用するテレプリンタ(テレタイプなど)で作成できました。 [ 8 ]初期のオペレーティングシステムには、言語プロセッサと統合されているか、独立したユーティリティプログラムとしてバッチテキストエディタが含まれているものがありました。初期の例の1つは、SHAREオペレーティングシステムでSCAT [ 9 ]用のSQUOZEソースファイルを編集する機能でした。
最初の対話型テキストエディタは、テレタイプ端末向けの「ラインエディタ」でした。テレタイプ端末は、照明付きディスプレイを持たず、入力と出力を同じ連続ロール紙に機械的に印刷する、テレプリンター式またはタイプライター式の端末でした。コマンド(多くの場合、1回のキー操作)によって、オペレーターが追跡する必要のある挿入ポイント(「カーソル」と呼ばれる)でファイルの編集が行われました。編集内容は、ファイルのごく一部を印刷するコマンドを入力し、定期的にファイル全体を印刷することで確認されました。一部のラインエディタでは、ファイル内の行番号、検索対象のテキスト文字列(コンテキスト)、そして最終的には正規表現を指定するコマンドによってカーソルを移動できました。ラインエディタは、キーパンチに比べて大きな進歩でした。一部のラインエディタはキーパンチで使用でき、編集コマンドをカードのデッキから取り出して指定されたファイルに適用できました。一般的なラインエディタの中には、「検証」モードをサポートしているものもあり、変更コマンドで変更された行を表示することができました。
1975年頃の構成例としては、Teletype Model 33をコンソールとしてPDP-11に接続し、 Unixバージョン6を使用して、標準のUNIXテキストエディタであるedでテキストを操作するというものがあった。
ビデオ画面を備えたコンピュータ端末が利用可能になると、画面ベースのテキストエディタ(単に「画面エディタ」と呼ばれることもある)フルスクリーンエディタは一般的になった。初期のフルスクリーンエディタの 1 つはO26で、1967 年にCDC 6000 シリーズコンピュータのオペレータ コンソール用に作成された。もう 1 つの初期のフルスクリーンエディタはviである。1970 年代に作成された vi は、UnixおよびLinuxオペレーティングシステムで今でも標準のエディタである[ 10 ]。同じく 1970 年代に作成されたUCSD Pascal Screen Oriented Editor は、インデントされたソース コードと一般的なテキストの両方に最適化されていた[ 11 ] 。最初のフリーでオープンソースのソフトウェアプロジェクト 1 つはEmacs で、これも初期のフルスクリーンまたはリアルタイム エディタであり、多くのシステムに移植された[ 12 ] 。1977年のCommodore PETは、フルスクリーンエディタを搭載した最初の量産型コンピュータだった。フルスクリーンエディタの使いやすさと速度 (行ベースのエディタと比較して) が、初期のビデオ端末の購入を促した。[ 13 ]
テキストエディタの中核となるデータ構造は、編集中のファイルの現在の状態を表す文字列(文字のシーケンス)またはレコードのリストを管理するものです。前者は単一の長い連続した文字配列に格納できますが、テキストの挿入、削除、以前の編集の取り消し/やり直しをより迅速に行えるテキストエディタへの要望から、より複雑なシーケンスデータ構造が開発されました。[ 14 ] 一般的なテキストエディタは、シーケンスデータ構造として、ギャップバッファ、リンクされた行のリスト( PaperClipなど)、ピーステーブル、またはロープを使用します。


テキストエディタには、小さくてシンプルなものもあれば、幅広くて複雑な機能を提供するものもあります。たとえば、Unixや Unix ライクなオペレーティングシステムにはpicoエディタ (またはその派生版) がありますが、多くはviや Emacs エディタも含まれています。Microsoft WindowsシステムにはシンプルなNotepadが付属していますが、多くの人、特にプログラマーは、より多くの機能を備えた他のエディタを好みます。Apple Macintoshのクラシック Mac OSには、ネイティブのTeachTextがありましたが、1994 年にSimpleTextに置き換えられ、 Mac OS XではTextEditに置き換えられました。TextEdit は、テキストエディタの機能と、ルーラー、余白、複数のフォントの選択など、ワードプロセッサによく見られる機能を組み合わせています。これらの機能は同時に使用できるわけではなく、ユーザーコマンドで切り替えるか、プログラムがファイルの種類を自動的に判別して切り替える必要があります。
ほとんどのワードプロセッサはプレーンテキスト形式でファイルを読み書きできるため、テキストエディタから保存したファイルを開くことができます。ただし、これらのファイルをワードプロセッサから保存するには、ファイルがプレーンテキスト形式で書き込まれていること、およびテキストエンコーディングやBOM設定によってファイルが本来の用途で使用できなくなることがないようにする必要があります。WordStarなどのWYSIWYGではないワードプロセッサは、テキストエディタとしてより簡単に利用でき、実際、1980 年代にはそのようによく使用されていました。これらのワードプロセッサのデフォルトのファイル形式は、多くの場合マークアップ言語に似ており、基本形式はプレーンテキストで、非印刷制御文字またはエスケープシーケンスを使用して視覚的な書式設定が実現されます。Microsoft Wordなどの後期のワードプロセッサは、ファイルをバイナリ形式で保存するため、プレーンテキストファイルの編集にはほとんど使用されません。[ 15 ]
テキストエディタの中には、ログファイルやデータベース全体を1つのファイルに格納するなど、非常に大きなファイルを編集できるものもあります。シンプルなテキストエディタは、ファイルをコンピュータのメインメモリに読み込むだけの場合があります。ファイルが大きい場合、この処理は遅くなり、ファイル全体がメモリに収まらないこともあります。テキストエディタによっては、読み込みが完了するまでユーザーが編集を開始できないものもあります。また、汎用的なエディタでは編集パフォーマンスが低下することが多く、キー入力やナビゲーションコマンドへの応答に数秒、場合によっては数分かかることもあります。汎用的なエディタは、大きなファイルでも表示可能な部分だけをメモリに格納するなど、編集パフォーマンスを向上させるための最適化機能を備えています。
エディタの中にはプログラマブルなものもあり、例えば、特定の用途に合わせてカスタマイズできます。プログラマブルなエディタを使えば、繰り返し作業を自動化したり、新しい機能を追加したり、エディタのフレームワーク内で新しいアプリケーションを実装したりすることが容易になります。カスタマイズの一般的な動機の一つは、ユーザーがより慣れ親しんだ別のテキストエディタのコマンドをテキストエディタで使用したり、ユーザーが頼りにしている不足している機能を複製したりすることです。ソフトウェア開発者は、作業しているプログラミング言語や開発環境に合わせてカスタマイズしたエディタをよく使用します。一部のテキストエディタのプログラマビリティは、プログラムのコア編集機能の強化に限られていますが、Emacs はテキストファイルの編集をはるかに超えて拡張でき、 Web ブラウジング、メールの閲覧、オンラインチャット、ファイルの管理、ゲームプレイなどに使用でき、テキスト ユーザー インターフェイスを備えた Lisp 実行環境としてよく考えられています。Emacs は、 Unix 文化の伝統的なエディタ戦争におけるライバルであるViをエミュレートするようにプログラムすることもできます。[ 16 ] [ 17 ]
重要なプログラマブル エディター群は、スクリプト言語としてREXX [ b ]を使用します。これらの「正統派エディター」には、コマンドやマクロを入力できる「コマンドライン」と、行コマンド[ c ]やマクロを入力できるテキスト行があります。このようなエディターのほとんどは、ISPF/PDF EDITまたはIBM のVM/SPからz/VMまでの主力エディターであるXEDITの派生版です。これらには、 THE、KEDIT、X2、Uni-edit、SEDITなどがあります。
特定の用途向けに作成またはカスタマイズされたテキストエディタは、ユーザーが編集している内容を判断し、プログラミング用語の補完や関連ドキュメントを含むツールチップの表示などによってユーザーを支援します。ソフトウェア開発者向けのテキストエディタの多くは、プログラムの読み書きを容易にするために、ソースコードの構文ハイライトと自動インデント機能を備えています。プログラミングエディタでは、インクルードファイル、関数、または変数の名前を選択して、その定義にジャンプできる機能がよくあります。また、カーソル位置を保存したり、要求された定義をポップアップウィンドウや一時バッファに表示したりすることで、コードの元のセクションに簡単に戻れるようにする機能を持つものもあります。この機能を独自に実装しているエディタもありますが、多くの場合、 ctagsのような補助ユーティリティを使用して定義を検索します。
一部のエディタには、例えば以下のような特別な機能や追加機能が含まれています。
すべてのオペレーティングシステムにはデフォルトの基本的なテキストエディタが付属していますが、ほとんどの人はより多くの機能を利用するために独自の拡張テキストエディタをインストールします。
一部の Multics ユーザーはこれらの端末を購入し、それらを「ガラス製テレタイプ」として、または「ローカル編集」を介して使用しました。
テキストエディタで.docファイルを開くと、ファイルのほとんどが書式設定コードであることが分かります。しかし、テキストエディタは書式設定コードを追加しないため、コードのコンパイルが容易になります。