在emacs实现VIM和textmate的两个特色功能。。。
2008-02-29 00:43
387 查看
不知道你有没有碰到过这样的需要,就是在用两个窗口(在emacs或者vi中的window)编写两个文件时 ,忽然觉得应该把两个窗体的内容(buffer)互换一下,方便查看,这在gvim中,使用Ctrl-w r就可以完成。
---号称无敌的emacs没有这个内置的功能~~
还有一个功能在textmate(macOS和ruby扇子的最爱) 和eclipse的编辑器中有有,就是选定一些文本行,再按alt + up或者alt+down,被选中的文本就会在buffer中逐行穿梭。这在修改程序时相当实用。
---诶,号称无敌的emacs又没有这个内置的功能~~
不过emacs之所以号称无敌就是因为我们可以很轻松实现这两个功能——在emacs lisp中。
(defun circle-windows ()
"旋转当前frame中的所有windows"
(interactive)
(let ((owindow (selected-window))
(obuffer (current-buffer))
)
(while (not (equal owindow (next-window)))
(set-window-buffer (selected-window) (window-buffer (next-window)))
(select-window (next-window)))
(set-window-buffer (selected-window) obuffer)
(select-window owindow)))
(defun move-region-around (direction beg end)
(let (real-beg
real-end
target-beg
deactivate-mark
text)
(save-excursion
(goto-char beg)
(setq real-beg (line-beginning-position))
(when (equal direction 'up)
(setq target-beg (line-beginning-position 0)))
(goto-char end)
(setq real-end (line-beginning-position 2))
(when (equal direction 'down)
(setq target-beg (copy-marker (line-beginning-position 3)))) ;must use marker
(setq text (buffer-substring-no-properties real-beg real-end))
(delete-region real-beg real-end)
(goto-char target-beg)
(insert text)
)
(set-mark (+ target-beg (- real-end real-beg 1)))
(goto-char target-beg)
(setq transient-mark-mode 'only)))
(defun move-region-up (beg end)
(interactive "r")
(move-region-around 'up beg end))
(defun move-region-down (beg end)
(interactive "r")
(move-region-around 'down beg end))
(global-set-key (quote [M-up]) (quote move-region-up))
(global-set-key (quote [M-down]) (quote move-region-down))
(global-set-key "/C-c2" 'circle-windows)
注:alt+up/down的使用和textmate是一样的,在区区的办公室PC上,还把alt+left/right也实现了,同事说过于华丽不实用,所以就不贴;
窗体互换的热键是ctrl-c 2,这并不是一个很好的设定,不过ctrl-w是区区用惯的backward-delete-word不能改~
---号称无敌的emacs没有这个内置的功能~~
还有一个功能在textmate(macOS和ruby扇子的最爱) 和eclipse的编辑器中有有,就是选定一些文本行,再按alt + up或者alt+down,被选中的文本就会在buffer中逐行穿梭。这在修改程序时相当实用。
---诶,号称无敌的emacs又没有这个内置的功能~~
不过emacs之所以号称无敌就是因为我们可以很轻松实现这两个功能——在emacs lisp中。
(defun circle-windows ()
"旋转当前frame中的所有windows"
(interactive)
(let ((owindow (selected-window))
(obuffer (current-buffer))
)
(while (not (equal owindow (next-window)))
(set-window-buffer (selected-window) (window-buffer (next-window)))
(select-window (next-window)))
(set-window-buffer (selected-window) obuffer)
(select-window owindow)))
(defun move-region-around (direction beg end)
(let (real-beg
real-end
target-beg
deactivate-mark
text)
(save-excursion
(goto-char beg)
(setq real-beg (line-beginning-position))
(when (equal direction 'up)
(setq target-beg (line-beginning-position 0)))
(goto-char end)
(setq real-end (line-beginning-position 2))
(when (equal direction 'down)
(setq target-beg (copy-marker (line-beginning-position 3)))) ;must use marker
(setq text (buffer-substring-no-properties real-beg real-end))
(delete-region real-beg real-end)
(goto-char target-beg)
(insert text)
)
(set-mark (+ target-beg (- real-end real-beg 1)))
(goto-char target-beg)
(setq transient-mark-mode 'only)))
(defun move-region-up (beg end)
(interactive "r")
(move-region-around 'up beg end))
(defun move-region-down (beg end)
(interactive "r")
(move-region-around 'down beg end))
(global-set-key (quote [M-up]) (quote move-region-up))
(global-set-key (quote [M-down]) (quote move-region-down))
(global-set-key "/C-c2" 'circle-windows)
注:alt+up/down的使用和textmate是一样的,在区区的办公室PC上,还把alt+left/right也实现了,同事说过于华丽不实用,所以就不贴;
窗体互换的热键是ctrl-c 2,这并不是一个很好的设定,不过ctrl-w是区区用惯的backward-delete-word不能改~
相关文章推荐
- 使用模板类,实现用两个栈模拟队列的功能
- 两个栈实现队列的功能
- Java中异或运算实现两个整数的交换以及其功能函数实现
- js中两个控件实现一个功能的写法
- ajax两个网页实现完美的 分页功能
- android相机、图库获取照片,并实现两个手机对图像进行放大,缩小功能
- 两个栈实现一个队列的功能
- Ubuntu下改写vim配置文件vimrc来实现显示行号,语法高亮,自动缩进功能
- ExtJs是通过Ext.ToolTip和Ext.QuickTips两个组件来实现浮动提示功能的
- 两个iframe之间实现锚点功能
- 如何在emacs中打开shell模式时实现shell命令记忆功能
- 用两个栈实现一个队列:实现出队列和入队列功能,用两个队列实现一个栈
- 实现相同功能的两个方法 优缺不言而喻
- 两个栈实现队列的功能
- 两个下拉框的联动功能实现
- c++ 连接两个字符串实现代码 实现类似strcat功能(转)
- 实现验证码功能遇到的两个问题
- 用两个栈实现一个队列的功能
- C#第十周任务之最后一项之创建一个如下的窗体,并在窗体上放置一个菜单、一个工具栏控件。菜单内容如第二个图所示。工具栏上有两个按钮,分别对应“打开文本文件”、“保存文本文件”。菜单和工具栏具体功能实现可
- emacs下实现像vim的taglist