【问题标题】:Can I use the emacs keyboard macro counter as a command prefix?我可以使用 emacs 键盘宏计数器作为命令前缀吗?
【发布时间】:2012-04-02 23:25:01
【问题描述】:

我正在使用 emacs 进行一个项目,我想使用一个键盘宏,每次迭代都会略有变化。当我在手册中看到keyboard macro counter 时,这看起来正是我所需要的——但据我所知,它在当前缓冲区中插入了一个递增的数字。我想使用递增的数字作为另一个命令的前缀。

例如,不是在第三次执行宏时将3 插入缓冲区,而是希望能够执行 C-u 3 M-x my-command kbd>,然后是 C-u 4 M-x my-command 在下一次迭代中。

有没有办法创建一个键盘宏来做到这一点?我的具体任务是将同一个缓冲区中的两个文本块“压缩”在一起,但即使有另一种方法来做这件事,最好知道一般问题的答案。


回应@phils 的评论:

我正在尝试做的一个例子是转向

<<<<< mine
foo
bar
wimble
gleet
=====
gimble
gyre
wade
foobarbaz
>>>>> r345

进入

<<<<< mine
foo
gimble
bar
gyre
wimble
wade
gleet
foobarbaz
=====
>>>>> r345

但同样,我更感兴趣的是“有这样的设施吗?”而不是“我该如何解决这个特定问题”?

【问题讨论】:

  • 你能给我们一个“将两个文本块压缩到同一个缓冲区中”的前后例子吗?

标签: emacs elisp


【解决方案1】:

所以从实验上看(虽然很简短;YMMV),设置prefix-arg 似乎是有效的。所以你可以有一个这样的宏(在每一行插入越来越多的字母q)。

C-x b      ;; switch-to-buffer
*counter*  ;; self-insert-command * 9
RET        ;; indent-new-comment-line
<f3>       ;; kmacro-start-macro-or-insert-counter
C-SPC      ;; set-mark-command
C-a        ;; my-beginning-of-line-or-indentation
C-w        ;; kill-region
C-x b      ;; switch-to-buffer
RET        ;; indent-new-comment-line
M-:        ;; eval-expression
(setq      ;; self-insert-command * 5
SPC        ;; self-insert-command
prefix-arg ;; self-insert-command * 10
SPC        ;; self-insert-command
C-y        ;; yank
)          ;; self-insert-command
RET        ;; indent-new-comment-line
q          ;; self-insert-command
C-e        ;; move-end-of-line
RET        ;; indent-new-comment-line

【讨论】:

    【解决方案2】:

    AFAIK,您只能将宏计数器插入缓冲区。 当你开始有大宏时,最好为它编写一个函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-19
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多