如何配置Ctrl-Shift-Left / Right来选择emacs中的文本?


1

我遇到的基本问题是标记模式就像切换按钮一样。每次打电话set-mark-command"C-Space"您都会进入或退出标记模式。我可以将任何关键组合绑定到

(defun foo () "" (progn (set-mark-command) (left-word)))

但是下次我打电话给foo我的选择将被取消选中。

有没有只进入选择模式而不是切换它的功能?然后我可以更自由地选择文本,因为我正在注释一个大文本语料库,所以我真正需要它。


这很令人困惑。set-mark-command不进入或不进入标记模式(因为没有标记模式),它在光标位置设置标记。如果您调用它并移动光标,假设您已激活瞬态标记模式,则会突出显示您的临时选择。如果再次调用它,标记将位于光标的新位置,如果再次移动光标,将突出显示新选择(从新标记位置开始)。你究竟想做什么?既然您想将命令绑定到鼠标,那么您是否只能使用鼠标进行选择?
m4573r 2013年

谢谢m4。我想要做的是制作一个只在标记尚未设置的情况下才设置标记的功能,这样即使我再次调用标记也不会重置标记。现在,当我按下Ctrl-Space然后我收到一条消息mark-activated,当我再次按下Ctrl-Space我收到消息mark-deactivated。并且Ctrl-Space绑定到set-mark-command
Pushpendre 2013年

此外,我不想将我的命令绑定到鼠标,我的意思是左/右箭头键,为混乱道歉。
Pushpendre 2013年

Answers:


2

我不确定我是否正确理解了你的问题,但这里有一些想法:

1)如果shift-select-mode变量设置为t,则Shift命令移动点的所有组合将暂时激活该区域并对其进行扩展:

  • S-C-<right>:在右侧将区域扩展一个单词
  • S-<right>:在右侧将区域扩展一个字符

您可以shift-select-mode使用customize基础结构进行设置:

M-xcustomize-variableRETshift-select-modeRET

或者在你的init文件中:

(setq shift-select-mode t)

2)从您的示例代码开始,您可以编写一个命令来激活该区域并按以下方式扩展它:

(defun foo ()
  ""
  (interactive) ;; this is a command (i.e. can be interactively used)

  (when (not (region-active-p))  ;; if the region is not active...
    (push-mark (point) t t))     ;; ... set the mark and activate it

  (backward-word))               ;; move point

;; Bind the command to a key
(global-set-key (kbd "C-S-<left>") 'foo)

哦,是的!! region-active-p是秘密。谢谢。而shift-select-mode也可以完美运行。谢谢
Pushpendre 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.