如何处理键盘宏中的下一行?


12

我创建了一个键盘宏来使用以下命令将缓冲区中的行连接起来:

F3 C-n M-x join-line RET F4

它行之有效,除非行太长并开始换行,这使此宏取决于帧的宽度。next-line似乎并没有转到下一个实际行,而是到了当前行的“包装”部分。

如何解决这个问题?

Answers:


13

您有两个 三个选择:

  1. 在定义宏时使用next-logical-line代替next-line

    垂直向下移动光标ARG。相同之处在于next-line,它总是按逻辑线而不是视觉线移动,而忽略变量的值line-move-visual

  2. 设置line-move-visualnil

    (setq line-move-visual nil)

    这使next-line行为类似于next-logical-line默认情况。

  3. 通过执行以下操作打开行截断

    M-x toggle-truncate-lines RET

    在录制宏之前。


完善!谢谢。我在什么情况下,你宁愿不知道next-line目前的行为next-logical-line的,但...
塞巴斯蒂安乐Callonnec

@SébastienLeCallonnec我想所有东西都有用例……很高兴知道Emacs可以处理所有这些;)
itsjeyd 2014年

1
@SébastienLeCallonnecErm ...用自然语言书写时?在非面向行的情况下,通常按<down>C-n可使您向下一行,而不是跳过行边界。认为不是每个用户都来自记事本(根本没有换行符)... Imo,例外情况next-logical-line是预期行为,在这种情况下,我经常倾向于visual-line-mode完全禁用。并+1 @itsjeyd,根据情况获得任何一种行为都非常好。
T. Verron 2014年

2
@ T.Verron足够公平。我想我可以随时重新绑定C-nnext-logical-line。;)
SébastienLe Callonnec 2014年

0

C-aC-e都接受一个前缀参数,可以让你跳过线。例如,C-2 C-a将跳到下一行的开头,并将跳到下一行C-2 C-e的结尾。前缀参数3移动两行,依此类推。您还可以使用否定参数移至上一行。

显然,当您需要将光标留在同一列中时,这些用处并不大,但是我发现我的大多数宏仍然涉及到行的开头或结尾,因此它们非常方便。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.