Emacsで行全体を複製するにはどうすればよいですか?


155

私はVIMについても同じ質問を見ましたが、私自身がEmacsの方法を知りたいと思っていました。ReSharperでは、このアクションにCTRL-Dを使用します。Emacsでこれを実行するコマンドの最小数はいくつですか?


2
もちろん、それはemacsなのでTMTOWTDI-22があります!(そして数えます)c2.com/cgi/wiki?ThereIsMoreThanOneWayToDoIt
Tom

回答:


150

私が使う

C-a C-SPACE C-n M-w C-y

に分解する

  • C-a:カーソルを行頭に移動
  • C-SPACE:選択を開始( "セットマーク")
  • C-n:カーソルを次の行に移動
  • M-w:リージョンをコピー
  • C-y:貼り付け( "ヤンク")

前述の

C-a C-k C-k C-y C-y

同じことになる(TMTOWTDI)

  • C-a:カーソルを行頭に移動
  • C-k:ラインをカット( "キル")
  • C-k:改行をカット
  • C-y:貼り付け( "ヤンク")(1つ前の場所に戻ります)
  • C-y:もう一度貼り付けます(行のコピーが2つあります)。

これらはどちらもC-dエディターと比べると恥ずかしいほど冗長ですが、Emacsでは常にカスタマイズが行われます。デフォルトでC-dバインドさdelete-charれているので、どうC-c C-dですか?以下をあなたのに追加してください.emacs

(global-set-key "\C-c\C-d" "\C-a\C- \C-n\M-w\C-y")

(@Nathanのelispバージョンは、キーバインディングが変更されても壊れないため、おそらく望ましいです。)

注意:一部のEmacsモードは別のことをC-c C-dするために取り戻すかもしれません。


5
こんにちは!'(setq kill-whole-line t)'がある場合、 'Ck'(ソリューション2)が1つだけ必要になることに注意してください。これは、行の内容とともに改行を既にkillしているためです。私が好む「C-k」の使用法。乾杯、ダニエル
danielpoe 2009

179
これは本当に恥ずかしいです。
tofutim

18
どうC-S-backspace C-y C-yですか?
ericzma 2013年

1
Mwとは そのためにどのキーを使用しますか?
Bala

4
@Bala "M"は "Meta"です(通常、EscまたはAlt、キーボードのレイアウトによって異なります)。「Mw」は「Meta」と「w」を同時に示します(私のキーボードでは「Alt-w」)。
Chris Conway、

96

前の回答に加えて、行を複製する独自の関数を定義することもできます。たとえば、以下を.emacsファイルに入れると、Cdは現在の行を複製します。

