注册 登录
LUPA开源社区 返回首页

xcwen的个人空间 http://www.lupaworld.com/?30388 [收藏] [复制] [分享] [RSS]

我的博客

emacs 高级的 复制 剪切 粘贴

已有 1299 次阅读2012-12-4 15:17 |个人分类:linux 工具使用|系统分类:IT技术|


;;


(defun my-copy-lines(num)
  (point-to-register 0)
  (beginning-of-line)
  (let ((begin-point (point)))
    (forward-line num)
    (copy-region-as-kill begin-point (point)))
  (jump-to-register 0) )
;;功能
;;
(defun opt-region-or-whole-line(opt-type   arg)
  "提供高级的复制 剪切功能
"
  (if (string= opt-type "copy")
      (setq do-region-func 'copy-region-as-kill do-line-func  'my-copy-lines  )
    (setq do-region-func 'kill-region do-line-func  'kill-whole-line  )
    )
  (if (and  mark-active (not  (= (region-beginning) (region-end) )))
      (if (string-match "\n"
            (buffer-substring-no-properties (region-beginning)(region-end)))
      (progn
        (if (string= opt-type "copy" ) (point-to-register 0))
        (setq reg-begin-pos (region-beginning))
        (setq reg-end-pos (region-end))
        (forward-char (- reg-begin-pos (point) ))
        (beginning-of-line)
        (setq  start-pos  (point))
        (forward-char (- reg-end-pos (point) ))  ;;------
        (end-of-line)
        (setq  end-pos  (point))
        (setq  end-pos  (if (= (point) (point-max) ) (point-max) (+ (point) 1 ) ))
        (funcall do-region-func start-pos end-pos )
        (if (string= opt-type "copy" ) (jump-to-register 0))
        ) ;-----------
        (funcall do-region-func (region-beginning) (region-end) ))
    (progn
      (or arg (setq arg 1))
      (message "%s line :%d"  opt-type arg)
      (funcall do-line-func arg))))

;;;###autoload
(defun copy-region-or-whole-line(&optional arg)
  "有选择区域时:
        1:复制的内容是跨行的:复制区域所在的所有行的内容。不仅仅是区域内的内容
        2:复制的内容没有跨行:复制区域中的内内容
   没有选择区域时:
        1:复制所在的行
        2:支持复制多行.  如 复制3行是  M-3 C-w  
"
  (interactive "P")
  (opt-region-or-whole-line "copy" arg)
  )

;;;###autoload
(defun kill-region-or-whole-line(&optional arg)
  "有选择区域时:
        1:剪切的内容是跨行的:剪切区域所在的所有行的内容。不仅仅是区域内的内容
        2:剪切的内容没有跨行:剪切区域中的内内容
   没有选择区域时:
        1:剪切所在的行
        2:支持剪切多行.  如 剪切3行是  M-3 C-k
"
  (interactive "P")
  (opt-region-or-whole-line "kill" arg))


(defun begin-line-and-yank ( arg)
  "如果复制的是跨行的数据由跳到行首,再yank"
  (interactive "P")
  (if (string-match "\n" (current-kill 0 )) (move-beginning-of-line 1))
  (yank ))

(global-set-key (kbd "C-y") 'begin-line-and-yank)
(global-set-key (kbd "C-k") 'kill-region-or-whole-line )
(global-set-key "\C-w" 'copy-region-or-whole-line)

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册
验证问答 换一个 验证码 换一个

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部