-1

変数が見つかるたびにtを返す関数を作成する方法(ループを許可するため):

(setq x 1)
(while ("backward search for regexp "%x" equals true") ;where x is variable
  (setq x (+ x 1))
(insert (concat "%" (int-to-string x)))
)

例:%1(x = 1)が見つかった場合、xに1が加算されます。%2(x = 2)が見つかった場合、xに1が加算されます。後方検索で%3が見つからず、whileループが停止し、 "%" + "3"が挿入されたとします(%3)。

後方検索でtrueを返す方法がわかりません。

4

2 に答える 2

1

search-backwardオプションの 3 番目の引数を取り、非 nil の場合、検索が失敗した場合に nil を返すように指示します。

(setq x 1)
(while (search-backward (format "%%%d" x) nil t)
  (setq x (1+ x)))
(insert (format "%%%d" x))

ここで、あなたが本当にやりたいことを理解しようとすると (ポイントに%d前に表示されない最初の文字列を挿入するなど)、save-excursionポイントの移動を避けるために検索をフォーム内にラップすることをお勧めします。

(setq x 1)
(while (save-excursion (search-backward (format "%%%d" x) nil t))
  (setq x (1+ x)))
(insert (format "%%%d" x))
于 2012-11-06T13:38:07.433 に答える
1

フランチェスコの助けを借りて

(defun Navi-insert-question ()
  (interactive)
  (setq x 1)
  (while (save-excursion 
  (search-backward (concat comment-start " Question: " (int-to-string x)) nil t))
  (setq x (+ 1 x)))
  (insert (concat comment-start " Question: " (int-to-string x))))

R に挿入できるようになりました。たとえば、"# Question: 1" です。バッファの上にある場合は、"# Question: 2" が挿入されます。

于 2012-11-06T14:14:21.497 に答える