Belirli bir dizeyi aşamalı olarak değiştirme


12

Diyelim ki aşağıdaki gibi bir metin var:

AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)

Şimdi bunun nngibi numaralarla değiştirmek istiyorum

AC (0)
Ac (1)
Ac (2)
Ac (3)
AC (4)
AC (5)
AC (6)
AC (7)
AC (8)
AC (9)
Ac (10)

Bunu başardım M-x replace-regexp nn RET \# RET.

Sorular:

  1. Ben başlamak yedek numarasını başlamak istiyorum 1ziyade dan 0. Daha doğrusu belirli bir sayı söz hakkından başlar 25. Yukarıdaki komutu nasıl değiştirmeliyim?
  2. Nasıl değiştirilir? nnGibi hanesiyle 001, 002.... 998, 999vb - Ben sıfır dolgulu demek

İstediğiniz bu değil, ancak bunu yapmanın başka bir yolu da bir kayıtla birlikte bir makro kullanmaktır.
Caterpillar

Yanıtlar:


12

Genel teknik

Yeni dizeniz rastgele lisp kodu içerebilir. Gönderen replace-regexp belgelerine :

Etkileşimli aramalarda, değiştirilen metin '\', ardından değiştirilen metnin bir parçası olarak kullanılan bir Lisp ifadesi içerebilir. Bu ifadenin içinde '\ &' tüm eşleşmeyi gösteren bir dize, '\ N' kısmi eşleme, '# &' ve '#N' dizeden sayıya ilgili sayısal değerleri ve '# 'replace-count' için kendisi, şimdiye kadar değiştirilenlerin sayısı sıfırdan başlayarak gerçekleşti.

Bu tekniği çeşitli şekillerde kullanabiliriz.

Den başlayarak 1

Yapmak istediğimiz Wat nn, replace-countkullandığınızdan bir tane ile değiştirmektir \#.

#'replace-regexpBağımsız değişkenle arayın \,(1+ \#):

C-M-% nn \,(1+ \#)ile nn yerini alacak 1, sonra 2, 3vs.

Buradan başlayarak 25

Bunu yalnızca bir tane değil, (örneğin) 25 de ekleyerek değiştirebilirsiniz:

C-M-% nn \,(+ 25 \#)

Baştaki sıfırlar

Ya da formatbaştaki sıfırları eklemek için kullanabiliriz . Bu yerini alacak nnolan 000, 001, 002başlamak yukarıdaki, vb diğer lisp kodu birleştirebilir 001, 025veya istediğiniz her neyse.

C-M-% nn \,(format "$03d" \#)


5

Ayrıca kullanabilirsiniz cua-mode.

Dikdörtgen bölgeyi (tümü nn) seçin ve ardından M-x cua-rectangle-mark-mode.

Sonra M-nvarsayılan değerleri kabul edin.


Keşke bunu da bir cevap olarak kabul edebilsem
Prasanna
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.