原始字符串是这样的:
# chrom,name,strand,txStart
结果应如下所示:
# $1: chrom
# $2: name
# $3: strand
# $4: txStart
有没有人知道一个快速的方法来做到这一点?
原始字符串是这样的:
# chrom,name,strand,txStart
结果应如下所示:
# $1: chrom
# $2: name
# $3: strand
# $4: txStart
有没有人知道一个快速的方法来做到这一点?
很多方法。
您可以使用替换中的\#
计数器进行搜索和替换。那是从零开始的,所以你要么需要在前面添加一个虚拟替换来用完零,要么使用 elisp 替换表达式\,(1+ \#)
。
C-xC-kTAB您可以使用键盘宏,并使用或插入计数器<f3>。您可以在开始录制时通过提供前缀参数来为该计数器播种。
在 Emacs 24 上,您可以使用自定义格式字符串为标记区域的行编号C-uC-xrN,因此您的格式字符串可以是# $%1d:
评估以下代码并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))))