関数内の文字列として現在のリージョンの内容にアクセスしたい。例えば:
(concat "stringa" (get-region-as-string) "stringb")
ありがとう
エド
starblue が言う(buffer-substring (mark) (point))
ように、マークが設定されている場合、領域の内容を返します。文字列プロパティが必要ない場合は、'buffer-substring-no-properties
バリアントを使用できます。
ただし、対話型コマンドを作成している場合は、フォームを使用してリージョンのエンドポイントを取得するより良い方法があります(interactive "r")
。からの例を次に示しsimple.el
ます。
(defun count-lines-region (開始終了) 「領域内の行数と文字数を出力します。」 (インタラクティブな "r") (メッセージ「リージョンには %d 行、%d 文字があります」 (count-lines start end) (- end start)))
Lisp コードから呼び出された場合、(interactive ...)
フォームは無視されるため、この関数を使用して、適切な引数を渡すことにより、リージョンだけでなく、バッファーの任意の部分の行をカウントできます: たとえば、(count-lines-region (point-min) (point-max))
狭められた部分の行をカウントするバッファの。ただし、対話的に呼び出されると、(interactive ...)
フォームが評価され、"r"
コードはポイントとマークを 2 つの数値引数として、小さい方から順に指定します。
Emacs Lisp マニュアルのセクション21.2.1 Using Interactiveおよび21.2.2 Code Characters for interactiveを参照してください。
buffer-substring
一緒に、region-beginning
それregion-end
を行うことができます。
Lisp コードのリージョンの内容を kill-ring、X クリップボード、またはレジスタなどのユーザーがアクセス可能なデータ構造にコピーしたい場合、Emacs Lisp のマニュアルfilter-buffer-substring
では単純に の代わりにを使用することを推奨していますbuffer-substring
。コピーする前に、関数は というリスト変数からフィルター関数を適用しますfilter-buffer-substring-functions
。この機能はバージョン 22.3 で追加されました。