Emacs Lisp で現在の領域の内容にアクセスするにはどうすればよいですか?
質問
現在の領域の内容に関数内の文字列としてアクセスしたいと考えています。例えば:
(concat "stringa" (get-region-as-string) "stringb")
ありがとう
エド
解決
buffer-substring
一緒に region-beginning
そして region-end
それはできます。
他のヒント
starblueが言うように、(buffer-substring(mark)(point))
は、マークが設定されている場合、リージョンのコンテンツを返します。 文字列プロパティが必要ない場合は、 'buffer-substring-no-properties
バリアントを使用できます。
ただし、インタラクティブコマンドを書いている場合は、(interactive" r")
の形式を使用して、リージョンのエンドポイントを取得するより良い方法があります。 simple.el
の例を次に示します。
(defun count-lines-region (start end) "Print number of lines and characters in the region." (interactive "r") (message "Region has %d lines, %d characters" (count-lines start end) (- end start)))
Lispコードから呼び出された場合、(interactive ...)
形式は無視されるため、この関数を使用してバッファーの任意の部分の行をカウントできます、適切な引数を渡すことにより、リージョンだけでなく、たとえば、(count-lines-region(point-min)(point-max))
を使用して、バッファの狭い部分の行をカウントします。ただし、インタラクティブに呼び出されると、(interactive ...)
フォームが評価され、" r"
コードはポイントとマークを2つの数値引数として提供します。最初。
Emacs Lispマニュアルのセクション 21.2.1 Interactiveの使用および 21.2.2インタラクティブ用のコード文字。
キルリング、Xクリップボード、レジスタなどのユーザーがアクセス可能なデータ構造にLispコードのリージョンコンテンツをコピーする場合、Emacs Lispマニュアルでは filter-buffer-substring
は単に< code> buffer-substring 。コピーする前に、関数は filter-buffer-substring-functions
。関数はバージョン22.3で追加されました。