クリップボードからコピーしたテキストの列をヤンクする


7

複数の列をコピーして貼り付けたいことがよくあります。たとえば、1つの列を貼り付けます

line one
line two
line three

次に、その後ろにある別の列をヤンクできるようにしたいと思います。私のキルバッファが次のものであると仮定します:

added to one
added to two
added to three

次を取得するには、どのコマンドを呼び出す必要がありますか。

line one added to one
line two added to two
line three added to three

更新

Emacsの四角形の機能を使用するとかなり役立ちますが、それでも最適ではありません。たとえば、グラフィカルモードでEmacsを使用していて、外部プログラムからヤンクしている場合、つまりOSからコピーアンドペースト機能を使用している場合、キルバッファには長方形のメタ情報がないため、長方形のヤンクは機能しません。もう1つの問題は、さまざまな内部幅を持つ列がある場合です。

short line                        *
a much larger line which goes on
short line again

長方形のヤンクをしたい場合は、マークされたスポット(*)にポインターを置く必要があります。これは3行で簡単ですが、最初の列の最も外側の端にポインターを配置していることを確認するのは非常に面倒な場合があります。


よくわかりませんが、長方形で作業したいと思います。
ダン

これに対する簡単な答えがあるかどうかはわかりません。テキストがクリップボードにコピーされると、列に関する情報は失われます。この「列」情報を保持するには、おそらくEmacs外で何かをする必要があると思います。
2015年

elispに習熟しているだけの場合、これはほんの数行であると期待していますが、実際にはこれが既存の関数であると期待しています
hbogert

これは非常に簡単なマクロで行うことができます。最初の列のテキストの下に2番目の列のテキストをヤンクします。次に、列2のデータの最初の値を列1のデータの最初の行の終わりに移動し、次に列2のデータの次の値を下に移動して、すべてが揃うまで実行するマクロを記録します。
Jordon Biondo 2015年

回答:


5

以下は、現在の行から開始して、後続の各行の終わりに現在のキルの各行をヤンクするために使用できる1回限りのコマンドです。

(defun yank-append-lines (&optional without-space)
  "Yank each line of the current kill at the end of each subsequent line.

A space will be added between each line unless WITHOUT-SPACE which can
be passed in via a prefix arg."
  (interactive "P")
  (save-excursion
    (let ((lines (split-string (current-kill 0) "\n")))
      (dolist (line lines)
        (goto-char (line-end-position))
        (unless without-space
          (just-one-space))
        (insert line)
        (unless (zerop (forward-line))
          (insert "\n"))))))

実装はかなり簡単です。を取り、current-kill行ごとに分割します。次に、分割線ごとに、分割線の最後に移動し、スペースを挿入し、線を挿入して、1行前に移動します。

これは、行をバッファー内のある場所からバッファーの別の部分の行の終わりに移動する繰り返し可能なマクロでも実行できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.