我不确定您要查找哪些 Windows 键绑定,可能是剪切、复制、粘贴?这就是所谓的 CUA,不,默认情况下它不附带这些键绑定,但它们可以很容易地添加。这是指向具有 xemacs 的 CUA 模式的站点的链接。您应该能够安装 XEmacs,然后添加 CUA 模式,从而有效地创建您想要的内容。
http://sites.google.com/site/olegalexandrov/xemacs
或者,您可以自己添加它们,并在 init.el 文件中添加几行键分配。首先在带有 Cx Ce 的缓冲区中尝试它们以运行它们并确保它们工作。
我不使用 kill-ring 并且想以不同的方式标记块,所以我在文件 skm-mark-blocks.el 中编写了一些函数,我将尝试在此处插入或附加。在文件的末尾,您可以看到 global-set-key 行并将它们用作模板,以使 Windows 键按照它们在 Windows 中的工作方式工作。
-剪辑--------------------------------------
; skm-blocks.el
; 拜尔和史蒂夫·米切尔
; 2009 年 11 月 12 日
; 通过以下方式标记块:
; 用于标记第一个和第二个块结束标记的相同键
; 标记两端后,复制、剪切、移动和删除块的键
;
; 目标:
; 执行所有块命令:用左手标记、复制、移动、删除等
; 而右手用于用光标键在缓冲区中定位;
; 第一次写模仿 Vedit+ 方法(右手)::
; F9 标记第一端,
; F9 标记第二端,
; 然后 Cntl-F9(复制到光标)或 Alt-F9(移动到光标)
; Vedit+ 在块突出显示时使用删除键删除块。不会在这里工作
; 所以我们定义了一个具有相同前缀(super)的键来删除突出显示的块
;
; 可能的改进:
; 添加变量以选择在阻塞时如何移动点(或光标位置或块标记)
; 被复制等
; 也就是说,这些东西是否与块一起移动,保持在原来的位置,
; 或移动到新块的末尾等。
; 添加功能以取消标记所有块结束?
; 当前标记“第三”端取消标记先前选择的 2 个块端
; 并将第三端计为标记块的新第一端
; 除了我的姓名缩写之外,找到这种块标记的名称。
; 添加功能以使用新的组合键进行柱状块标记(矩形)。
; 添加 vars 以配置柱状块标记的工作方式、插入、覆盖等。
;
(defvar 块标记突出显示模式 1
"block-marker-highlight-mode can have 3 values:
0 = highlighing is removed following a block copy or block move
1 = w/ a copy, orig block remains highlighted
w/ a move, block is highlighted at new position
2 = w/ copy or move, block is highlighted at new position" )
(defvar 块标记结束位置模式 t
"block-marker-end-position-mode has 2 values:
t = after a block copy/move, cursor is positioned at end of
插入块
nil = after a block copy/move, cursor is positioned at beginning of inserted block
note: t is similar to the way Xemacs works by default")
(defvar block-mark1 (point-marker)) ;var 保存块的第一端
(defvar block-mark2 (point-marker)) ;var 保存块的第二端
(defvar block-ends-marked 0) ;0 如果没有标记结束,;1 或 2 表示标记的结束数
(defvar block-copiedp nil) ;t 如果块被复制
;-------- 标记块 --------------
(defun 标记块 ()
“用 skm 类型的块标记块的任一端。”
(交互的)
(if ( or (eq block-ends-marked 0 ) (eq block-ends-marked 2)) ;我们是否标记了一个块的第一个末端?
(progn
(setq block-mark1 (point-marker))
(setq block-ends-marked 1)
(clear-highlighting )
(set-mark-command nil)) ;starts highlighting
( if (eq block-ends-marked 1) ; if there is 1 block marker already, we are marking the second end.
(progn (setq block-mark2 (point-marker))
(setq block-ends-marked 2)
(highlight-region ) ))) )
;-------- 复制块到点 -----
(defun 复制块到点 ()
“将 skm 标记的块复制到当前光标位置。”
(交互的)
(让((开始位置(点)))
(if ( < block-ends-marked 2)
(message "Both ends not marked: %d end(s) marked." block-ends-marked ) ;error if there aren't 2 ends marked
(save-excursion
(set-buffer (marker-buffer block-mark1))
(copy-to-register ?c block-mark1 block-mark2))
(insert-register ?c t)
(setq block-copiedp t)
(let ((end-pos (point)))
(if (eq block-marker-highlight-mode 0) ;0 = clear all highlighting
(clear-highlighting-at-point ( marker-buffer block-mark1) block-mark1)
(if (eq block-marker-highlight-mode 2 ) ;2 = highlight at new position
(progn
(clear-highlighting-at-point ( marker-buffer block-mark1) block-mark1)
(goto-char start-pos)
(push-mark)
(goto-char end-pos)
(highlight-region))))))
(if (not block-marker-end-position-mode) ;determine where to leave cursor
(goto-char start-pos)) ))
;-------- 移动块到点 -----
(defun 移动块到点 ()
“将 skm 标记的块移动到当前光标位置。”
(交互的)
(if ( < block-ends-marked 2)
(message "Both ends not marked: %d end(s) marked." block-ends-marked )
(save-excursion
(set-buffer (marker-buffer block-mark1))
(copy-to-register ?c block-mark1 block-mark2 t))
(let ((start-pos (point)) end-pos )
(insert-register ?c t)
(setq end-pos (point))
(setq block-copiedp t)
(clear-highlighting-at-point ( marker-buffer block-mark1) block-mark1)
(if (eq block-marker-highlight-mode 0) ;0 = clear all highlighting
nil
(goto-char start-pos)
(push-mark)
(goto-char end-pos)
(highlight-region))
(if (not block-marker-end-position-mode) ;determine where to leave cursor
(goto-char start-pos)) )))
;-------- 切块 ---------------
(defun 剪切块 ()
“从文件中删除带有 skm 标记的块。”
(交互的)
(if ( < block-ends-marked 2)
(message "Both ends not marked: %d end(s) marked." block-ends-marked )
(copy-to-register ?c block-mark1 block-mark2 t)
(setq block-copiedp t)))
;------- 持续高亮一个块 -----------
(defun 高亮区域 ()
(交互的)
(let (new-extent) (setq new-extent (make-extent (mark t) (point)))
(set-extent-property new-extent 'face 'zmacs-region)
(set-extent-property new-extent 'wordstar-block t)))
;------- 清除缓冲区中突出显示的块 -----------
(defun clear-highlighting-whole-buffer (&optional buffer)
(交互的)
(let ((highlighted-list (extent-list buffer nil nil nil 'face 'zmacs-region)))
(while highlighted-list
(delete-extent (car highlighted-list))
(setq highlighted-list (cdr highlighted-list)))))
(defun clear-highlighting-at-point (&可选缓冲位置)
(交互的)
(如果(不是位置)
(setq position (point)))
(while (extent-at position buffer 'wordstar-block nil 'at )
(delete-extent (extent-at position buffer 'wordstar-block nil 'at )) ))
;------------按键分配 ------
;--- 模拟 VEdit+ 方法的键分配
;--- 验证我们的算法是否正确
;--- 一旦不需要它们就注释掉
(global-set-key [ f9 ] '标记块)
(global-set-key [ (control f9) ] '复制块到点)
(global-set-key [ (meta f9) ] '移动块到点)
(global-set-key [ (control meta f9) ] 'cut-block) ;不在 Vedit 中,但用于测试
(global-set-key [ (control shift f9) ] 'clear-highlighting) ;不在 Vedit 中,但用于测试
;------- 左手使用的按键分配
;--- 仅使用超级键(左 windows-logo 键)移动
; 不适用于 Windows 中的 xemacs,因为 Windows 抢占了超级键
; 必须试验才能找到适用于 Windows 的 xemacs 的东西......
(global-set-key [ (super space) ] '标记块)
(global-set-key [ (super v) ] 'copy-block-to-point) ;助记符:V 为插入,驱动一个V(楔形)in
(global-set-key [ (super m) ] 'move-block-to-point) ;mnemonic: M for move
(global-set-key [ (super c) ] 'cut-block) ;助记符:C for Cut
(global-set-key [ (super n) ] 'clear-highlighting-at-point)
;助记符:认为 N 表示不突出显示
--snip----------------- 希望这可以帮助您了解它是多么容易。在看到代码如何进入此消息后,很明显我需要一些练习将代码放入此编辑器(笑)。