[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ファイルやディレクトリを開いた際には,カーソルを移動させて目的の場所へ移動する必 要があります.
基本的にはカーソルキーなどでカーソルを移動させる(基本については 10.2 代表的なキーバインド ― チュートリアルで基本操作を学ぶ (2003/11/24) を参考 に) だけで,行うことができます.
しかし,標準の動作では不満なところもあります.そこで,ここでは,カーソルやカーソ ル移動に関連した設定を紹介します.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
通常のカーソル移動は単純です.カーソルキーや C-p(上) ,C-n(下) , C-b(左) ,C-f(右) でカーソルを移動できます.もちろん,カーソルキーで も同じことが可能です.
しかし,これでは,一文字一文字 (あるいは一行一行) 移動する必要があり,多くの行を 移動するのはとても面倒です.そこで, Ctrl (コートロール) を押しながら左右のカーソ ルキーを押すと,単語単位で移動することができます.また, Ctrl (コートロール) を押 しながら上下のカーソルキーを押すと,段落単位で移動できるようになります.
段落とは,改行のみの行 (空行) で区切られた文章を指します.
しかし,日本語では行頭に全角のスペースを入れたりして,段落を作ることも多くありま す.しかし,標準設定では,全角のスペースがあっても段落とは認識してくれません.
この段落を認識させる方法は設定で変えることができます.
例えば,以下の設定を.emacs に追加すると,行頭の全角スペースや「・○」も段落の区切 りとみなされます.
ただし,モードによっては設定が上書きされ,この設定が効かない場合もあります.
(setq paragraph-start '"^\\([ ・○<\t\n\f]\\|(?[0-9a-zA-Z]+)\\)")
|
設定済み Meadow では設定してあります.
カーソルキーでカーソルを移動できますが,これでは一行や一文字ずつしか移動できませ ん.
そこで,C-u 5 下カーソルキーとしてみてください.これで, 5 行分カーソルが移 動します.
このように,C-u に続けて数字を入力すると,指定した回数だけカーソルを移動で きます.例えば,C-u 5 右カーソル で 5 文字,カーソルを右へ移動できます.
さらに,C-v や M-v も便利です.これは,テキストを 1 画面分スクロール し,カーソルを画面の一番上へ移動させます.
C-v や M-v は,カレントバッファをスクロールさせますが,他のウィンドウ をスクロールさせることもできます.C-M-v,C-M-V で C-x o で移動 するバッファをスクロールさせることができます.
しかし,これらのスクロールでは,カーソルの位置が上へ行ってしまい,一瞬カーソルを 見失ってしまいます.そこで,以下を.emacs に追加するとカーソルの位置を変えないよう にできます.
(setq scroll-preserve-screen-position t) |
設定済みMeadowでは設定してあります.
1 画面ずつ移動するのが面倒な場合には,M-<,M-> があります.M-< で一番最初へ,M-< で一番最後へ移動できます.さらに,M-x goto-line で 指定した行へ移動することができます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Meadow でなくてもそうですが,文字が入力される部分にはカーソルが表示されています. そして,マウスの位置を教えるために,マウスカーソルが表示されています.
この章では,このカーソルやマウスカーソルに関連した設定を紹介します.
カーソル関連で,他の章で紹介したものは以下を参考に.
31.2.1 マウスカーソルを編集中に消す (2005/03/01) 31.2.2 カーソルの在処をわかりやすく − jiggle (2005/03/01) 31.2.3 アイドル中にカーソルを点滅 ― blinking-cursor (2005/03/01)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
テキストを入力している時に,マウスカーソルは必要ありません.そこで,テキスト入力 中にマウスカーソルを消すことができます.
テキストの入力時にはマウスカーソルは必要ありません.それどころか,マウスカーソル の位置によっては,文字と被って邪魔でさえあります.
文字の入力中にマウスカーソルを消すことができます.
設定してあります.
標準機能ですので,インストールは不要です.
以下を参考に設定します.
;; 0=消さない それ以外=消えるまでの時間 (ミリ秒) (setq w32-hide-mouse-timeout 1000) ;; nil=消さない t=キー入力でマウスカーソルが消える (setq w32-hide-mouse-on-key t) |
普通に文字入力を行うだけです.すると,マウスカーソルは自動的に消えます.
その後で,マウスカーソルを移動させると,元の場所に現れます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
バッファを切り替える時にカーソルを動かします.それにより,別バッファでどの位置に カーソルがあるか分かりやすくなります.
現在のバッファと別のバッファではカーソル位置が異なります.このため,バッファを切 り替えた時に,カーソルがどこにあるかすぐには分かりません.
バッファの移動後にカーソルを移動させて,目立たせ,カーソル位置を分かりやすくする ものです.
インストールしてありませんので,自分でインストールと設定が必要です.
jiggle をダウンロード後,ロードパスの通っ たところへ置きます.
以下を .emacs に追加します.
(require 'jiggle) (jiggle-mode 1) |
バッファを切り替えてみてください.すると,カーソルがおかしな動きをしてアピールし ませんか?
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacs を操作していないアイドル中にカーソルを点滅させます.
Meadow/Emacs を操作していない時には,カーソルが点滅して,居場所が分かりやすくな ります.
インストールしていませんので,インストールと設定が必要です.
blinking-cursor.el からダウンロードして,ロードパスの通ったところに保存します.
以下を .emacs に追加します.
(require 'blinking-cursor) (blinking-cursor-mode 1) |
Meadow/Emacs を放置しておくと,カーソルが点滅します.また,カーソルの色も,デフォ ルトなら金色,青色と変化します.
変化するカーソル色については,以下のようにして設定できます.
(setq blinking-cursor-colors ["gold" "blue" "red" "black"]) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ここでは,単純に上下にカーソルを移動させた時のカーソル移動をカスタマイズする方法 を紹介します.
31.3.1 カーソル移動を加速する (2005/03/01) 31.3.2 カーソル移動で全ファイルをループ (2005/03/01) 31.3.3 C-下カーソルでも新しい行を作りたい (2005/03/01)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
上下キーによるカーソル移動を加速させることができます.
長いファイルを上下キーでカーソル移動させるのは大変です.
C-v を使えばいいのでは,というのは置いといて...
上下キーのよるカーソル移動を何回か連続して行うと加速させることができます.
設定済みですが,初期状態では無効になっています.M-x customize-option RET mmemo-scroll-speedup RET でオンにしてください.その後,「Save for Future Sessions」上で RET を押し,再起動します.
その他の設定は,M-x customize-group RET Meadow-Memo RET から行うことができ ます.
以下を .emacs に追加します.
;; 10 回ごとに加速 (defvar scroll-speedup-count 10) ;; 10 回下カーソルを入力すると,次からは 1+1 で 2 行ずつの ;; 移動になる (defvar scroll-speedup-rate 1) ;; 800ms 経過したら通常のスクロールに戻す (defvar scroll-speedup-time 800) ;; 以下,内部変数 (defvar scroll-step-default 1) (defvar scroll-step-count 1) (defvar scroll-speedup-zero (current-time)) (defun scroll-speedup-setspeed () (let* ((now (current-time)) (min (- (car now) (car scroll-speedup-zero))) (sec (- (car (cdr now)) (car (cdr scroll-speedup-zero)))) (msec (/ (- (car (cdr (cdr now))) (car (cdr (cdr scroll-speedup-zero)))) 1000)) (lag (+ (* 60000 min) (* 1000 sec) msec))) (if (> lag scroll-speedup-time) (progn (setq scroll-step-default 1) (setq scroll-step-count 1)) (setq scroll-step-count (+ 1 scroll-step-count))) (setq scroll-speedup-zero (current-time)))) (defun scroll-speedup-next-line (arg) (if (= (% scroll-step-count scroll-speedup-count) 0) (setq scroll-step-default (+ scroll-speedup-rate scroll-step-default))) (if (string= arg 'next) (line-move scroll-step-default) (line-move (* -1 scroll-step-default)))) (defadvice next-line (around next-line-speedup activate) (if (and (string= last-command 'next-line) (interactive-p)) (progn (scroll-speedup-setspeed) (condition-case err (scroll-speedup-next-line 'next) (error (if (and next-line-add-newlines (save-excursion (end-of-line) (eobp))) (let ((abbrev-mode nil)) (end-of-line) (insert "\n")) (line-move 1))))) (setq scroll-step-default 1) (setq scroll-step-count 1) ad-do-it)) (defadvice previous-line (around previous-line-speedup activate) (if (and (string= last-command 'previous-line) (interactive-p)) (progn (scroll-speedup-setspeed) (scroll-speedup-next-line 'previous)) (setq scroll-step-default 1) (setq scroll-step-count 1) ad-do-it)) |
普通にカーソル移動を行うと, 10 回ごとに加速するようになります.
何となく欲しくなって,適当にでっちあげてみたもの.使ってみると,意外に便利で愛用 してます.
時々,1行移動させるつもりが,2行移動しちゃったりしますけど.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
上下のカーソルキーでの移動で,バッファ端まできたら次のバッファへ移動します.
バッファの切り替え関数は Junk emacs lisp より流用しています.
上下のカーソルキーでカーソルを移動させ,バッファの最後までくると,次のバッファへ 移動します.さらに,そのバッファの最後にくると,次のバッファへと移動できます.
ま,単なる思い付きなので,実用性は求めないように.
設定していません.
以下を .emacs に追加します
(defun my-select-visible (blst n) (let ((buf (nth n blst))) (cond ((= n (- (length blst) 1)) (other-buffer)) ;; buffer を一つしか開いていなければ ;; other-buffer に任せる ((not (= (aref (buffer-name buf) 0) ? )) buf) ;; mini-buf は要らない (t (my-select-visible blst (+ n 1)))))) (defun my-grub-buffer () (interactive) (let ((blst (if (< emacs-major-version 20) (reverse (buffer-list)) (reverse (cdr (assq 'buffer-list (frame-parameters))))))) ;; frame の buffer-list って ;; どうやって返すんだっけ? (switch-to-buffer (my-select-visible blst 0)))) (defadvice next-line (around next-line-allfile activate) (let ((pt (point))) (condition-case err ad-do-it (error ())) (when (and (= pt (point)) (interactive-p)) (bury-buffer) (goto-char (point-min)) ))) (defadvice previous-line (around previous-line-allfile activate) (let ((pt (point))) (condition-case err ad-do-it (error ())) (when (and (= pt (point)) (interactive-p)) (my-grub-buffer) (goto-char (point-max)) ))) |
カーソル移動をするだけです.バッファの上下端にくると,次のバッファへ移動します.
dired などは上下カーソルに別の関数を割り当てているので,動作しません.
これを少し変えて,以下のようにすると,現在のバッファだけをループできます.つまり, カーソルが一番下まできたときに,下カーソルを入力すると一番上に移動するのです.
(defadvice next-line (around next-line-allfile activate) (let ((pt (point))) (condition-case err ad-do-it (error ())) (when (and (= pt (point)) (interactive-p)) (goto-char (point-min)) ))) (defadvice previous-line (around previous-line-allfile activate) (let ((pt (point))) (condition-case err ad-do-it (error ())) (when (and (= pt (point)) (interactive-p)) (goto-char (point-max)) ))) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
設定によるが,バッファ端で下カーソルキーを押すことで,新しい行を追加することがで きる.これを,C-下カーソルキーでも可能にする.
next-line-add-newlines が nil 以外の値であれば,下カーソルキーをバッファの下端で 押すと新しい行を作ることができます.
しかし,C-下カーソルキーで移動していると,行を作ることはできません.
C-下カーソルキーで移動しても,行を作ることができます.
設定していません.
以下を .emacs に追加します
(defadvice forward-paragraph (around forward-paragraph-new-line activate) (let ((cp (point))) ad-do-it (if (and (= cp (point)) (not (= (point) (point-min)))) (next-line 1)))) |
C-下カーソル ではもバッファの末尾で止まらずに,新しい行を作っ てくれるようになります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
多くのテキストエディタと同様に,カーソル移動時に画面を1行ずつスクロールさせる.
多くのテキストエディタはカーソルを移動させると, 1 行ずつスクロールします.
しかし,Meadow では半画面ずつのスクロールします.
好みの問題ですが,最初は躊躇うかもしれません.
1行ずつスクロールさせることができます.
設定してあります.
以下を.emacsに追加します.
(setq scroll-conservatively 35 scroll-margin 0 scroll-step 1) |
ただし,これは通常のバッファでのカーソル移動のみ有効です. shell では,半画面ずつ 移動することもあります.そこで, shell モードのために,以下も設定しておきます.
(setq comint-scroll-show-maximum-output t) |
普通にカーソルを移動させると1行ずつのスクロールになります.ただし,場合によって は,半画面ずつスクロールしてしまうこともあるようです.
標準機能以外にも同様に1行ずつスクロールさせるための Elisp がありますので,ここで 紹介しておきます.
31.4.1 1 行ずつスクロールさせる ― ce-scroll (2005/03/01) 31.4.2 1 行ずつスクロールさせる設定 (2005/03/01)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
1行ずつのスクロールを可能にする
Meadow には 1 行ずつスクロールさせるための設定がありますが,これを使っても半画面 でスクロールしてしまい,不便です.
Applause's Emacs-Lisp and Patch か らダウンロードして,ロードパスの通ったところへコピーしておきます.
.emacs に以下を追加します.
(load "ce-scroll")
(setq ce-smooth-scroll nil)
|
2 行目はなくてもいいです.好みで設定しておきます.
これで,普通にカーソルを移動させるだけで, 1 行ずつのスクロールと物理行移動が可 能になります.物理行移動については 31.11 長い文章でのカーソルの移動 − 物理行移動 (2007/11/30) を参照ください.
ただ,時々挙動が変です.設定によっては,干渉するものもあります.例えば,
(setq scroll-preserve-screen-position t) |
を設定していると,期待通りの動作になりません.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
1 行ずつスクロールさせる設定です.「 S.Namba 」さんによるものです.
以下を.emacs に追加します.
(defun sane-next-line (arg) "Goto next line by ARG steps with scrolling sanely if needed." (interactive "p") ;;(let ((newpt (save-excursion (line-move arg) (point)))) (let ((newpt (save-excursion (next-line arg) (point)))) (while (null (pos-visible-in-window-p newpt)) (if (< arg 0) (scroll-down 1) (scroll-up 1))) (goto-char newpt) (setq this-command 'next-line) ())) (defun sane-previous-line (arg) "Goto previous line by ARG steps with scrolling back sanely if needed." (interactive "p") (sane-next-line (- arg)) (setq this-command 'previous-line) ()) (defun sane-newline (arg) "Put newline\(s\) by ARG with scrolling sanely if needed." (interactive "p") (let ((newpt (save-excursion (newline arg) (indent-according-to-mode) (point)))) (while (null (pos-visible-in-window-p newpt)) (scroll-up 1)) (goto-char newpt) (setq this-command 'newline) ())) (global-set-key [up] 'sane-previous-line) (global-set-key [down] 'sane-next-line) (global-set-key "\C-m" 'sane-newline) (define-key global-map "\C-n" 'sane-next-line) (define-key global-map "\C-p" 'sane-previous-line) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
C-v とすると, 1 画面単位でスクロールすることができます.これにより,下カー ソルキーよりも大きな移動を行うことができます.
逆方向の移動は M-v です.これにより,上カーソルキーよりもずっと大きな移動を 行うことができます.
この章では,こういったページ単位での移動に関連した Elisp などを紹介します.
31.5.1 ページ単位の移動時に末尾の行をハイライト (2005/03/01) 31.5.2 画面のスクロールを取り消す ― unscroll (2005/03/01) 31.5.3 C-v のスクロールをループさせる (2005/03/01)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
C-v でスクロールした時,以前表示していた部分の最後をハイライトすることで, どこからが新しいかを明確にできる.
C-v では, 1 画面分画面がスクロールします.ただし,この時, next-screen-context-lines で設定されている値だけ,重複して表示されます.このため, 1 画面分スクロールさせると,以前,どこが画面の末尾だったのか分からなくなってしま います.
スクロール時に,画面の末尾だった場所をハイライトしてくれます.それにより,以前表 示していた部分がどこまでなのかがすぐに分かるようになります.
インストールしてありませんので,インストールと設定が必要です.
XEmacs: Lisp Code - Highlight Context Line より, highlight-context-line.el をダウンロー ドします.そして,ロードパスの通ったところへ置きます.
以下を .emacs に追加します.
(require 'highlight-context-line) ;; ハイライトのフェイス (setq highlight-context-line-face 'region) |
これで,C-v や M-v でスクロールさせると,画面の末尾,あるいは,画面の 先頭だった行がハイライトされるはずです.
少しずれるようです,,,そのため,C-v の方は使えますが,M-v の方は画 面外になってしまうこともあります (next-screen-context-lines の値によっては使える かもしれません) .
また,もしもハイライトされなければ,M-x help-for-help k C-vとして, C-v に割り当てられている関数を確認してください.これが「 scroll-down 」以外 であれば,
(defadvice lcomp-select-completion-window-or-scroll-down (around highlight-context-line-down activate) ad-do-it (if (not (car (ad-get-args 0))) (highlight-context-line-do-highlight -1))) |
のように個別にアドバイスを追加する必要があります. defadvice の後にある関数名を変 えるだけなので,簡単です.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
スクロール後,実行するとそれを取り消し,元の状態に戻すことができる.
C-v を何回か押してスクロールさせると,元の場所を見失ってしまいます.
そんな時は慌てずに,C-x C-x じゃなくてこれを使いましょう.そうすれば,すぐ に元の場所に戻ることができます.
unscroll.el をダウン ロードして,ロードパスの通ったところへ置きます.
以下を .emacs に追加します.
(load "unscroll")
|
M-x unscrollとすると,スクロールを取り消すことができます.
直前のスクロールしか覚えてませんので,連続して入力しても意味がありません.無制限 に unscroll ができると面白いかもしれないなぁ.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
C-v で画面の下端までいくと,次はバッファの先頭へ移動し,永遠にループさせることが できます.
C-v を何度か入力すると画面の下端でエラーが出てストップします.何度 C-v を入力してもエラーが出るだけです.
この設定を入れると 1 度エラーが出て,さらに C-v を入力すると,画面の先頭へ 移動します.これで,永遠にスクロールを続けることができます.
もちろん M-v でも可能です.
設定していません.
以下を.emacs に追加します.
(defvar loop-scroll-up nil) (defadvice scroll-up (around loop-scroll-up activate) (let ((pt (point))) (condition-case err ad-do-it (error (if (and (interactive-p) (eq last-command 'scroll-up) loop-scroll-up (= pt (point))) (progn (goto-char (point-min)) (setq loop-scroll-up nil)) (setq loop-scroll-up t) (message "End of Buffer")))))) (defvar loop-scroll-down nil) (defadvice scroll-down (around loop-scroll-down activate) (let ((pt (point))) (condition-case err ad-do-it (error (if (and (interactive-p) (eq last-command 'scroll-down) loop-scroll-down (= pt (point))) (progn (goto-char (point-max)) (setq loop-scroll-down nil)) (setq loop-scroll-down t) (message "Beginning of Buffer")))))) |
普通に C-v を実行するだけです.これでループするようになります.
何らかの Elisp を入れて,C-v や M-v のコマンドがデフォルトと違うと動 作しません.その場合には適当に関数名を変える必要があります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
C-v などを実行しなくても自動的にスクロールさせる方法です.だらだらと長文を 読む時にいいでしょう.
31.6.1 自動的にスクロール ― idle-scroll (2005/03/01) 31.6.2 多機能な自動スクロール ― vel (2005/03/01)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
自動で,一行ずつスクロールさせることができます.
指定した秒が経過するたびに,自動的に 1 行スクロールさせることができます.
idle-scroll.el をダウンロー ドしてロードパスの通ったところへ置きます.
以下を .emacs に追加します
(load "idle-scroll")
|
M-x idle-scroll-mode でスクロールが開始します.スクロール速度は M-x set-variable RET idle-scroll-seconds RET 10 RET という風に指定します.
これで, 10 秒経過すると 1 行スクロールします.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
自動スクロールできます.スクロール中に方向や速度も簡単に変更できます.
idle-scroll で自動スクロールできますが,これでは方向が変更できませんし,速度の変 更も面倒です.
自動スクロールができます.しかも,スクロール中に上下カーソルキーで速度の変更もで きます.
vel.el をダウンロードし,ロードパス の通ったところへ置きます.
以下を.emacs に追加します.
(require 'cl) (require 'vel) |
M-x vel-mode-enable で vel-mode にします.この状態で,M-下カーソル と すると,スクロール開始します.さらに,M-下カーソル や 下カーソル を入 力すると,速度が変わります.逆に M-上カーソル や 上カーソル を入力す ると減速やスクロール方向を変えることができます.SPC などでスクロールを終了 させることができます.
また,マウスによる操作もできます.M-x vel-mode-enable で有効にします.そし て,マウスの右ボタンを押し,押したままで,マウスカーソルを上下に動かすと,その方 向へスクロールします.
(setq-default vel-mode t) |
としておくと,常にオンにできます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ある程度巨大なファイルを多数編集するようになると,カーソルの移動が大変面倒になっ てきます.
Meadow/Emacs には多様なカーソル移動コマンドがありますが,実際に移動したい先はあ る関数であったり,ある章の開始部分であったりと,ある特定の場所であることが多いも のです.
この時便利なのが,bookmark です.これは文字通り,ファイルの任意の場所にブックマー クをつけて,その場所へ一気にジャンプする機能.
この機能は標準で附属してます.設定も必要ありません.
使い方は以下のようになります.
Set bookmark (vel.el): defun:vel-quick-start
のように名前をつけておく.
名前を指定してジャンプする.TAB で補完できる.
Jump to bookmark: defun:vel-quick-start
この時,ジャンプ先が現在と違うバッファであれば,バッファ切り替えも実行してくれる.
例えば,以下のように表示される.
% Bookmark - -------- bookmark f:/book/main/1.bhl defun:vel-quick-start c:/source/vel.el
この一覧では下記のようなキーが利用できる.
メモを書いておくと,ブックマークを使ってジャンプした時に,そのメモを表示すること ができる.備忘録などに利用できる.
例えば,2個マークすれば,上下に分割してそれぞれ表示してくれる.
31.7.1 バッファにしおりをつける ― bm (2005/03/01)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
バッファの任意の場所にしおりをつけておき,その場所へ順番に移動していくことができ ます.
長いファイルやよく参照する箇所のあるファイルを編集する場合,何度もカーソルを移動 させる必要があります.あるいは,バッファを 2 つに分けて編集していても,何かの拍子 に 1 つになってしまうということもあります.
バッファの任意の箇所にしおりをつけておき,そのしおりを順番に巡回することができま す.
これにより,任意の場所へ簡単に移動することができます.
ただし,複数のバッファにしおりをつけても,巡回できるのは,現在のバッファにあるし おりだけです.
設定済みですので,そのままで利用できます.
bm.el をダウンロードし,ロードパス の通ったところへ移動します.
以下を.emacs に追加します.
(require 'bm) (global-set-key [?\C-\;] 'bm-previous) (global-set-key [?\C-\:] 'bm-next) (global-set-key [?\C-\M- ] 'bm-toggle) |
まず,ALT+Ctrl+SPC で現在行にしおりをつけます.これで,その行の色が変わりま す.他にも何ヶ所か同じようにして,しおりをつけておきます.
そして,C-; かC-: を押します.すると,しおりをつけた場所へ順番にカー ソルが移動します.C-; へ次のしおりへ,C-: が前のしおりへ移動になりま す.
モードによっては以下のような設定も便利でしょう.これだと, shell モードで,移動後, 現在行がバッファの 1 行目になります.
'(shell-mode )) ;;この条件をみたす場合,移動後 (recenter 0) する (setq bm-goto-top-condition (lambda () (or ;;irbsh のプロンプトを bookmark したとき (and (eq major-mode 'inferior-ruby-mode) (looking-at "^irbsh\\[")) ))) (defadvice bm-goto (after bm-goto-top activate) (if (or (memq major-mode bm-goto-top-mode-list) (funcall bm-goto-top-condition)) (recenter 0))) |
以下を追加すると,C-; や C-: での移動前に現在行をしおりに設定できます. これにより,現在行へすぐに戻ることができます.
(defun bm-set-bookmark-befor-goto () (if (or (bm-bookmark-at (point)) (string= last-command 'bm-next) (string= last-command 'bm-previous)) () (bm-toggle)) ) (defadvice bm-goto (before set-bookmark-before-next activate) "advice" (bm-set-bookmark-befor-goto) ) |
移動前にマークをつけておく設定です.これで,移動後 C-x C-x ですぐに移動前の 場所へ戻ることができます.
(defadvice bm-goto (before bm-mark-set activate) (unless (bm-bookmark-at (point)) (push-mark))) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
マウスカーソルが上にあるフレームやバッファをアクティブにできます
ウィンドウを分割するために,C-x 2 としたり,フレームを作るために C-x 5 2としたりすることはよくあります.
このように分割したりした後で,そのフレームやバッファに切り替えるためにはマウスカー ソルを移動させ,クリックする必要があり面倒です.
マウスカーソルを移動させるだけで,そのフレームやバッファをアクティブにすることが できます.
インストールしてありませんので,インストールと設定が必要です.
follow-mouse.el をダウンロー ドし,ロードパスの通ったところへ置きます.
以下を.emacs に追加します.
(require 'follow-mouse) |
M-x turn-on-follow-mouse でオンにします.これで,マウスカーソルを移動させる だけで,C-x o のようなバッファの切り替えなどができます.
M-x turn-off-follow-mouse でオフにできます.
ミニバッファにカーソルが移動した時の挙動があやしい.うまく操作できることもあれば, 操作できずにバッファにカーソルが行ってしまうこともあるよう.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
現在行をバッファの1行目にすることができる.
今,カーソルがある行をバッファの 1 行目へ移動させることができます.関数や文章など で,丁度いいところから表示させたい時に便利です.
設定していません.
以下を.emacs に追加します.適当なキーへ割り当てておくと便利です.
(defun line-to-top-of-window () "Move the line point is on to top of window." (interactive) (recenter 0)) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
現在,カーソルがある行を強調表示することで,今編集している箇所を分かりやすくしま す.
カーソルの印だけでは,ちょっと目をそらすと,どこを編集していたのか見失うことがあ ります.
カーソルがある行を強調表示することで,現在行が分かりやすくなります.
設定済みです.
(ただし,バージョンによっては設定でエラーになることもあったため,無効になってい ることもあります.)
設定は以下のようになっています.背景色をもとに適当にフェイスを決定しています.黒 のように濃い色だと,あまり意味を成しませんが.
;; 現在行に色をつける (defface face-for-hl-line '((((class color) (background dark)) (:background "white")) (((class color) (background light)) (:background "black")) (t ())) nil) (require 'hl-line) (custom-setq-if-not 'hl-line-face 'face-for-hl-line) (global-hl-line-mode) (defun egoge-wash-out-colour-back (colour) "Return a colour string specifying a washed-out version of COLOUR." (if (string= colour "black") "gray13" (let ((basec (color-values (face-attribute 'default :background))) (list nil)) (apply 'format "#%02x%02x%02x" (dolist (cv (color-values colour) (nreverse list)) (push (/ (/ (+ cv (* 2 (car basec))) 3) 256) list)))))) (defun egoge-wash-out-face-back (face) "Make the foreground colour of FACE appear a bit more pale." (let ((colour (face-attribute face :background))) (unless (eq colour 'unspecified) (set-face-attribute face nil :background (egoge-wash-out-colour-back colour))))) (defun hl-line-face-reset () (set-face-attribute 'face-for-hl-line nil :background (face-attribute 'default :background)) (egoge-wash-out-face-back 'face-for-hl-line) (frame-update-face-colors (selected-frame))) (defadvice color-theme-install-at-point (after hl-line-face-setup activate) (hl-line-face-reset)) (add-hook 'after-init-hook 'hl-line-face-reset) |
標準で付属しています.
以下を .emacs に追加します.フェイスは好きなように変えてください.
(setq hl-line-face 'underline) (global-hl-line-mode) |
これで,現在行に指定したフェイスが付けられます.
好きな色を使うためには,以下のようにしてフェイスを作成して,それを使うようにしま す.
(defface hlline-face '((((class color) (background dark)) (:background "blue" :foreground "white")) (((class color) (background light)) (:background "ForestGreen")) (t ())) "*Face used by hl-line.") (setq hl-line-face 'hlline-face) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacs では通常
|一行が長い文章は途中で折り返されま\| |す. 折り返した時は文末に\が表示さ\\| |れます | |ここで次の段落が続く | |
このように一行が長い時, 折り返されて表示されます. そして, 今「一行」の「一」にカー ソルがある時に, カーソルを1個下へ動かすと,「ここ」と書いてあるところへ移動します.
しかし, これは感覚的ではなく, 非常に使いにくいです. この場合, 「ここ」ではなくカー ソルが「す」へ移動して欲しいですね.
このようなカーソル移動を可能にするための設定をいくつか紹介します.
このような動作は可能ですが,時々変な動作をすることもあります.
このため,適当な文字数で折り返す癖をつけることをお勧めします (16.5 段落の設定を変更する ― auto-fill (2003/06/27) を参 考に) .
ここで,紹介したもの以外には ce-scroll という Elisp があります.これについては, すでに 31.4.1 1 行ずつスクロールさせる ― ce-scroll (2005/03/01) で紹介していますので,そちらを参照ください.
31.11.1 物理行移動 ― physical-line-mode (2007/11/30) 31.11.2 物理行移動 ― previous/next-window-line (2005/03/01) 31.11.3 見た目上の折り返しを変える ― word-wrap (2005/03/01)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
物理行移動が可能になります.また,特定のモードでは使わないように設定することもで きます.
物理行での移動が可能になります.
設定済みですので,そのままで利用できます.
小松さんのページ よりダウンロー ド後, ロードパスの通ったディレクトリに置きます.
以下を .emacs に記入します
(load "physical-line") (physical-line-on) ;; dired-mode では使わない (setq physical-line-ignoring-mode-list '(dired-mode)) |
Meadow を再起動すると物理行移動が可能になります.
Emacs22ではうまく動作しないようです.これは, physical-line.el の方を使うことで直る ようです.ただ,これでも, C-e が変みたいですが.
同じ機能を実現するものとして, physical-line もあります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
物理行移動を可能にする設定です.
設定していません.
以下を .emacs に追加します.
(global-set-key "\C-p" 'previous-window-line) (global-set-key "\C-n" 'next-window-line) (global-set-key [up] 'previous-window-line) (global-set-key [down] 'next-window-line) (defun previous-window-line (n) (interactive "p") (let ((cur-col (- (current-column) (save-excursion (vertical-motion 0) (current-column))))) (vertical-motion (- n)) (move-to-column (+ (current-column) cur-col))) (run-hooks 'auto-line-hook) ) (defun next-window-line (n) (interactive "p") (let ((cur-col (- (current-column) (save-excursion (vertical-motion 0) (current-column))))) (vertical-motion n) (move-to-column (+ (current-column) cur-col))) (run-hooks 'auto-line-hook) ) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
見た目上の折り返しを変化させ,物理行移動を可能にする
物理行での移動ができます.
ただし,見た目上の折り返しを変えて,改行と見なす処理を行っています.そのため,リー ドオンリーのバッファには利用できません.
インストールしていません.
から,コピーして, word-wrap.el の名前でロードパスの通ったところへ保存します.
以下を.emacs に追加します.
(require 'word-wrap) |
M-x word-wrap-mode として,オンにします.これで,物理行移動が可能になります. 必要に応じて, hook に追加しておくといいでしょう.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |