[emacs] CUA的矩形块操作很给力啊

巴蛮子 posted @ 2011年1月04日 01:51 in Emacs with tags emacs , 6467 阅读
原始矩形块模式

emacs以C-x r开头的命令来进行矩形操作。先用C-space或者C-@设一个mark,移动光标到另一点,用以下命令进行列操作:

C-x r k 剪切一个矩形块
C-x r y 粘贴一个矩形块
C-x r o 插入一个矩形块
C-x r c 清除一个矩形块(使其变成空白)
C-x r t 在选定区域的所有列前插入样的字符

 

cua-mode支持的可视化块模式

除了emacs本身支持的列模式外,emacs还可以通过cua-mode支持一种可视化的列模式。在cua-mode下,按[C-return]会进入cua rectangle模式。在这个模式下可以通过鼠标点击确认起点,然后通过光标键来选中一个rect范围,这个rect会用另外的颜色显示出来。

之后我们 就可以很方便地对这个rect进行操作。比如[M-up],[M-down],[M-left],[M-right]可以移动这个rect,[C- return]可以取消这个rect,[C-space]可以退出cua-rect模式并激活普通模式下的选择。

cua-mode下可以用以下命令进行列操作:

直接输入字符: 在每行前(或后)都插入这个字符
[M-a]: 将rect中的文字左对齐
[M-b]: 用空格(tabs或者spaces)替换所有rect中的字符
[M-c]: 去掉所有行左侧的空格
[M-f]: 用单个字符替换所有rect中的字符(提示输入一个字符)
[M-i]: 对每行中第一个找到的数字进行加1操作(自动把0x开头的当作十六进制数字)
[M-k]: 剪切rect
[M-l]: 把rect中的内容全部转换为小写
[M-m]: 拷贝rect
[M-n]: 用一串自增的数字替换rect中的每一行(这个功能可以用来给每行编号)
[M-o]: rect的内容右移,选中的rect用空格填充
[M-r]: 用字符串替换符满足正则表达式的字符串
[M-R]: 上下反转<br />[M-s]: 把rect中的每一行替换为一个字符串(提示输入)
[M-t]: 把rect整个替换为一个字符串(提示输入)<br />
[M-u]: 把rect中的内容全部转换为大写<br />
[M-|]: 对rect执行一个shell命令<br /></span>
 
还有一些其他的命令可以直接看cua-base.el(emacs22之后已经自带。另无意中发现一个阅读package说明的方法: M-x finder-commentary)。
Emacs用户手册里面对CUA介绍得比较简单,可到原网站阅读说明 http://www.cua.dk/cua.html
 
用鼠标来选择矩形块
看了一下cua-rect里面的代码,发现对鼠标有一些支持,但不是太好用(得先用C-return激活块模式,然后用mouse-1确定起点,mouse-3确定终点并拷贝)
 
简单地尝试了一下,改成如下方式: 第一次点击确定起点,第二次点击确定终点。为了方便,使用了hyper这个modifier key。
 
    (require 'cua-rect)
    (defun hkb-mouse-mark-cua-rectangle (event)
      (interactive "e")
      (if (not cua--rectangle)
          (cua-mouse-set-rectangle-mark event)
        (cua-mouse-resize-rectangle event)))
    (global-set-key (kbd "<H-mouse-1>") 'hkb-mouse-mark-cua-rectangle)
    (define-key cua--rectangle-keymap (kbd "<H-mouse-1>") 'hkb-mouse-mark-cua-rectangle)
 
Avatar_small
巴蛮子 说:
2011年2月08日 10:07

从vimeo.com 转了一个cua rectangle的视频到土豆网

http://www.tudou.com/programs/view/He4etr8Q5Ag/


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter