文字とは、テキストの1文字を表すLispオブジェクトのことです。Emacs Lispにおいて、文字は単なる整数であり、その整数が文字であるかどうかは、どのように使用されるかによってのみ決まります。Emacsにおける文字表現の詳細については、文字コードを参照してください。
文字列とは、固定された文字の並びのことです。これは配列と呼ばれるシーケンスの一種であり、長さが固定されており、一度作成されると変更できないことを意味します(シーケンス、配列、ベクトルを参照)。C言語とは異なり、Emacs Lispの文字列は特定の文字コードで終端されることはありません。
文字列は配列であり、したがってシーケンスでもあるため、シーケンス、配列、ベクトルに記載されている一般的な配列およびシーケンス関数を用いて操作できます。例えば、関数
aref を使用して文字列内の個々の文字にアクセスできます(配列を操作する関数を参照してください)。
Emacsの文字列(およびバッファ)における非ASCII文字には、ユニバイトとマルチバイトという2つのテキスト表現があります。ほとんどのLispプログラミングにおいて、これら2つの表現を意識する必要はありません。詳細はテキスト表現を参照してください。
キーシーケンスは、ユニバイト文字列として表現されることがあります。ユニバイト文字列がキーシーケンスである場合、128から255の範囲の文字列要素は、128から255の範囲の文字コードではなく、メタ文字(大きな整数)を表します。文字列には、hyper、super、またはalt修飾子を持つ文字を格納することはできません。ASCII制御文字は格納できますが、それ以外の制御文字は格納できません。ASCII制御文字において、大文字と小文字は区別されません。キーシーケンスなどのシーケンスにこのような文字を格納したい場合は、文字列ではなくベクトルを使用する必要があります。キーボード入力文字の詳細については、文字型を参照してください。
文字列は正規表現を保持するのに便利です。また、string-match
を使用して文字列に対して正規表現をマッチさせることもできます(正規表現による検索を参照)。関数 match-string(簡易マッチデータへのアクセスを参照)および replace-match(マッチしたテキストの置換を参照)は、正規表現をマッチさせた後に文字列を分解・修正する際に便利です。
バッファと同様に、文字列には含まれる文字のテキストプロパティと、文字そのものの両方を保持できます。テキストプロパティを参照してください。文字列からバッファや他の文字列へテキストをコピーするすべてのLispプリミティブは、コピー対象となる文字のプロパティも併せてコピーします。
文字列を表示したり、バッファにコピーしたりする関数については、Textを参照してください。文字および文字列の構文については、Character TypeおよびString
Typeを参照してください。テキスト表現間の変換や、文字コードのエンコードおよびデコードを行う関数については、Non-ASCII
Charactersを参照してください。また、画面上の文字列の幅を計算する際にlengthを使用してはならず、代わりにstring-widthを使用してください(Size of Displayed Textを参照)。