元の文字列は次のようになります。
# chrom,name,strand,txStart
結果は次のようになります。
# $1: chrom
# $2: name
# $3: strand
# $4: txStart
誰もそれを行うための簡単な方法を考えていますか?
元の文字列は次のようになります。
# chrom,name,strand,txStart
結果は次のようになります。
# $1: chrom
# $2: name
# $3: strand
# $4: txStart
誰もそれを行うための簡単な方法を考えていますか?
たくさんの方法。
\#
置換でカウンターを利用して、検索と置換を使用できます。これはゼロベースなので、先頭にダミーの置換を追加してゼロを使い切るか、\,(1+ \#)
代わりに elisp 置換式を使用する必要があります。
キーボード マクロを使用して、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))))