0

元の文字列は次のようになります。

  # chrom,name,strand,txStart

結果は次のようになります。

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

誰もそれを行うための簡単な方法を考えていますか?

4

2 に答える 2

6

たくさんの方法。

\#置換でカウンターを利用して、検索と置換を使用できます。これはゼロベースなので、先頭にダミーの置換を追加してゼロを使い切るか、\,(1+ \#)代わりに elisp 置換式を使用する必要があります。

キーボード マクロを使用して、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 に答える