0

原始字符串是这样的:

  # chrom,name,strand,txStart

结果应如下所示:

 # $1: chrom
 # $2: name
 # $3: strand
 # $4: txStart

有没有人知道一个快速的方法来做到这一点?

4

2 回答 2

6

很多方法。

您可以使用替换中的\#计数器进行搜索和替换。那是从零开始的,所以你要么需要在前面添加一个虚拟替换来用完零,要么使用 elisp 替换表达式\,(1+ \#)

C-xC-kTAB您可以使用键盘宏,并使用或插入计数器<f3>。您可以在开始录制时通过提供前缀参数来为该计数器播种。

在 Emacs 24 上,您可以使用自定义格式字符串为标记区域的行编号C-uC-xrN,因此您的格式字符串可以是# $%1d:

于 2012-10-11T04:41:29.643 回答
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))))
于 2012-10-11T04:22:50.113 回答