原始字符串是这样的:
# chrom,name,strand,txStart
结果应如下所示:
# $1: chrom
# $2: name
# $3: strand
# $4: txStart
有没有人想过快速的方法呢?
答案 0 :(得分:6)
很多方法。
您可以使用搜索并替换在替换中使用\#
计数器。这是从零开始的,因此您需要在前面添加虚拟替换以消耗零,或者使用elisp替换表达式\,(1+ \#)
。
您可以使用键盘宏,并插入一个计数器,其中 Cx Ck TAB 或< f3> 。您可以在开始录制时通过提供前缀参数来播种该计数器。
在Emacs 24上,您可以使用自定义格式字符串对标记区域的行进行编号,其中 Cu Cx r N < / kbd>,因此您的格式字符串可以是# $%1d:
答案 1 :(得分:1)
评估以下代码并在输入行上执行foo
函数。
(require 'cl)
(defun foo ()
(interactive)
(let* ((str (buffer-substring-no-properties
(line-beginning-position) (line-end-position)))
(words-str (and (string-match "# \\(.+\\)$" str)
(match-string 1 str)))
(buf (get-buffer-create "*tmp*")))
(unless words-str
(error "Line should be '# word1,word2,...'"))
(with-current-buffer buf
(erase-buffer)
(loop with index = 1
for word in (split-string words-str ",")
do
(progn
(insert (format "# $%d: %s\n" index word))
(incf index)))
(pop-to-buffer buf))))