เปลี่ยนชื่อการรีแฟคเตอร์ตัวแปรโลคัล


10

มีเครื่องมือการรีแฟคเตอร์ elisp ที่สามารถเปลี่ยนชื่อตัวแปรโลคัลและฟังก์ชันอาร์กิวเมนต์ ฉันต้องการที่จะสามารถเปิด:

(defun my-func (s r)
  ...
  (use s .. r))

เป็น:

(defun my-func (string replacement)
  ...
  (use string .. replacement))

ใช้วิธีการที่รู้วิธีค้นหาตัวแปรอ้างอิง ฉันโอเคถ้าไม่ใช่ซุปเปอร์ไฮเจนิค


4
เคอร์เซอร์หลายตัวสามารถแก้ไขอินสแตนซ์ทั้งหมดของสัญลักษณ์ใน defun ปัจจุบัน
Malabarba

โปรดดูเพิ่มเติมที่ iedit
InHarmsWay


4
ไม่ใช่รหัสทั้งหมดของเรา รหัสบางอย่างเก่า
Gracjan Polak

2
ฉันมักจะ regexp แทนที่ในภูมิภาค \ bSYM \ b …
BRPocock

คำตอบ:


2

TL; DR: erefactor-rename-symbol-in-buffer

คุณกำลังมองหาฟังก์ชั่นการเปลี่ยนชื่ออัจฉริยะศัพท์ - หนึ่งที่เปลี่ยนชื่อตัวแปรตามขอบเขตของพวกเขาไม่เพียง แต่เป็นใบ้ค้นหาและแทนที่ แพคเกจนี้มีอยู่ในหลายภาษา แต่เมื่อเขียน (เมษายน 2019) มีตัวเลือกไม่มากสำหรับ Emacs Lisp erefactorแพคเกจเป็นเพียงคนเดียวที่ฉันรู้

erefactor-rename-symbol-in-bufferเป็นฟังก์ชั่นที่คุณต้องการ มันเป็นคำสั่งค้นหาและแทนที่อัจฉริยะที่จะแทนที่สัญลักษณ์ในขอบเขตปัจจุบัน (รวมถึงเอกสาร) ข้อ จำกัด ของคำสั่งนี้คือจะไม่ค้นหานอกบัฟเฟอร์ปัจจุบัน มันฉลาด แต่ไม่สมบูรณ์แบบ มันจะขอให้คุณยืนยันการเกิดแต่ละครั้งเพื่อให้แน่ใจว่าผลลัพธ์ที่ได้คือสุขาภิบาล

ฟังก์ชั่นอื่น ๆ erefactor-rename-symbol-in-packageคือการเปลี่ยนชื่อ วิธีนี้ใช้ไม่ได้ผลเหมือนกัน - ใช้ได้กับสัญลักษณ์ทั่วโลกเท่านั้น ขึ้นอยู่กับแพคเกจของคุณที่ถูกตั้งค่าอย่างถูกต้องด้วยระบบการจัดกลุ่มและคำนำหน้าและต้องการตัวแปรเพื่อให้ตรงกับคำนำหน้าของแพ็คเกจ มันไม่ค่อยแข็งแกร่ง - มันจะล้มเหลวถ้าคุณไม่ได้ตั้งค่าตามที่ฟังก์ชั่นนี้คาดไว้ ฉันคิดว่าถ้าคุณเปลี่ยนชื่อสัญลักษณ์ระดับโลกคุณอาจใช้การค้นหาและแทนที่ที่ไร้เดียงสาเนื่องจากสัญลักษณ์ทั่วโลกใน Elisp ไม่มีเนมสเปซ ประโยชน์ของการเข้าใจคำศัพท์มีน้อย คำสั่งนี้บอบบางเกินไปสำหรับการแลกเปลี่ยน projectile-replaceฉันขอแนะนำให้เพียงแค่ใช้

Erefactor มีคำสั่ง Elisp จำนวนมากที่คุณอาจพบว่ามีประโยชน์ (ไม่สมบูรณ์) รายการที่มีอยู่ในREADME

ไม่ได้อธิบายไว้ในหน้า GitHub แต่erefactorมีใน MELPA ( M-x package-install RET erefactor) หน้า MELPA สามารถพบได้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.