【问题标题】:Move to the beginning of the file in Emacs在 Emacs 中移动到文件的开头
【发布时间】:2017-08-22 23:09:25
【问题描述】:

如何在 emacs 中移动到文件的开头(即窗口文本编辑器中 Ctrl+Home 的效果)?

Mashing pageup 不会将光标移动到开头(Ctrl+Home, ofc 也不会)。

Here 所需结果的快捷方式描述为:

M-< : 移动到缓冲区的顶部(缓冲区开始)。使用数字参数 n,从顶部移动到 n/10。

M-> : 移动到缓冲区的末尾(缓冲区结束)。

但是Meta + < 产生“No M-x tags-search or M-x tags-query-replace in progress”消息。

我将快捷方式输入为Alt + Shift + ,,因为要获得“<”,我必须输入“Shift + ,

我做错了吗?

谢谢。

编辑: 事实证明,这只是在通过屏幕运行 emacs 时出现的问题,由于某种原因,键盘快捷键被误解了。 例如,C-Home 给出以下错误消息:

M-[ 1 ; 5 h (translated from M-[ 1 ; 5 H) is undefined

有什么办法吗?

【问题讨论】:

  • 我在引用中提到了相关的快捷方式,这是我所看到的标准快捷方式(例如,thisemacs 备忘单中的相同快捷方式)。正如我在帖子中解释的那样,它对我不起作用。
  • 检查键序列是否绑定到beginning-of-bufferC-h k 后跟M-<。你输入正确
  • 您是在终端内使用 Emacs,还是使用 GUI 版本的 Emacs。如果它有所作为,您不妨也提及您当前使用的操作系统和 Emacs 版本。 M-x emacs-version
  • 好吧,我可能觉得自己像个白痴,因为按照 @jenesaisquoi 的指示,我看到它确实映射到标准快捷方式,但 Ctrl+Home 现在可以工作 - 不知道为什么以前没有.我不知道如何输入 M-< : Alt+Shift+, 成功。当我尝试时,它会导致M-,。我只在终端中使用 emacs。
  • 我正在取消删除和更新问题。

标签: emacs


【解决方案1】:

这适用于较新的 Emacs

Esc followed by < #beginning of file
Esc followed by > #end of file

与 ssh 和 Tmux 结合使用效果很好

【讨论】:

    【解决方案2】:

    我无法重现您所经历的 C-HOME 的确切行为。对我来说,它转换为M-[ 1 ;,没有5H(但实际上是插入的......)。

    但是,鉴于此,我将如何设置绑定。

    我会进入*scratch* 缓冲区并输入

    (read-key-sequence "please type C-home ")C-j

    这将提示您输入键序列,C-HOME 也是如此,并且 Emacs 应该在 read-key-sequence 行之后插入以下内容:

    “^[[1;” 5H 这向我显示了键序列的实际字符串,以及神秘的5H

    使用字符串,我会在我的 .emacs 中设置绑定,如下所示:

    (global-set-key "^[[1;" 'beginning-of-buffer)
    

    这将适当地定义键绑定,除了(对我而言)它现在在缓冲区顶部插入5H。我相信5H 是屏幕的产物...


    更新添加:

    5H 让我很恼火,但据我所知,Emacs 认为我们实际上是在输入它。因此,我编写了两个导致相同行为的替代方案。

    第一个使用keyboard-quit 中断键序列 到达缓冲区的开头。这可以防止插入5H。但它有一个缺点是做一个keyboard-quit - 它会在你任何时候闪烁/叮当。有点烦人。

    (全局设置键 "^[[1;" 'my-bob) (defun my-bob () “转到缓冲区的开头,然后退出” (交互的) (缓冲区开始) (键盘退出))

    为了避免keyboard-quit,我编写了一个不同的版本,它运行一点sn-p 代码,如果5H 存在,它会删除它。它涉及更多一点,但可以完成工作。

    (全局设置键 "^[[1;" 'my-bob) (defun my-bob () “转到缓冲区的开头,然后删除绑定插入的任何 5H” (交互的) (缓冲区开始) (run-with-idle-timer 0.1 nil 'delete-inserted-chars "5H")) (defun delete-inserted-chars (chars) (保存游览 (向后字符(长度字符)) (如果(看(正则表达式-引号字符)) (删除字符(长度字符)))))

    delete-inserted-chars 可以重复用于屏幕中的其他绑定,这些绑定也恰好插入字符。

    【讨论】:

      【解决方案3】:

      你可以做的一件事转到第一行:

      C-u 1 M-g M-g
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-11
        • 1970-01-01
        • 2016-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多