「multiple-cursors を使うための設定」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
&bold(){■ Emacs 全般で利用できる設定}
----
&bold(){【お知らせ】}
----
&bold(){<2018/08/10 追記>}
mc/cycle-forward と mc/cycle-backward にキーを設定しました。
&bold(){<2018/08/08 追記>}
カーソルの位置を維持するために mc/cursor-specific-vars 変数から temporary-goal-column を削除する設定を追加しました。
以下で追加された設定を解除しているものですが、この対応による影響は分かりません。
・https://github.com/magnars/multiple-cursors.el/commit/eba10208fc38889e792dca08f4c2067936c3008a#diff-749d0080f8fe91f23f075149bf069e64
&bold(){<2017/05/02 追記>}
以前のバージョンより機能が縮小されましたが、正常に動作するように見直しました。
&bold(){【本題】}
----
multiple-cursors を違和感なく使うための設定です。以下のページを参考としています。
・http://qiita.com/ongaeshi/items/3521b814aa4bf162181d
・http://qiita.com/scalper/items/b9e357b3af071c930777
・http://nishikawasasaki.hatenablog.com/entry/2012/12/31/094349
・http://tam5917.hatenablog.com/entry/20121208/1354931551
上記の設定に以下の改善をしてみました。
・リージョンを選択せずに multiple-cursors を使った場合に、cua-mode と同じような動きとなるキー設定とした。また、縦移動時にカーソル位置が維持されないのを改善した。
・操作性をシンプルにするために previous でマーカーを上位に設定する機能は、全面的に不採用とした。
C-t で起動します。後は、リージョンを設定してもしなくとも、C-n、C-p、C-s を使えば、だいたいのことはできるようになっています。
入力した正規表現にマッチするリージョン内の部分をマークする機能も C-M-r に設定しています。利用してみてください。
(require 'multiple-cursors)
(require 'smartrep)
(declare-function smartrep-define-key "smartrep")
;; 入力した文字列にマッチするリージョン内の部分をマークする
(global-set-key (kbd "C-M-c") 'mc/mark-all-in-region)
;; 入力した正規表現にマッチするリージョン内の部分をマークする
(global-set-key (kbd "C-M-r") 'mc/mark-all-in-region-regexp)
(global-unset-key (kbd "C-t"))
(smartrep-define-key global-map "C-t"
'(("C-t" . 'mc/mark-next-like-this)
("C-n" . 'mc/mark-next-like-this)
("C-p" . 'mc/unmark-next-like-this)
("C-u" . 'mc/unmark-next-like-this)
("C-s" . 'mc/skip-to-next-like-this)
("C-*" . 'mc/mark-all-like-this)
("C-d" . 'mc/mark-all-like-this-dwim)
("C-i" . 'mc/insert-numbers)
("C-v" . 'mc/cycle-forward)
("M-v" . 'mc/cycle-backward)
("C-l" . 'recenter-top-bottom)
;; IM の切替えコマンドを指定する
("C-o" . 'toggle-input-method)))
;; IM の切替えコマンドを追加する
(add-to-list 'mc--default-cmds-to-run-once 'toggle-input-method)
;; カーソルの位置を維持するために mc/cursor-specific-vars 変数から
;; temporary-goal-column を削除する
(delq 'temporary-goal-column mc/cursor-specific-vars)
(defun mc/last-command-check ()
(memq last-command '(mc/mark-next-like-this
mc/unmark-next-like-this
mc/skip-to-next-like-this)))
;; 縦移動時にカーソル位置が維持されないのを対策する
(advice-add 'mc/mark-next-like-this
:around (lambda (orig-fun &rest args)
(if (mc/last-command-check)
(let ((last-command 'next-line))
(apply orig-fun args))
(apply orig-fun args))))
;; smartrepによるコマンド実行中はキー入力をエコーしない
;; http://shakenbu.org/yanagi/d/?date=20140105
(advice-add 'smartrep-map-internal
:around (lambda (orig-fun &rest args)
(let ((echo-keystrokes 0))
(apply orig-fun args))))
以下のページの内容を追加設定するとさらに便利になります。
http://qiita.com/ShingoFukuyama/items/3ad7e24cb2d8f55b4cc5
----
<変更履歴>
・2014/05/21 このページを作成した。
・2014/05/30 実装方法を見直した。(機能は同じ)
・2014/07/31 NTEmacs で IM の切換えを行う場合、切替えが正しく機能しない場合があることの対策を行った。
・2017/05/02 以前のバージョンより機能が縮小されたが、正常に動作するように見直した。
・2018/08/08 カーソルの位置を維持するために mc/cursor-specific-vars 変数から temporary-goal-column を削除する設定を追加した。
----
#javascript(){{
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-40267130-1', 'atwiki.jp');
ga('send', 'pageview');
</script>
}}
&bold(){■ Emacs 全般で利用できる設定}
----
&bold(){【お知らせ】}
----
&bold(){<2018/08/10 追記>}
mc/cycle-forward と mc/cycle-backward にキーを設定しました。
&bold(){<2018/08/08 追記>}
カーソルの位置を維持するために mc/cursor-specific-vars 変数から temporary-goal-column を削除する設定を追加しました。
次のコミットで追加された設定を解除しているものですが、この対応による影響は分かりません。
・https://github.com/magnars/multiple-cursors.el/commit/eba10208fc38889e792dca08f4c2067936c3008a#diff-749d0080f8fe91f23f075149bf069e64
&bold(){<2017/05/02 追記>}
以前のバージョンより機能が縮小されましたが、正常に動作するように見直しました。
&bold(){【本題】}
----
multiple-cursors を違和感なく使うための設定です。次のページを参考としています。
・http://qiita.com/ongaeshi/items/3521b814aa4bf162181d
・http://qiita.com/scalper/items/b9e357b3af071c930777
・http://nishikawasasaki.hatenablog.com/entry/2012/12/31/094349
・http://tam5917.hatenablog.com/entry/20121208/1354931551
上記の設定に次の改善をしてみました。
・リージョンを選択せずに multiple-cursors を使った場合に、cua-mode と同じような動きとなるキー設定とした。また、縦移動時にカーソル位置が維持されないのを改善した。
・操作性をシンプルにするために previous でマーカーを上位に設定する機能は、全面的に不採用とした。
C-t で起動します。後は、リージョンを設定してもしなくとも、C-n、C-p、C-s を使えば、だいたいのことはできるようになっています。
入力した正規表現にマッチするリージョン内の部分をマークする機能も C-M-r に設定しています。利用してみてください。
(require 'multiple-cursors)
(require 'smartrep)
(declare-function smartrep-define-key "smartrep")
;; 入力した文字列にマッチするリージョン内の部分をマークする
(global-set-key (kbd "C-M-c") 'mc/mark-all-in-region)
;; 入力した正規表現にマッチするリージョン内の部分をマークする
(global-set-key (kbd "C-M-r") 'mc/mark-all-in-region-regexp)
(global-unset-key (kbd "C-t"))
(smartrep-define-key global-map "C-t"
'(("C-t" . 'mc/mark-next-like-this)
("C-n" . 'mc/mark-next-like-this)
("C-p" . 'mc/unmark-next-like-this)
("C-u" . 'mc/unmark-next-like-this)
("C-s" . 'mc/skip-to-next-like-this)
("C-*" . 'mc/mark-all-like-this)
("C-d" . 'mc/mark-all-like-this-dwim)
("C-i" . 'mc/insert-numbers)
("C-v" . 'mc/cycle-forward)
("M-v" . 'mc/cycle-backward)
("C-l" . 'recenter-top-bottom)
;; IM の切替えコマンドを指定する
("C-o" . 'toggle-input-method)))
;; IM の切替えコマンドを追加する
(add-to-list 'mc--default-cmds-to-run-once 'toggle-input-method)
;; カーソルの位置を維持するために mc/cursor-specific-vars 変数から
;; temporary-goal-column を削除する
(delq 'temporary-goal-column mc/cursor-specific-vars)
(defun mc/last-command-check ()
(memq last-command '(mc/mark-next-like-this
mc/unmark-next-like-this
mc/skip-to-next-like-this)))
;; 縦移動時にカーソル位置が維持されないのを対策する
(advice-add 'mc/mark-next-like-this
:around (lambda (orig-fun &rest args)
(if (mc/last-command-check)
(let ((last-command 'next-line))
(apply orig-fun args))
(apply orig-fun args))))
;; smartrepによるコマンド実行中はキー入力をエコーしない
;; http://shakenbu.org/yanagi/d/?date=20140105
(advice-add 'smartrep-map-internal
:around (lambda (orig-fun &rest args)
(let ((echo-keystrokes 0))
(apply orig-fun args))))
次のページの内容を追加設定するとさらに便利になります。
・http://qiita.com/ShingoFukuyama/items/3ad7e24cb2d8f55b4cc5
----
<変更履歴>
・2014/05/21 このページを作成した。
・2014/05/30 実装方法を見直した。(機能は同じ)
・2014/07/31 NTEmacs で IM の切換えを行う場合、切替えが正しく機能しない場合があることの対策を行った。
・2017/05/02 以前のバージョンより機能が縮小されたが、正常に動作するように見直した。
・2018/08/08 カーソルの位置を維持するために mc/cursor-specific-vars 変数から temporary-goal-column を削除する設定を追加した。
----
#javascript(){{
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-40267130-1', 'atwiki.jp');
ga('send', 'pageview');
</script>
}}