Posted on 14-10-2008
Filed Under (技术) by waterlin

平时删除行都是用 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 里:

;; set new method of kill a whole line (defadvice kill-ring-save (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)))))

这样,当你没有选中一个区域的时候,C-w 会剪切光标所在行,不管光标的位置在哪里;而用 M-w 的时候,则会复制光标所在的行,不管光标的位置在行首还是行尾还是行中间的任意位置。当你有选中区域的时候,C-w 和 M-w 的功能和 Emacs 自带的没啥两样。

是不是觉得更加方便了?

© 2008 – 2012, 浏忙大爆炸. All rights reserved.
除非注明,浏忙大爆炸文章均为原创,转载请以链接形式标明本文地址。

Post a Comment
Name:
Email:
Website:
Comments: