移到Emacs中文件的开头

时间:2017-08-22 23:09:25

标签: emacs

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

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

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

  

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

     

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

然而Meta + <产生&#34;没有M-x标签 - 搜索或M-x标签 - 正在进行查询 - 替换&#34;消息。

我输入的快捷方式为Alt + Shift + ,,因为要获得&#34; <&#34;我必须输入&#34; Shift + ,&#34;

我做错了吗?

谢谢。

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

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

周围有什么办法吗?

3 个答案:

答案 0 :(得分:5)

这适用于更新的Emacs

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

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

答案 1 :(得分:1)

我无法将您遇到的确切行为复制为 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 –会随时闪烁/闪烁。有点烦人。

(global-set-key "^[[1;" 'my-bob)

(defun my-bob ()
  "Go to beginning of buffer, then quit"
  (interactive)
  (beginning-of-buffer)
  (keyboard-quit))

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

(global-set-key "^[[1;" 'my-bob)

(defun my-bob ()
  "Go to beginning of buffer, then delete any 5H inserted by the binding"
  (interactive)
  (beginning-of-buffer)
  (run-with-idle-timer 0.1 nil 'delete-inserted-chars "5H"))

(defun delete-inserted-chars (chars)
  (save-excursion
    (backward-char (length chars))
    (if (looking-at (regexp-quote chars))
        (delete-char (length chars)))))

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

答案 2 :(得分:0)

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

C-u 1 M-g M-g