【问题标题】:How to enter minibuffer for editing in Emacs?如何在 Emacs 中进入 minibuffer 进行编辑?
【发布时间】:2014-08-21 05:45:06
【问题描述】:

运行某些命令时,迷你缓冲区会询问输入字符串(例如 C-M-s)。

有时我需要将复杂的字符串输入到 minibuffer 中。因此,我需要使用 C-f、C-b、C-a 等移动命令。但是,当我在命令 C-M-s 中输入字符串时,这些命令不起作用。

那么,什么是通用命令/键绑定让我在迷你缓冲区中聚焦以扩展移动支持?


编辑:

我刚刚发现 M-e 可以用于搜索命令。但我不确定这个命令是否是“从缓冲区切换到迷你缓冲区以进行专用编辑”的通用命令

【问题讨论】:

  • isearch-edit-string 是一种特殊的动物。当使用正常的 isearch 向前或向后时,用户实际上并不在 mini-buffer 中——它只是看起来那样。 isearch-edit-string 将焦点直接放在迷你缓冲区内进行编辑。你可能在想read-sring之类的东西。
  • @lawlist,感谢您的提示。让我玩一会儿代码
  • Isearch 几乎是唯一一种“在 minibuffer 中但不是真的”的东西。可能还有其他的,但这不是标准化的,所以没有一般​​的“真正去迷你缓冲区”。每个案例都应该提供相当于 Isearch 的M-e

标签: emacs


【解决方案1】:
  1. 是的,如果您想编辑搜索字符串,M-e 就是您要查找的内容。它允许您对其执行一般编辑。当您准备好搜索已编辑的字符串时,只需再次点击C-sC-M-s

  2. 但是,M-e 仅用于编辑搜索字符串。如果您想中断 isearch 以在某处进行一些编辑,则只需结束 isearch 以执行此操作,然后在完成编辑后恢复 isearch,再次使用 C-sC-M-s

【讨论】:

    【解决方案2】:

    我很高兴使用这些,并将它们绑定到我的 Mac 键盘上的功能按钮和箭头键。我经常阻止和复制文本并移入和移出迷你缓冲区。以下示例释放了 minibuffer-local-mapminibuffer-local-completion-map 中的一些键映射分配(即,通过将它们设置为 nil),以便我可以使用自己的自定义键盘快捷键进入和退出迷你缓冲区。

    在迷你缓冲区中,您可以使用C-h k,然后键入键盘快捷键以查看绑定的功能。

    当我进入和退出迷你缓冲区窗口时,我使用了一个自定义函数来更改模式行颜色、迷你缓冲区提示颜色以及迷你缓冲区内的默认颜色,但这超出了你的问题的范围。 [我只是在以下四个函数的末尾添加了我的迷你缓冲区颜色更改函数的名称——即在 if / then 语句之后。]

    (defun lawlist-windmove-right ()
    (interactive)
      (if (window-in-direction 'right)
        (select-window (window-in-direction 'right))
        (other-window 1)))
    
    (defun lawlist-windmove-left ()
    (interactive)
      (if (window-in-direction 'left)
        (select-window (window-in-direction 'left))
        (other-window -1)))
    
    (defun lawlist-windmove-up ()
    (interactive)
      (if (window-in-direction 'above)
        (select-window (window-in-direction 'above))
        (other-window 1)))
    
    (defun lawlist-windmove-down ()
    (interactive)
      (if (window-in-direction 'below)
        (select-window (window-in-direction 'below))
        (other-window -1)))
    
    (define-key minibuffer-local-map [prior] nil)
    (define-key minibuffer-local-map [next] nil)
    (define-key minibuffer-local-map [home] nil)
    (define-key minibuffer-local-map [end] nil)
    (define-key minibuffer-local-completion-map [prior] nil)
    (define-key minibuffer-local-completion-map [next] nil)
    (define-key minibuffer-local-completion-map [home] nil)
    (define-key minibuffer-local-completion-map [end] nil) 
    
    (global-set-key (kbd "<end>") 'lawlist-windmove-right)
    
    (global-set-key (kbd "<home>") 'lawlist-windmove-left)
    
    (global-set-key (kbd "<prior>") 'lawlist-windmove-up)
    
    (global-set-key (kbd "<next>") 'lawlist-windmove-down)
    

    【讨论】:

    • 感谢您的代码。很高兴学习一种在窗口之间快速切换的方法,包括但不限于迷你缓冲区。
    猜你喜欢
    • 1970-01-01
    • 2014-04-03
    • 2012-01-11
    • 2010-12-19
    • 2015-09-10
    • 2014-03-14
    • 1970-01-01
    • 2011-10-21
    • 2012-07-25
    相关资源
    最近更新 更多