私はバッファから行をコピーするためにelispを使いたいと思います。たとえば、行100〜200のテキストを別のバッファにコピーします。elisp - バッファから行を効果的にコピーする方法
地域(goto-line)を選択してコピーする必要がありますか?キーボードと同じように?いくつかの投稿は、elispコードでgoto-lineを使用しないようにしています。私はそれを行うには効果的な方法がわからない。
私はバッファから行をコピーするためにelispを使いたいと思います。たとえば、行100〜200のテキストを別のバッファにコピーします。elisp - バッファから行を効果的にコピーする方法
地域(goto-line)を選択してコピーする必要がありますか?キーボードと同じように?いくつかの投稿は、elispコードでgoto-lineを使用しないようにしています。私はそれを行うには効果的な方法がわからない。
ここでは、行番号の代わりに、ポイントで動作することを除いてcopy-to-buffer
に似て機能copy-lines-from-buffer
だ、とcopy-to-buffer
とは異なり、それがターゲットバッファの現在の内容を消去しません:
(defun copy-lines-from-buffer (buffer start-line end-line)
"Copy the text from START-LINE to END-LINE from BUFFER.
Insert it into the current buffer."
(interactive "*bSource buffer: \nnStart line: \nnEnd line: ")
(let ((f #'(lambda (n) (goto-char (point-min))
(forward-line n)
(point))))
(apply 'insert-buffer-substring buffer
(with-current-buffer buffer
(list (funcall f start-line) (funcall f end-line))))))
copy-lines-from-buffer
関数はどちらか取りますバッファまたはバッファ名を第1引数、開始行番号を第2引数、終了行番号を第3引数とする。現在のバッファのn
行の先頭にポイントを返すローカルヘルパー関数f
を作成し、現在のバッファをbuffer
に設定してf
を2回呼び出して、目的のバッファ内容の開始点と終了点からなるリストを作成します。次にapply
を使用して、をbuffer
で呼び出し、バッファの内容の開始点と終了点を引数として呼び出します。
内容を挿入するバッファのポイントからcopy-lines-from-buffer
を呼び出します。開始行の内容はコピーされた内容に含まれますが、終了行の内容は含まれません。
偉大な、それは私が欲しいものです! – beetlej