【问题标题】:How do you move the pointer up or down multiple lines with Emacs?如何使用 Emacs 将指针向上或向下移动多行?
【发布时间】:2010-04-17 06:57:33
【问题描述】:

我可以在 Emacs 中使用箭头键将指针上下移动一行,所以我想重新定义 C-n 和 C-p 一次上下移动 5 行。

我刚刚开始学习如何使用 Emacs,而 elisp 对我来说非常陌生。我尝试使用GNU Emacs lisp reference,但找不到如何将击键绑定到多个命令。

这是我目前所拥有的(专注于向上移动的定义):

(global-set-key "\C-p"  '(loop for i in '(1 2 3 4 5) do ('previous-line))) 

但是,当我点击 C-p 时,这会显示一条错误消息,“错误类型参数。”

有什么建议吗?

谢谢!

【问题讨论】:

    标签: emacs elisp binding keystrokes


    【解决方案1】:

    那些函数(我相信 next-lineprevious-line)接受 C-u 的可选参数,所以我认为 (next-line 5) 会做你想做的事。

    编辑:所以我只是尝试过,那就是

    (global-set-key (kbd "C-n")
        (lambda () (interactive) (next-line 5)))
    

    C-p 和previous-line 也是如此。

    (用手机键盘在文本区域写代码不简单^^)

    【讨论】:

    • 是的!谢谢你。我最终使用了 (next-line -5) ,因为在手册中它说“如果您正在考虑在 Lisp 程序中使用它,请考虑使用带有否定参数的 `forward-line'。它通常更容易使用更可靠(不依赖于目标列等)。”
    【解决方案2】:

    根据我的 emacs 配置中的警告以及 Peter Ajtai 的评论,我建议使用我的 init.el 中的 forward-line 的版本

    (global-set-key (kbd "C-n")
        (lambda () (interactive) (forward-line  5)))
    (global-set-key (kbd "C-p")
        (lambda () (interactive) (forward-line -5)))
    

    当然还有forward-char,作用相同,只是方向不同。

    唯一缺少的是complex-forward,它以复数作为参数,可用于在所有 4 个方向上导航:P

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      相关资源
      最近更新 更多