Emacs:上下文边距设置或填充文本以缩小范围列?

时间:2014-09-28 13:15:38

标签: emacs clojure elisp

我希望在缓冲区中快速生成文本,如下所示:

(fact                    "This is some text which will hang out
                          only on this part of the screen, ideally
                          automatically flowing to the correct
                          margins as I type."
  (+ 1 1) => 2
  ;; more Clojure tests...
  )

我有一个Elisp键绑定,可以快速吐出一个起始模板并将光标放在正确的位置:

(global-set-key "\C-of" (lambda ()
                           (interactive)
                           (insert "(fact                               \"\"\n\n  )")
                           (backward-char 6)))

现在,当我输入字符串部分("This is some text...")时,如果我能让Emacs自动将文本流向"正确"那么它真棒!利润率。是否有某种方法可以根据您键入的位置调整边距和环绕行为?至少,你第一次在那里打字?

除非对于给定的文本选择,我如何才能使用fill-region,而是使用所需的左右边距?目前fill-region会删除fact"This is....之间的所有空格,其余部分则为左对齐。

2 个答案:

答案 0 :(得分:1)

我现在可能有一种更简单的方法,但我会这样做:

  1. 在临时缓冲区中配置文本块,方法如下:

    一个。将fill-column设置为所需文本块的宽度。

    湾将文本放在行的开头,即不缩进。

    ℃。填写文字。

    d。使用indent-rigidly将文本缩进到所需的列,第一行除外。

  2. 插入目标缓冲区(fact,然后插入文本块第一行所需的缩进。然后插入临时缓冲区的内容。然后插入您需要的任何其他文本/代码。

  3. IOW,我会将填充文本块与缩进它分开。

答案 1 :(得分:0)

以下似乎对我的另类(较弱)案例起作用:

;; Set up Midje fact with mark inserted at beginning of comment text
;; (refill as needed in appropriate columns, using C-oF).
(global-set-key "\C-of" (lambda ()
              (interactive)
              (insert "(fact                               \"\"\n\n  )")
              (backward-char 6)
              (set-mark (point))))
;; Perform the refill operation to properly reformat the text string
;; in a Midje fact, started with C-of:
(global-set-key "\C-oF" (lambda ()
              (interactive)
              (set-left-margin (mark) (point) 37)
              (fill-region (mark) (point))))

我希望我在使用它的过程中不得不调整它,但它非常接近。尽管如此,如果我在字符串中键入内容,我们可以自动了解如何自动完成此操作。