Emacs Lisp で現在の領域の内容にアクセスするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/605846

  •  03-07-2019
  •  | 
  •  

質問

現在の領域の内容に関数内の文字列としてアクセスしたいと考えています。例えば:

(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で追加されました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top