「multiple-cursors を使うための設定」の編集履歴(バックアップ)一覧はこちら

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>
 }}