[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32. コピー,切り取り,貼り付け関連 (2005/03/19)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=copypaste"
"MeadowMemo/コピー,切り取り,貼り付け関連"へのコメント(無し)
検索全文Elisp


この章で紹介していること

C-k による 1 行カットについては,16.8.1 一行まるごとカット (2003/04/13)に,カーソルキーでのリー ジョン選択は16.7.2 カーソルキーでリージョンを選択 (2003/11/05)にあります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.1 コピー,切り取りのカスタマイズ (2005/03/19)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=copy%20cut"
"MeadowMemo/コピー,切り取りのカスタマイズ"へのコメント(無し)
検索全文Elisp

32.1.1 行のコピー (2003/11/24)  
32.1.2 前の行を一文字ずつペースト (2003/11/25)  
32.1.3 リージョン/現在行をコピー (2004/02/08)  
32.1.4 リージョンに行数をつけてコピー (2003/03/07)  
32.1.5 読み込み専用のテキストをキル (2005/03/19)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.1.1 行のコピー (2003/11/24)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=duplicate%20line"
"MeadowMemo/行のコピー"へのコメント(無し)
検索全文Elisp

お勧め度:★☆☆☆☆.私はC-a C-k C-yとしてます.便利だと思うし,入れてある んだが,脊髄反射で動いてしまう...

ネタ元:fj より

C-a C-k C-yで行のコピーができますが,ちょっと面倒ですね.

そこで,以下の設定を.emacs に追加します.そうすると,M-Yで行のコピーができるようになります.

 
(defun duplicate-line (&optional numlines)
  "One line is duplicated wherever there is a cursor."
  (interactive "p")
  (let* ((col (current-column))
         (bol (progn (beginning-of-line) (point)))
         (eol (progn (end-of-line) (point)))
         (line (buffer-substring bol eol)))
    (while (> numlines 0)
      (insert "\n" line)
      (setq numlines (- numlines 1)))
    (move-to-column col)))

(define-key esc-map "Y" 'duplicate-line)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.1.2 前の行を一文字ずつペースト (2003/11/25)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=line-copy-char"
"MeadowMemo/前の行を一文字ずつペースト"へのコメント(無し)
検索全文Elisp
要約

直前の行を 1 文字ずつコピーする関数です.

情報源

EmacsWiki:LineCopyChar

何ができるのか?

(defun line-copy-char (&optional b)

という行があったとします.この次の行で紹介する関数を使うと,

(

となります.さらに,関数を実行すると,「 (def 」と一文字ずつコピーできます.

設定方法

以下を.emacs に追加します.

 
(defun line-copy-char (&optional b)
  "Copy a character exactly below/above the point
   to the current point of the cursor (default is above)."
  (interactive "p")
  (let (p col s)
    (setq p (point))
    (setq col (current-column))
    (forward-line (if b -1 1))
    (move-to-column col)
    (setq s (buffer-substring (point) (+ (point) 1)))
    (goto-char p)
    (insert s)))

(define-key global-map [f12] 'line-copy-char)
(define-key global-map
  [(shift f12)] '(lambda () (interactive) (line-copy-char nil)))

詳しい使い方

f12 でカーソルの 1 行前にある行を 1 文字ずつコピーできます.Shift を押しな がら f12 とすると, 1 行後の行をコピーできます.

コメント

動作はおもしろいけど,何がうれしいんだろう.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.1.3 リージョン/現在行をコピー (2004/02/08)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=duplicate-line"
"MeadowMemo/リージョン/現在行をコピー"へのコメント(無し)
検索全文Elisp
要約

リージョンを簡単に連続して貼り付けることができます.

情報源

gnu.emacs.souces

何ができるのか?

ある行があって,その行を複数貼り付けたいとします.C-k をして,C-y を 何回か実行すれば可能です.

他にもこんな方法があります.

設定方法

以下を.emacs に追加します.

 
(defun duplicate-line-backward ()
  "Duplicate the current line backward."
  (interactive "*")
  (save-excursion
    (let ((contents
           (buffer-substring
            (line-beginning-position)
            (line-end-position))))
      (beginning-of-line)
      (insert contents ?\n)))
  (previous-line 1))

(defun duplicate-region-backward ()
  "If mark is active duplicates the region backward."
  (interactive "*")
  (if mark-active

      (let* (
             (deactivate-mark nil)
             (start (region-beginning))
             (end (region-end))
             (contents (buffer-substring
                        start
                        end)))
        (save-excursion
          (goto-char start)
          (insert contents))
        (goto-char end)
        (push-mark (+ end (- end start))))
    (error
     "Mark is not active. Region not duplicated.")))

(defun duplicate-line-forward ()
  "Duplicate the current line forward."
  (interactive "*")
  (save-excursion
    (let ((contents (buffer-substring
                     (line-beginning-position)
                     (line-end-position))))
      (end-of-line)
      (insert ?\n contents)))
  (next-line 1))

(defun duplicate-region-forward ()
  "If mark is active duplicates the region forward."
  (interactive "*")
  (if mark-active
      (let* (
             (deactivate-mark nil)
             (start (region-beginning))
             (end (region-end))
             (contents (buffer-substring
                        start
                        end)))
        (save-excursion
          (goto-char end)
          (insert contents))
        (goto-char start)
        (push-mark end)
        (exchange-point-and-mark))
    (error "Mark is not active. Region not duplicated.")))

(global-set-key [M-up]    'duplicate-line-backward)
(global-set-key [M-down]  'duplicate-line-forward)
(global-set-key [M-right] 'duplicate-region-forward)
(global-set-key [M-left]  'duplicate-region-backward)

詳しい使い方

1 行目:abcde
2 行目:fghij

とあったとします.で,カーソルが 1 行目の中ほどにあったとしましょう.そこで, M-上カーソル (ALT を押しながら上カーソル) を押します.すると,

1 行目:abcde
1 行目:abcde
2 行目:fghij

となり,カーソルは一番最初の 1 行目の中ほどに移動します.あとは何回か入力すると, 1 行目を何回でも複製できるわけです.ちなみに, 2 行目の行頭にある状態で,M-上カー ソル (ALT を押しながら上カーソル) を押すと,各行を 2 行ずつに複製できます.

M-下カーソル (ALT を押しながら下カーソル) も同じような動作をします.ただし, カーソルは下方向へと移動していきます.

一方で,M-左カーソル (ALT を押しながら左カーソル) とすると,リージョンのテキ ストをカーソルの前に追加できます.M-右カーソル (ALT を押しながら右カーソル) ならカーソルの後に追加できます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.1.4 リージョンに行数をつけてコピー (2003/03/07)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=copy-region-with-info"
"MeadowMemo/リージョンに行数をつけてコピー"へのコメント(無し)
検索全文Elisp

お勧め度:★★☆☆☆.たまに使う.あれば便利という程度か.

リージョン内の文字に行数をつけてコピーできます.

昔どこかの ML で見かけたものを今だに利用しています.これが以外と便利です.

行頭の書式の変更は適当にソースをいじってください.

 
;; "リージョンの各行に行番号とファイル名をつけてヤンクバッファにコピー"
(defun copy-region-with-info (arg)
  "リージョンの各行に行番号とファイル名をつけてヤンクバッファにコピー
   C-u で数引数をつけると、ファイル名がフルパスで付与される"
  (interactive "p")
  (save-excursion
    (let ((e (max (region-end) (region-beginning)))
          (b (min (region-end) (region-beginning)))
          (str)
          (first t))
      (goto-char b)
      (while (<= (+ (point) 1) e)
        (beginning-of-line)
        (setq str
              (format
               "%s:%d:%s"
               (if (not (eq arg 1))
                   (buffer-file-name)
                 (buffer-name))
               (1+ (count-lines 1 (point)))
               (buffer-substring
                (point)
                (progn
                  (end-of-line)
                  (if (eobp)
                      (signal 'end-of-buffer nil))
                  (forward-char)
                  (point)))))
        (backward-char)
        (if (not first)
            (kill-append str nil)
          (setq kill-ring
                (cons str
                      kill-ring))
          (if (> (length kill-ring) kill-ring-max)
              (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil))
          (setq kill-ring-yank-pointer kill-ring)
          (setq first nil))
        (forward-line 1)))))



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.1.5 読み込み専用のテキストをキル (2005/03/19)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=kill-read-only-ok"
"MeadowMemo/読み込み専用のテキストをキル"へのコメント(無し)
検索全文Elisp
要約

読み込み専用のテキストをキルしてもエラーを出さないようにする.

何が問題なのか?

ヘルプとか Info とかを表示して,ついつい癖でそのテキストをコピーするためのキルし てしまうことがあります.

しかし,そうすると,エラーになってしまいます.

何ができるのか?

読み込み専用のテキストをキルすると,エラーにはせずに,コピーするようにできます.

設定済みMeadowでは

設定しています.

インストール方法

標準の機能です.

設定方法

.emacs に以下を追加します

 
(setq kill-read-only-ok t)

詳しい使い方

普通にキルしてみてください.エラーにはなりませんから.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.2 貼り付けのカスタマイズ (2003/11/14)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=about%20yank"
"MeadowMemo/貼り付けのカスタマイズ"へのコメント(無し)
検索全文Elisp

ここでは,C-yで行う貼り付けのカスタマイズについて紹介します.

32.2.1 貼り付け候補の選択 (2003/11/14)  
32.2.2 貼り付け位置を先に指定したい ― fcopy (2003/11/14)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.2.1 貼り付け候補の選択 (2003/11/14)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=customize%20yank"
"MeadowMemo/貼り付け候補の選択"へのコメント(無し)
検索全文Elisp

お勧め度:★★★★★.これがないと使えません.私は browse-yank を使ってます.理由 は,最初に使ったのがこれだったから.

Emacs ではカットされた文字は"キルリング (kill ring)"に保存されます. キルリングと は, カットされた文字を保存しておく場所です. 要するに, クリップボードの履歴を取っ てくれるわけです.

Meadow では, メニューの Edit->Select and Paste からそれまでにカットした文字の中 から貼り付ける文字を選択することができます. しかし, メニューを使うためにはマウス を使わねばならず, 面倒です.

この kill-ring からの貼り付けをもっと便利に使うための設定を紹介します.

ここでは, 3 種類紹介しています.これらの基本的な動作は同じで,実行すると下の方 にウィンドウができ,そこに kil-ring の内容が表示されます.ただ,その表示の仕方が 少し違っています.

スクリーンショット を見てください.上から順に, browse-kill-ring , kill-summary , browse-yank です.

こんな風に, browse-kill-ring では kill-ring の内容を ------ という線で区切って表示しています.

kill-summary では,内容が 1 行にまとめられます.全体を簡単に俯瞰できる反面,個々の内容は見にくいです.

最後の browse-yank では,表示される kill-ring は一つのみです. 1 個 1 個の内容は最も見やすいですが,全体を見ることはできません.

他に yank-pop-summary というのもあります.これは kill-summary に似てます.

32.2.1.1 貼り付けの拡張 ― browse-kill-ring (2003/07/12)  
32.2.1.2 貼り付けの拡張 ― kill-summary (2003/11/14)  
32.2.1.3 貼り付けの拡張 ― browse-yank (2003/11/14)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.2.1.1 貼り付けの拡張 ― browse-kill-ring (2003/07/12)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=browse-kill-ring"
"MeadowMemo/貼り付けの拡張―browse-kill-ring"へのコメント(無し)
検索全文Elisp

インストールは browse-kill-ring よりダウンロードし,ロードパスの通ったところへ置き,以下を .emacs に追加するだけです.

 
(require 'browse-kill-ring)
(global-set-key "\M-y" 'browse-kill-ring)

これで,M-y とすると, kill-ring の一覧が表示されます.np で前後へ移動し,y で貼り付け,q で終了,e で選択中の kill-ring を編集できます.

間違って貼り付けた場合には U で取り消すことができます.普通の isearch での検索はもちろんできますし,sr でも検索ができます.

他の設定例は以下.

 
;; kill-ring を一行で表示
(setq browse-kill-ring-display-style 'one-line)
;; browse-kill-ring 終了時にバッファを kill する
(setq browse-kill-ring-quit-action 'kill-and-delete-window)
;; 必要に応じて browse-kill-ring のウィンドウの大きさを変更する
(setq browse-kill-ring-resize-window t)
;; kill-ring の内容を表示する際の区切りを指定する
(setq browse-kill-ring-separator "-------")
;; 現在選択中の kill-ring のハイライトする
(setq browse-kill-ring-highlight-current-entry t)
;; 区切り文字のフェイスを指定する
(setq browse-kill-ring-separator-face 'region)
;; 一覧で表示する文字数を指定する. nil ならすべて表示される.
(setq browse-kill-ring-maximum-display-length 100)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.2.1.2 貼り付けの拡張 ― kill-summary (2003/11/14)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=kill-summary"
"MeadowMemo/貼り付けの拡張―kill-summary"へのコメント(無し)
検索全文Elisp
要約

kill-ring の内容を 1 行に要約して表示できる Elisp です.すべての kill-ring を一覧できま す.

何が問題なのか?

kill-ring は 1 個 1 個確認することはできても,全体を一覧することは困難です.

何ができるのか?

100: 1 @face2html2{color:#00ffff;____comm}{情報源}
99:  1 soft conf matome words site intro unix trouble
98:  1 func index 

という風に kill-ring の内容を一覧できます.

インストール方法

kill-summary よりダウ ンロードし,ロードパスの通ったところへ置きます.

設定方法

以下を .emacs に追加します.

 
(autoload 'kill-summary "kill-summary" nil t)
(global-set-key "\M-y" 'kill-summary)

詳しい使い方

M-y とすると, kill-ring の一覧が表示されます.後は,np で 前後に移動し,貼り付けたいものを選択します.q で終了です.C-g で中止 できます



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.2.1.3 貼り付けの拡張 ― browse-yank (2003/11/14)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=browseyank"
"MeadowMemo/貼り付けの拡張―browse-yank"へのコメント(無し)
検索全文Elisp

Meadow 1.99 では,ここで説明している範囲については動きますが,他の機能の一部が動作しません.

Vectorで入手できます.

インストールはロードパスの通ったディレクトリに置き, 以下を .emacs に記入するだけです.

 
(load "browse-yank")
(global-set-key "\M-y" 'browse-yank)

使い方は貼り付けたい時に M-y を入力するだけです. すると, 下方に現在貼り付けるこ とのできるテキストが表示されます. ここで, p を入力すると, 一つ前のテキストが表示 されます. n と p を使って, 貼り付けたいテキストを選択したら, i 押すと貼り付ける ことができます.

e を押すと編集もできます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.2.2 貼り付け位置を先に指定したい ― fcopy (2003/11/14)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=fcopy"
"MeadowMemo/貼り付け位置を先に指定したい―fcopy"へのコメント(無し)
検索全文Elisp

お勧め度:★★☆☆☆.発想はとても面白いし,便利ではある.しかし,今までのコピー のやり方が染みついているので,あまり使ってない.

上の方にあった内容を今の位置にコピーする場合,どうしてますか?

普通は上の方にあったよなぁ.と探してあったら,それをコピーしてカーソルを戻して貼 り付けということをしてると思います.面倒ですね.

それをもっと簡単にしようというのが fcopy です,

使うためには,http://pop-club.hp.infoseek.co.jp/emacs/fcopy.html よりダウ ンロードし,ロードパスの通ったところへ置き,以下を .emacs に追加します.

 
(autoload 'fcopy-mode "fcopy" "copy lines or region without editing but modify." t)
(global-set-key "\C-ck" 'fcopy-mode)

これで,C-c k とすると,そのバッファが読み込み専用に変わります.そうした状 態で貼り付けたいものを探し,リージョンで選択した後で RET とすると,そのリー ジョン内を貼り付けることができます.

リージョンで選択する前に,m を入力しておくと,ミニバッファに m という表示 が表れます.こうしておくと,RET で貼り付けるとバッファが作成され,貼り付け る前に編集することもできます.編集後に C-c C-c とすると貼り付けになります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.3 矩形処理 (2003/11/14)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=rectangle"
"MeadowMemo/矩形処理"へのコメント(無し)
検索全文Elisp

お勧め度:★★★★★.行頭に特定の文字を挿入したり,カットしたりといった時によく 使います.

矩形処理というのはどういうものか分かりますか?

   日付       数量     価格
1999/10/01    1000     1000
2000/10/01    1209     1200
2001/10/01    2901     1500
2002/10/01    2189     1100

例えばこんなテキストがあったとします.今,数量の列だけ切り取りたいとしたらどうやっ てやりますか?

この処理を簡単にするのが矩形処理なのです.方法は単純で,

   日付      S数量     価格
1999/10/01    1000     1000
2000/10/01    1209     1200
2001/10/01    2901     1500
2002/10/01    2189E    1100

こんな風に S の位置にマークした後で,カーソルを E に移動し,リージョンを選択しま す.

ここまでは普通のリージョン選択です.

ここで,C-x r k とすると,数量の列を切り取ることができます.この後で,カー ソルを価格の後ろに持っていき,C-x r y とすると切り取った列を最後に追加する ことができます.

主な機能は以下です

私がよく使うのは,

メモ 1
メモ 2
メモ 3
 

という風にリージョンで選択しておき,C-x r tとします.これで,「・」を入力 すると

・メモ 1
・メモ 2
・メモ 3

とできます.行頭に適当な文字を入れたい時に便利です.逆に削除は

・メモ 1
・メモ 2
・メモ 3

という風にリージョンで選択し,C-x r dとします.

32.3.1 矩形処理をもっと簡単に − sense-region (2003/11/14)  
32.3.2 矩形選択をマウスでしたい ― rect-mark (2003/05/30)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.3.1 矩形処理をもっと簡単に − sense-region (2003/11/14)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=sense-region"
"MeadowMemo/矩形処理をもっと簡単に−sense-region"へのコメント(無し)
検索全文Elisp

お勧め度:★★☆☆☆.矩形処理はC-x r tC-x r dで使うのに慣れている ので,あまり使わない.

矩形処理は便利なのですが,操作が煩雑になってしまうのが欠点です.そこで, sense-region が便利です. sense-region よりダウンロードし, ロードパスの通ったところへ置き,

 
(autoload 'sense-region-on "sense-region"
  "System to toggle region and rectangle." t nil)

を追加するだけで使うことができます.これで,M-x sense-region-on とするとオ ンになります.

通常のリージョン選択は変わりませんが,CTRL + SPCを 2 度押すと矩形処理とな り,リージョンが変化します.切り取りや貼り付けなどの操作も CTRL + w ででき ます.

矩形処理をする際には非常に便利です.

ただ,私のように CTRL + SPC を連打して,頻繁にマークをつけ直すような人は sense-region がオンの間はちょっと意識しないといけないかもしれません.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.3.2 矩形選択をマウスでしたい ― rect-mark (2003/05/30)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=rect%20mark"
"MeadowMemo/矩形選択をマウスでしたい―rect-mark"へのコメント(無し)
検索全文Elisp

お勧め度:★★☆☆☆.これも使っていない.便利だけど,矩形処理をそんなには多用し ないし,キーボードの方が速い.

もっと楽に矩形選択をするために,マウスを使う方法があります.

方法は rect-mark.el を ダウンロードし,ロードパスの通ったところへ置き,以下を追加すると使うことができま す.これで,Shift + 左クリック で矩形を選択できるようになります. sense-region 同様,リージョンの形が変化しますので,分かりやすいです.

切り取りなどは C-x r C-w などでできます.

 
(define-key ctl-x-map "r\C-@" 'rm-set-mark)
(define-key ctl-x-map [?r ?\C-\ ] 'rm-set-mark)
(define-key ctl-x-map "r\C-x" 'rm-exchange-point-and-mark)
(define-key ctl-x-map "r\C-w" 'rm-kill-region)
(define-key ctl-x-map "r\M-w" 'rm-kill-ring-save)
(define-key global-map [S-down-mouse-1] 'rm-mouse-drag-region)
(autoload 'rm-set-mark "rect-mark"
  "Set mark for rectangle." t)
(autoload 'rm-exchange-point-and-mark "rect-mark"
  "Exchange point and mark for rectangle." t)
(autoload 'rm-kill-region "rect-mark"
  "Kill a rectangular region and save it in the kill ring." t)
(autoload 'rm-kill-ring-save "rect-mark"
  "Copy a rectangular region to the kill ring." t)
(autoload 'rm-mouse-drag-region "rect-mark"
  "Drag out a rectangular region with the mouse." t)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.4 拡張クリップボード ― レジスタ (2003/11/24)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=register"
"MeadowMemo/拡張クリップボード―レジスタ"へのコメント(無し)
検索全文Elisp

拡張クリップボードという言い方はあまり適切ではないかもしれませんが, Windows の言葉で説明すると,こうなります.つまり,多数のデータを保存できるクリップボード. それがレジスタです.

では,何ができるのか?

クリップボードが多数あるわけですから,各クリップボードにコピーして,データを貼り 付けることができます.

次に,コピーできるデータが多彩です.テキストだけでなく,ポイント位置,ウィンドウ 分割情報も保存できます.

こういったデータを保存しておくための場所を「レジスタ」といい,名前 がつけられています.

名前に用いることができるのは英数字や記号,そのメタ変種などです. 例えば,「レジスタ a 」や「レジスタ 2 」,「レジスタ C-a 」などがあり,それぞれのレ ジスタにデータを保存できます.

ただし, 1 つのレジスタにコピーできるデータは一つのみです.上書きすると,以前のデー タは失われます.

ただし,レジスタ名は大文字,小文字を区別します.そのため,「レジスタ a 」と「レジ スタ A 」は別のものになります.

32.4.1 レジスタの基本機能 (2003/11/24)  
32.4.2 レジスタを一覧表示 ― list-register (2003/11/18)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.4.1 レジスタの基本機能 (2003/11/24)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=register%20basic"
"MeadowMemo/レジスタの基本機能"へのコメント(無し)
検索全文Elisp

まずはレジスタの標準機能から紹介します.

32.4.1.1 テキストをレジスタへ保存 (2003/03/20)  
32.4.1.2 矩形領域をレジスタへ保存 (2003/03/20)  
32.4.1.3 バッファとカーソル位置をレジスタへ保存 (2003/03/20)  
32.4.1.4 ウィンドウ分割情報をレジスタに保存 (2003/03/20)  
32.4.1.5 数値をレジスタへ保存 (2003/03/20)  
32.4.1.6 ファイル名をレジスタへ保存 (2003/03/20)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.4.1.1 テキストをレジスタへ保存 (2003/03/20)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=register%20text"
"MeadowMemo/テキストをレジスタへ保存"へのコメント(無し)
検索全文Elisp

まずはテキストをレジスタへ保存する方法です.方法は単純で,コピーしたい範囲をリー ジョンで選択し,C-x r s a (copy-to-register) とします.そうすると,「レジ スタ a 」にテキストが保存されます.最後の「 a 」の部分は,任意の英数字や記号 1 文字で 指定できます.

そして,C-x r i a (insert-register) とすると,「レジスタ a 」のテキストが貼 り付けられます.C-x r g a としても同じです.

このコピーコマンドの C-x r s a に引数を与えて,C-u C-x r s a とする と,カットになります.

一方,C-x r i aC-u C-x r i a とすると,テキスト貼り付け後のカー ソル位置が貼り付けたテキストの最後へ移動します.

これを使うと,任意のレジスタにそれぞれテキストをコピーすることができ,非常に便利 になります.

参考に, browse-yank.el には,以下のようなバッファ全体をレジスタに登録する関数が用 意されています.

 
(defun buffer-to-register (char)
  "Set the contents of the current buffer into register CHAR."
  (interactive "cCopy to register: ")
  (set-register char (buffer-substring (point-min) (point-max))))



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.4.1.2 矩形領域をレジスタへ保存 (2003/03/20)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=register%20rectangle"
"MeadowMemo/矩形領域をレジスタへ保存"へのコメント(無し)
検索全文Elisp

矩形処理は,32.3 矩形処理 (2003/11/14)で紹介したので簡単にします.

C-x r r a (copy-rectangle-to-register) で矩形領域を「レジスタ a 」へ保存しま す.C-u を与えるとカットになります.

C-x r i a で「レジスタ a 」の矩形領域を貼り付けます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.4.1.3 バッファとカーソル位置をレジスタへ保存 (2003/03/20)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=register%20point"
"MeadowMemo/バッファとカーソル位置をレジスタへ保存"へのコメント(無し)
検索全文Elisp

複数のファイルを行き来しながら,ファイルを編集する時には,バッファを切り替え,カー ソルを移動する必要があります.これでは,カーソル移動が大変です.

そこで,レジスタを使って楽に移動しましょう.

まず,C-x r SPC a として,現在位置を「レジスタ a 」に保存します (point-to-register) .

そして,「レジスタ a 」の位置へ戻りたい時には,C-x r j a (jump-to-register) とします.こうすると,「レジスタ a 」に保存されている位置に移動します.もちろん, バッファも同時に切り替えてくれます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.4.1.4 ウィンドウ分割情報をレジスタに保存 (2003/03/20)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=register%20window"
"MeadowMemo/ウィンドウ分割情報をレジスタに保存"へのコメント(無し)
検索全文Elisp

ウィンドウを分割し,それぞれに適切なファイルを表示していても,何らかの機会にウィ ンドウ分割が崩れてしまうことがあります.

そんなことを防止するためにも,ウィンドウの分割情報をレジスタへ保存しておくと便利 です.保存しておくと,バッファを切り替えても,ウィンドウ分割を消しても,一瞬で元 のウィンドウ分割に戻すことができます.

まず,保存は,C-x r w a (window-configuration-to-register) とします.これ で,「レジスタ a 」にウィンドウ分割情報が保存されます.

復元は C-x r j a でできます.

同じようにフレームの状態はC-x r f aで保存できます (frame-configuration-to-register) .



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.4.1.5 数値をレジスタへ保存 (2003/03/20)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=register%20num"
"MeadowMemo/数値をレジスタへ保存"へのコメント(無し)
検索全文Elisp

簡単な表を書いたりする時に,数値を順番に増加させていきたいことがあります.そんな 時に使うことのできる機能です.

まずは,「 C-u 数値 C-x r n a 」で数値を「レジスタ a 」に保存します (number-to-register) .

そして,「 C-u 数値 C-x r + 」で「レジスタ a 」の値を数値だけ増加させます.

貼り付けは,テキストと同じで,C-x r i aでできます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.4.1.6 ファイル名をレジスタへ保存 (2003/03/20)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=register%20file"
"MeadowMemo/ファイル名をレジスタへ保存"へのコメント(無し)
検索全文Elisp

最後に少し変わったものを紹介します.

以下のようにすると,「 FILENAME 」というファイルの名前が「レジスタ a 」に保存されま す.

そして,C-x r j a とすると,そのファイルを一瞬で開くことができます.

 
(set-register ?a '(file . FILENAME))

頻繁に開くファイルならば,

 
(set-register ?a '(file . "~/.emacs"))

といった風に,.emacs に書いておくと便利です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

32.4.2 レジスタを一覧表示 ― list-register (2003/11/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=register%20view"
"MeadowMemo/レジスタを一覧表示―list-register"へのコメント(無し)
検索全文Elisp

レジスタは非常に便利なのですが,どこへコピーしたかなということがよくあります.

1 個 1 個のレジスタの内容は M-x view-register で分かりますが,それをしらみ潰しにやっていくのも馬鹿馬鹿 しいです.

そこで,この Elisp が便利です.これを入れておくと,M-x list-register でレジスタの内容を以下のように kill-summary 風に一覧表示できます.というか, kill-summary から表示部分はコピーしました.

使うためには, list-register.elをダウンロー ドし,ロードパスの通ったところへコピーします.そして,以下を.emacs に追加します.

 
(require 'list-register)

貼り付けやバッファ位置の移動などは,RET でできます.また,テキストについて は,e で編集できます (編集時は C-c C-c で終了, C-c C-q で中止, C-c C-s で任意のレジスタへ保存) .

数字 (num と出るもの) に関しては,+- で増加/減少させることができます.

List of register
  2: pos:a buffer position:neta.texi<tmp>, position 3340
  3: num:8
  j:   1: (Use SPC or DEL to scroll through this text.  Type q to exit the
  p:  13: (defun list-register ()^J  (interactive)^J  (with-output-to-temp
  w:   5: 指す) コンスセルはソート前と同じコンスセルだが、それはもはやリス


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]