改造 Emacs 的删除行和复制行操作
文章目录
平时删除行都是用 C-k,当然,如果要删除光标到行尾的内容,直接用 C-k 就行了;但是如果光标不在行首时,要删除整行,则要先用 C-a 移到行首,然后再 C-k 删除整行。在删除操作不算太频繁的情况下,倒也还凑合。
可是,最近在关 task 的时候,在公司的信息系统里关闭了 task,还要在自己备份的 txt 文件里删掉这个 task。由于查找等各个方面的原因,光标不可能时时刻刻停留在行首。所以用 C-k 来删除行的时候,往往要先用一个 C-a 来把光标移动到行首。在这种删除任务相对密集的情况下,多用好多次 C-a 真是添加了太多的麻烦!
碰到这种情况,可以有两种方法:
1. C-S-backspace (kill-whole-line)
你按 C-S-backspace 键,即命令 kill-whole-line 就可以把光标所在行全部删掉,这已经是 Emacs 预定义好的了。
当然,相信大多数人会觉得这种方法比较麻烦,我也是。
2. 改造你的 C-w 和 M-w 键
把下面的代码扔到 .emacs 里:
<pre><span style="color: #999988">;; </span><span style="color: #999988">set new method of kill a whole line </span>(<span style="color: #6a5acd">defadvice</span> <span style="color: #9acd32">kill-ring-save</span> (before slickcopy activate compile)
“When called interactively with no active region, copy a single line instead." (interactive (if mark-active (list (region-beginning) (region-end)) (list (line-beginning-position) (line-beginning-position 2)))))
(defadvice kill-region (before slickcut activate compile) “When called interactively with no active region, kill a single line instead." (interactive (if mark-active (list (region-beginning) (region-end)) (list (line-beginning-position) (line-beginning-position 2)))))
<p>
这样,当你没有选中一个区域的时候,C-w 会剪切光标所在行,不管光标的位置在哪里;而用 M-w 的时候,则会复制光标所在的行,不管光标的位置在行首还是行尾还是行中间的任意位置。当你有选中区域的时候,C-w 和 M-w 的功能和 Emacs 自带的没啥两样。
</p>
<p>
是不是觉得更加方便了?
</p>
文章作者 cookwhy
上次更新 2008-10-14