(defun duplicate-line()
  (interactive)
  (move-beginning-of-line 1)
  (kill-line)
  (yank)
  (open-line 1)
  (next-line 1)
  (yank)
)
(global-set-key (kbd "C-d") 'duplicate-line)

これで次のエラーが発生します:Symbol's function definition is void: move-beginning-of-line
Rohaq

5
この問題は、「Del」キーも行の複製にバインドされていることです...
David Gomes

それで、Delこの関数からバインドを解除する方法のアイデアはありますか?
Alexander Shcheblikin、2014年

OK、Del新しいを維持しながら通常に戻す解決策が見つかりましたC-d:定義の(global-set-key (kbd "<delete>") 'delete-char)後に追加する必要がありC-dます。
Alexander Shcheblikin、2014年

空の行でそれを試すと、1行だけではなく2行が挿入されます。理由はわかりません。簡単な修正はありますか?
Zelphir Kaltstahl、2015年

68

カーソルを行に置き、最初でない場合はCTRL-を実行しA、次に:

CTRL-K

CTRL-K

CTRL-Y

CTRL-Y


2年目は必要ないと思います。
バスティアンレオナール

4
それなしでは複製にはなりません
epatel 2009年

17
Ckの代わりにCS-Backspace(kill-whole-line)を使用します。カーソル位置を変更したり、改行を削除したりする必要はありません。
Nietzche-jou

これはうまく機能しますが、これを行う簡単な方法はありませんか?
ストライカー2017

52

元に戻す機能でうまく機能し、カーソル位置を混乱させない、行を複製するための関数の私のバージョン。これは、1997年11月にgnu.emacs.sourcesで議論された結果です。

(defun duplicate-line (arg)
  "Duplicate current line, leaving point in lower line."
  (interactive "*p")

  ;; save the point for undo
  (setq buffer-undo-list (cons (point) buffer-undo-list))

  ;; local variables for start and end of line
  (let ((bol (save-excursion (beginning-of-line) (point)))
        eol)
    (save-excursion

      ;; don't use forward-line for this, because you would have
      ;; to check whether you are at the end of the buffer
      (end-of-line)
      (setq eol (point))

      ;; store the line and disable the recording of undo information
      (let ((line (buffer-substring bol eol))
            (buffer-undo-list t)
            (count arg))
        ;; insert the line arg times
        (while (> count 0)
          (newline)         ;; because there is no newline in 'line'
          (insert line)
          (setq count (1- count)))
        )

      ;; create the undo information
      (setq buffer-undo-list (cons (cons eol (point)) buffer-undo-list)))
    ) ; end-of-let

  ;; put the point in the lowest line and return
  (next-line arg))

次に、CTRL-Dを定義してこの関数を呼び出すことができます。

(global-set-key (kbd "C-d") 'duplicate-line)

優れた!元に戻す機能とカーソル位置機能により、これが最適です。ありがとう!
ptrn

また、リンクには地域用のコードもあります!
pcarvalho 14年

とても良い解決策です。THX
プランカルキュール

よく働く。解決策をありがとう。
ストライカー2017

@pescheはcrux-duplicate-current-line-or-region、あなたの関数で行の複製と最後の操作も取り消すので、私にとってはうまくいきます。
rofrol

47

kill-lineC-k)の代わりに次のコマンドをC-a C-k C-k C-y C-y 使用しますkill-whole-line

C-S-Backspace
C-y
C-y

利点C-kは、ポイントが行のどこにあるかとは関係なく(行のC-k先頭にある必要があるのとは異なり)、また改行を削除する(ここでも何かC-kしない)ことです。


2
賞賛@RayVega!私はこの解決策を試してみましたが、それは(私のGNU Emacs 23.3.1ではとにかく)チャンピオンのように機能します。このソリューションは一部の人にとってうまくいかないのですか?これはあなたの(自分の)質問に対する最良の答えです。
JS。

1
この答えを正しいものとして受け入れる必要があります。それはあなたが要求したとおりに、そして「コマンドの最小数」で実行します。
Davor Cubranic 2016

24

これを行うためのもう1つの関数を次に示します。私のバージョンはキルリングに触れず、カーソルは元の行にあった新しい行に移動します。リージョンがアクティブ(一時マークモード)の場合はリージョンを複製し、それ以外の場合はデフォルトでラインを複製します。また、プレフィックス引数が指定されている場合は複数のコピーを作成し、負のプレフィックス引数が指定されている場合は元の行をコメント化します(これは、古いバージョンを保持しながらコマンド/ステートメントの異なるバージョンをテストするのに役立ちます)。

(defun duplicate-line-or-region (&optional n)
  "Duplicate current line, or region if active.
With argument N, make N copies.
With negative N, comment out original line and use the absolute value."
  (interactive "*p")
  (let ((use-region (use-region-p)))
    (save-excursion
      (let ((text (if use-region        ;Get region if active, otherwise line
                      (buffer-substring (region-beginning) (region-end))
                    (prog1 (thing-at-point 'line)
                      (end-of-line)
                      (if (< 0 (forward-line 1)) ;Go to beginning of next line, or make a new one
                          (newline))))))
        (dotimes (i (abs (or n 1)))     ;Insert N times, or once if not specified
          (insert text))))
    (if use-region nil                  ;Only if we're working with a line (not a region)
      (let ((pos (- (point) (line-beginning-position)))) ;Save column
        (if (> 0 n)                             ;Comment out original with negative arg
            (comment-region (line-beginning-position) (line-end-position)))
        (forward-line 1)
        (forward-char pos)))))

私はそれに縛られていC-c dます:

(global-set-key [?\C-c ?d] 'duplicate-line-or-region)

C-c単一の(変更されていない)文字が後に続くのはユーザーバインディング用に予約されているため、これをモードまたは何かによって再割り当てしないでください。


これまでのベストソリューション
Leo Ufimtsev

1
これを.emacsファイルに入れましたが、使用しようとするC-c dとエラーが発生しますcommand-execute: Wrong type argument: commandp, duplicate-line-or-region。何が起こっているのか?私は、Windows上のEmacs 25.1.1を使用しています
JUNIUS

本当に素晴らしい解決策です。リージョン機能と、負の引数によるコメント機能に感謝します。提案されたキーバインディングも同様です。
Alex Trueman 2017

18

Nathanが.emacsファイルに追加する方法ですが、次のように置き換えることで少し単純化できます。

  (open-line 1)
  (next-line 1)

  (newline)

降伏

(defun duplicate-line()
  (interactive)
  (move-beginning-of-line 1)
  (kill-line)
  (yank)
  (newline)
  (yank)
)
(global-set-key (kbd "C-d") 'duplicate-line)

これはいいね。ありがとう!
テジャスブバネ

7

melpaからduplicate-thingをインストールします。

mx package-install RET duplicate-thing

このキーバインディングをinitファイルに追加します

(global-set-key(kbd "Mc") 'duplicate-thing)


この日付までには存在しないようです。
MarkSkayff

5

行の重複がどこでどのように機能するかはよく覚えていませんが、以前のSciTEユーザーとして、SciTE-wayの1つの点が気に入りました。カーソルの位置には影響しません!したがって、上記のすべてのレシピは十分ではありませんでした。これが私のヒッピーバージョンです。

(defun duplicate-line ()
    "Clone line at cursor, leaving the latter intact."
    (interactive)
    (save-excursion
        (let ((kill-read-only-ok t) deactivate-mark)
            (toggle-read-only 1)
            (kill-whole-line)
            (toggle-read-only 0)
            (yank))))

処理中に実際に削除されるものはなく、マークと現在の選択はそのまま残ります。

ところで、この素敵なクリーンな全行の物(CSバックスペース)があるのにカーソルをぐるぐる回るのが好きなのはなぜですか。



4

あなたがあなたの.emacsに入れたいかもしれないものは

(setq kill-whole-line t)

基本的には、kill-lineを呼び出すと(つまり、Ckを介して)、行全体と改行を強制終了します。その後、追加のコードなしで、Ca Ck Cy Cyを実行して行を複製できます。に分解

C-a go to beginning of line
C-k kill-line (i.e. cut the line into clipboard)
C-y yank (i.e. paste); the first time you get the killed line back; 
    second time gives the duplicated line.

しかし、これを頻繁に使用する場合は、専用のキーバインディングの方が良いかもしれませんが、Ca Ck Cy Cyを使用するだけの利点は、現在の行のすぐ下ではなく、他の場所に行を複製できることです。


4

私はcopy-from-above-commandキーにバインドし、それを使用しています。XEmacsで提供されていますが、GNU Emacsについては知りません。

`copy-from-above-command 'はインタラクティブにコンパイルされたLisp関数です
-" /usr/share/xemacs/21.4.15/lisp/misc.elc "からロードされます(copy-from-above-command&optional ARG)

ドキュメント:ポイントのすぐ上から、前の空白行以外の文字をコピーします。ARG文字をコピーしますが、その行の終わりを超えません。引数を指定しない場合は、行全体をコピーします。コピーされた文字は、ポイントの前のバッファに挿入されます。


バージョン23に関しては、これも標準のGNU Emacsディストリビューションの一部です。
viam0Zah 2010

私のバージョンにはないようです。何かをロードする必要がありますか?私のバージョンはGNU Emacs 23.2.1 (amd64-portbld-freebsd8.1) of 2010-11-14 on [host clipped]です。
qmega

2
@qmega実行する必要があります( 'miscが必要です)。
ドミトリー

4

呼ばれるパッケージがありAvyでは、コマンドAvyではコピーラインを持っているが。このコマンドを使用すると、ウィンドウのすべての行が文字の組み合わせになります。次に、combinationと入力するだけで、その行が表示されます。これは地域でも機能します。次に、2つの組み合わせを入力する必要があります。

ここでインターフェースを見ることができます:

ここに画像の説明を入力してください



3

デフォルトではこれは恐ろしいです。ただし、Emacsを拡張してSlickEditやTextMateのように機能させることができます。つまり、テキストが選択されていないときに現在の行をコピー/切り取ります。

(transient-mark-mode t)
(defadvice kill-ring-save (before slick-copy activate compile)
  "When called interactively with no active region, copy a single line instead."
  (interactive
   (if mark-active (list (region-beginning) (region-end))
     (message "Copied line")
     (list (line-beginning-position)
           (line-beginning-position 2)))))
(defadvice kill-region (before slick-cut activate compile)
  "When called interactively with no active region, kill a single line instead."
  (interactive
   (if mark-active (list (region-beginning) (region-end))
     (list (line-beginning-position)
           (line-beginning-position 2)))))

上記をに配置し.emacsます。その後、行をコピーしますM-w。行を削除するには、C-w。、行を複製しますC-a M-w C-y C-y C-y ...


3

'自分のバージョンのduplicate-lineを作成しました。これは、殺害リングを台無しにしたくないためです。

  (defun jr-duplicate-line ()
    "EASY"
    (interactive)
    (save-excursion
      (let ((line-text (buffer-substring-no-properties
                        (line-beginning-position)
                        (line-end-position))))
        (move-end-of-line 1)
        (newline)
        (insert line-text))))
  (global-set-key "\C-cd" 'jr-duplicate-line)

3

私は2つのことを除いて、FragGodのバージョンが好きでした:(1)バッファーがで既に読み取り専用であるかどうかをチェックしません(interactive "*")、そして(2)バッファーの最後の行が空の場合、それは失敗します(あなたとして)その場合、行を強制終了することはできません)、バッファーを読み取り専用のままにします。

それを解決するために、次の変更を加えました。

(defun duplicate-line ()
  "Clone line at cursor, leaving the latter intact."
  (interactive "*")
  (save-excursion
    ;; The last line of the buffer cannot be killed
    ;; if it is empty. Instead, simply add a new line.
    (if (and (eobp) (bolp))
        (newline)
      ;; Otherwise kill the whole line, and yank it back.
      (let ((kill-read-only-ok t)
            deactivate-mark)
        (toggle-read-only 1)
        (kill-whole-line)
        (toggle-read-only 0)
        (yank)))))

3

最近のemacsでは、Mwを行のどこにでもコピーしてコピーできます。したがって、次のようになります。

M-w C-a RET C-y

本当に?「最近の」Emacsはどれでしょうか?24.4の場合とは異なり、「マークは現在設定されていないため、リージョンはありません」と表示されます。
Davor Cubranic 2016

現在のEmacsは24.5で、M-wにバインドされていeasy-killます。それがあなたがするときにあなたが得るものであることを確認してくださいC-h c M-w
Louis Kottmann '19

Emacs 24.5.1では動作しませんでした。先行する空白行を挿入した後、行の先頭から同じ行の先頭を指すようにのみコピーされました。
Derek Mahar 2017年

3

とにかく、私は非常に複雑なソリューションを見ました...

(defun duplicate-line ()
  "Duplicate current line"
  (interactive)
  (kill-whole-line)
  (yank)
  (yank))
(global-set-key (kbd "C-x M-d") 'duplicate-line)

これはキルリングを混乱させることに注意してください。
Dodgie、

これは、最後の行であり、ファイルが新しい行で終わっていない場合、その行をそれ自体に追加します
Mark

2

@ [ケビン・コナー]:私が知る限り、かなり近いです。検討すべき他の唯一のことkill-whole-lineは、改行をCkに含めることをオンにすることです。


@アレン:削除[]@[Kevin Conner]
jfs

2

ctrl- kctrl- k、(新しい場所への位置)ctrl-y

行頭から始めない場合はctrl- を追加しaます。そして2番目ctrl- k改行文字を取得します。テキストだけが必要な場合は削除できます。


これは、ここで最も簡単な方法でなければなりません。ありがとう!
bartlomiej.n 2018

2

アクティブな領域なしでインタラクティブに呼び出された場合、代わりに1行をコピー(Mw)します。

(defadvice kill-ring-save (before slick-copy activate compile)
  "When called interactively with no active region, COPY a single line instead."
  (interactive
   (if mark-active (list (region-beginning) (region-end))
     (message "Copied line")
     (list (line-beginning-position)
           (line-beginning-position 2)))))

アクティブな領域なしでインタラクティブに呼び出された場合、代わりに1行をKILL(Cw)します。

(defadvice kill-region (before slick-cut activate compile)
  "When called interactively with no active region, KILL a single line instead."
  (interactive
   (if mark-active (list (region-beginning) (region-end))
     (message "Killed line")
     (list (line-beginning-position)
           (line-beginning-position 2)))))

また、関連するメモ:

(defun move-line-up ()
  "Move up the current line."
  (interactive)
  (transpose-lines 1)
  (forward-line -2)
  (indent-according-to-mode))

(defun move-line-down ()
  "Move down the current line."
  (interactive)
  (forward-line 1)
  (transpose-lines 1)
  (forward-line -1)
  (indent-according-to-mode))

(global-set-key [(meta shift up)]  'move-line-up)
(global-set-key [(meta shift down)]  'move-line-down)

1

私は好みに合わせて1つ作成します。

(defun duplicate-line ()
  "Duplicate current line."
  (interactive)
  (let ((text (buffer-substring-no-properties (point-at-bol) (point-at-eol)))
        (cur-col (current-column)))
    (end-of-line) (insert "\n" text)
    (beginning-of-line) (right-char cur-col)))
(global-set-key (kbd "C-c d l") 'duplicate-line)

しかし、現在の行にマルチバイト文字(CJK文字など)が含まれていると、問題が発生することがわかりました。この問題が発生した場合は、代わりにこれを試してください。

(defun duplicate-line ()
  "Duplicate current line."
  (interactive)
  (let* ((text (buffer-substring-no-properties (point-at-bol) (point-at-eol)))
         (cur-col (length (buffer-substring-no-properties (point-at-bol) (point)))))
    (end-of-line) (insert "\n" text)
    (beginning-of-line) (right-char cur-col)))
(global-set-key (kbd "C-c d l") 'duplicate-line)

1

この機能は、ラインまたはリージョンの両方で複製し、ポイントおよび/またはアクティブなリージョンを期待どおりに残すという点で、JetBrainsの実装と一致する必要があります。

インタラクティブフォームのラッパーです。

(defun wrx/duplicate-line-or-region (beg end)
  "Implements functionality of JetBrains' `Command-d' shortcut for `duplicate-line'.
   BEG & END correspond point & mark, smaller first
   `use-region-p' explained: 
   http://emacs.stackexchange.com/questions/12334/elisp-for-applying-command-to-only-the-selected-region#answer-12335"
  (interactive "r")
  (if (use-region-p)
      (wrx/duplicate-region-in-buffer beg end)
    (wrx/duplicate-line-in-buffer)))

これは、

(defun wrx/duplicate-region-in-buffer (beg end)
  "copy and duplicate context of current active region
   |------------------------+----------------------------|
   |        before          |           after            |
   |------------------------+----------------------------|
   | first <MARK>line here  | first line here            |
   | second item<POINT> now | second item<MARK>line here |
   |                        | second item<POINT> now     |
   |------------------------+----------------------------|
   TODO: Acts funky when point < mark"
  (set-mark-command nil)
  (insert (buffer-substring beg end))
  (setq deactivate-mark nil))

またはこれ

(defun wrx/duplicate-line-in-buffer ()
  "Duplicate current line, maintaining column position.
   |--------------------------+--------------------------|
   |          before          |          after           |
   |--------------------------+--------------------------|
   | lorem ipsum<POINT> dolor | lorem ipsum dolor        |
   |                          | lorem ipsum<POINT> dolor |
   |--------------------------+--------------------------|
   TODO: Save history for `Cmd-Z'
   Context: 
   http://stackoverflow.com/questions/88399/how-do-i-duplicate-a-whole-line-in-emacs#answer-551053"
  (setq columns-over (current-column))
  (save-excursion
    (kill-whole-line)
    (yank)
    (yank))
  (let (v)
    (dotimes (n columns-over v)
      (right-char)
      (setq v (cons n v))))
  (next-line))

そして、私はこれをmeta + shift + dにバインドしました

(global-set-key (kbd "M-D") 'wrx/duplicate-line-or-region)

1

他の回答で述べたように、キーストロークをlispコードにバインドすることは、別のキーストロークにバインドするよりも優れています。@mwの回答を使用して、コードは行を複製し、マークを新しい行の終わりに移動します。この変更により、マーク位置は新しい行の同じ列に保持されます。

fun duplicate-line ()
  (interactive)
  (let ((col (current-column)))
    (move-beginning-of-line 1)
    (kill-line)
    (yank)
    (newline)
    (yank)
    (move-to-column col)))

1

Spacemacsを使用している場合は、を使用して、次のようduplicate-line-or-regionにバインドできます。

SPC x l d 

0

プレフィックス引数を使用すると、直感的な動作(と思います)は次のようになります。

(defun duplicate-line (&optional arg)
  "Duplicate it. With prefix ARG, duplicate ARG times."
  (interactive "p")
  (next-line 
   (save-excursion 
     (let ((beg (line-beginning-position))
           (end (line-end-position)))
       (copy-region-as-kill beg end)
       (dotimes (num arg arg)
         (end-of-line) (newline)
         (yank))))))

カーソルは最終行に残ります。または、次の数行を一度に複製する接頭辞を指定することもできます。

(defun duplicate-line (&optional arg)
  "Duplicate it. With prefix ARG, duplicate ARG times."
  (interactive "p")
  (save-excursion 
    (let ((beg (line-beginning-position))
          (end 
           (progn (forward-line (1- arg)) (line-end-position))))
      (copy-region-as-kill beg end)
      (end-of-line) (newline)
      (yank)))
  (next-line arg))

私は両方を頻繁に使用しており、ラッパー関数を使用してプレフィックス引数の動作を切り替えています。

そしてキーバインド: (global-set-key (kbd "C-S-d") 'duplicate-line)


0
;; http://www.emacswiki.org/emacs/WholeLineOrRegion#toc2
;; cut, copy, yank
(defadvice kill-ring-save (around slick-copy activate)
  "When called interactively with no active region, copy a single line instead."
  (if (or (use-region-p) (not (called-interactively-p)))
      ad-do-it
    (kill-new (buffer-substring (line-beginning-position)
                                (line-beginning-position 2))
              nil '(yank-line))
    (message "Copied line")))
(defadvice kill-region (around slick-copy activate)
  "When called interactively with no active region, kill a single line instead."
  (if (or (use-region-p) (not (called-interactively-p)))
      ad-do-it
    (kill-new (filter-buffer-substring (line-beginning-position)
                                       (line-beginning-position 2) t)
              nil '(yank-line))))
(defun yank-line (string)
  "Insert STRING above the current line."
  (beginning-of-line)
  (unless (= (elt string (1- (length string))) ?\n)
    (save-excursion (insert "\n")))
  (insert string))

(global-set-key (kbd "<f2>") 'kill-region)    ; cut.
(global-set-key (kbd "<f3>") 'kill-ring-save) ; copy.
(global-set-key (kbd "<f4>") 'yank)           ; paste.

上記のelispをinit.elに追加すると、行全体のカット/コピー機能が得られ、F3 F4で行を複製できます。


0

最も簡単な方法は、Chris Conwayの方法です。

C-a C-SPACE C-n M-w C-y

これがEMACSで義務付けられているデフォルトの方法です。私の意見では、標準を使用することをお勧めします。私はEMACSでの自分自身のキーバインドのカスタマイズに常に注意しています。EMACSはすでに十分強力です。私たちは、独自のキーバインディングに適応するために最善を尽くすべきだと思います。

少し長めですが、慣れていると速くできて楽しいです!


4
すべてを考慮すると、Emacsはほとんど義務付けていません。Emacsがもたらす大きなメリットは、自分のニーズに合わせて簡単にカスタマイズできることです。もちろん実際に、固執することが有益なことを行うための標準的な方法たくさんありますが、「デフォルトの」Emacsを使用していて、「標準を使用する方が良い」と思ったからといって、必要以上に難しい方法を実行している場合は、あなたはほとんどそれを間違っています。
phils 2013

0

現在の行を複製するための関数です。プレフィックス引数を使用すると、行が複数回複製されます。たとえば、C-3 C-S-o現在の行を3回複製します。キルリングを変更しません。

(defun duplicate-lines (arg)
  (interactive "P")
  (let* ((arg (if arg arg 1))
         (beg (save-excursion (beginning-of-line) (point)))
         (end (save-excursion (end-of-line) (point)))
         (line (buffer-substring-no-properties beg end)))
    (save-excursion
      (end-of-line)
      (open-line arg)
      (setq num 0)
      (while (< num arg)
        (setq num (1+ num))
        (forward-line 1)
        (insert-string line))
      )))

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