如何在emacs中快速编写以下代码?从Emacs生成代码
是否有办法不是写
A
B
C
D
.
.
.
Y
Z
,然后在每一行做宏观更快? (将A更改为\ newcommand {\ cA} {\ mathcal A})
如何在emacs中快速编写以下代码?从Emacs生成代码
是否有办法不是写
A
B
C
D
.
.
.
Y
Z
,然后在每一行做宏观更快? (将A更改为\ newcommand {\ cA} {\ mathcal A})
一般来说每一次,第一次你面对一个这种问题,你会用键盘宏,就像JB已经说过的那样。
第二次,请查看Steve Yegge撰写的这篇非常有趣的文章:http://steve-yegge.blogspot.com/2006/06/shiny-and-new-emacs-22.html,其中包含与您的问题完全相同的解决方案。
为了您的方便,和我自己的照明,其实我去前进,测试它:
我将开始与
A ... A
26倍
,并做了
的Mx replace-regexp
A \\newcommand{\\c\,(string (+ ?A \#))}{\\mathcal \,(string (+ ?A \#))}
现在,这是真正的人的做法:) – 2009-01-05 17:25:36
A到Z只有26行。你会浪费更多的时间来自动生成,而不仅仅是自然地使用键盘宏,恕我直言。
+1只是在你做第一个宏时(包括移动到下一行)定义一个宏,然后执行一个重复计数为25的宏,你就完成了。 – 2009-01-05 16:54:39
我同意键盘宏将得到最快的结果。
更好玩的是一种编程方法:
(loop
for n from (string-to-char "A") to (string-to-char "Z")
for c = (char-to-string n)
do (insert (concat "\\newcommand{\\c" c "}{\\mathcal " c "}\n")))
我喜欢高清的环比我好一点,但这里有一个替代,更广义的方法:
(defun my-append (str)
"Substitute A-Z in STR and insert into current buffer.
Looks for '--HERE--' (without quotes) in string STR, substitutes the
letters A-Z in the string and then inserts the resulting string into
the current buffer."
(interactive "sInput String: ")
(let ((lcv 0)
letter newstr)
(while (< lcv 26)
(setq letter (+ ?A lcv))
(insert (replace-regexp-in-string "--HERE--" (char-to-string letter) str t t) "\n")
(setq lcv (+ lcv 1)))))
应该不会太难将两者结合起来。
或交互的方式,如果你想要做他们在同一时间
(defun somefun(inputval)
(interactive "sInputVal: ")
(insert (format "\\newcommand{\\c%s}{\\mathcal %s}" inputval inputval))
)
只是EVAL和MX somefun你想要的文字
这取决于你的背景。我只需键入M-!
和:
perl -e"print map {q(\newcommand{\c).$_.q(}{\mathcal).qq($_}\n)} A..Z
还有string-rectangle
:
C-SPC
)M-x string-rectangle
This will inser从标记开始,每行之前的那个字符串。
我没有足够的业力或任何评论,但我想改善HD的风格一点。
原来这里是:
(loop
for n from (string-to-char "A") to (string-to-char "Z")
for c = (char-to-string n)
do (insert (concat "\\newcommand{\\c" c "}{\\mathcal " c "}\n")))
首先,的Emacs Lisp有字符阅读器语法。而不是(string-to-char "X")
,你可以写?X
。然后,你可以使用printf风格format
代替char-to-string
和concat
产生最终结果:
(loop for n from ?A to ?Z
do (insert (format "\\newcommand{\\c%s}{\\mathcal %s}\n" n n)))
现在是不够简洁想也没想到M-:
提示符下键入。
我也会指出TeX也有宏,如果这确实是TeX的话。
编辑:乔Casadonte的另一位风格建议; (incf foo)
比(setq foo (+ foo 1))
更容易输入。
不完全是答案。
对于不使用emacs或vim的人,我想补充一点,您可以打开Excel并使用其自动填充功能和文本串联功能来生成此类代码。
你不应该需要这么多的数学字母。 :-) – ShreevatsaR 2009-01-05 21:27:56