ใช้ Notepad ++ เพื่อเปลี่ยน under_score_case เป็น CamelCase หรือไม่


19

ฉันสามารถเขียนนิพจน์ปกติใน NP ++ under_score_caseที่จะหา ฉันสามารถใช้ TextFX ใน NP ++ เพื่อเปลี่ยนเคสเป็นตัวพิมพ์ใหญ่และตัวพิมพ์เล็กโดยการไฮไลต์และเลือก

ฉันจะใช้การค้นหา / แทนที่ของ NP ++ หรือการค้นหาและแทนที่ของ TextFX เพื่อต่อรวมเข้าด้วยกันและแปลงunder_score_caseเป็นcamelCaseอย่างไร

ฉันต้องการเรียนรู้วิธีการทำใน NP ++ ไม่ใช้สคริปต์

ตัวอย่างอินพุต:

this is_a_line
some more_data_over_here
whoop de_do_da

ผลลัพธ์ที่ต้องการ:

this isALine
some moreDataOverHere
whoop deDoDa

regex _([a-z])เพื่อให้ตรงกับขีดจะเป็น ทดแทนที่ฉันคิดว่ามีอยู่ _\toupper\1แต่ฉันไม่สามารถหาสิ่งที่ต้องการคือ

คำตอบ:


6

ฉันมีทางออกที่ยาวและซับซ้อน แต่จะใช้งานใน Notepad ++ มันต้องมีการใช้ regex การค้นหาปกติและแทนที่เป็นทางเลือกเช่นเดียวกับ TextFX

  1. Zเพิ่มตัวละครตัวยึดที่ด้านหน้าของแต่ละคำที่ฉันเลือก มันอาจไม่จำเป็นต้องเป็นตัวอักษร แต่มันง่ายกว่าสำหรับขั้นตอนสุดท้าย ใช้ regex ค้นหาและแทนที่ด้วย\<([^ ]*)\>Z\1
  2. แทนที่ช่องว่างที่มีอยู่ด้วยลำดับตัวยึดที่ไม่ซ้ำกัน ฉันเลือก # space # สิ่งนี้สามารถทำได้ด้วย regex แต่ฉันชอบใช้ปกติหรือขยาย
  3. แทนที่ขีดล่างด้วยช่องว่าง หากมีขีดล่างใด ๆ ที่ไม่ควรเปลี่ยนก็อาจจำเป็นต้องมี regex ที่กำหนดเอง ฉันค้นหาและเปลี่ยนใหม่ได้ทันที
  4. เลือกข้อความทั้งหมดและจากเมนู TextFX TextFX Characters -> Proper Caseให้เลือก
  5. ตอนนี้เราต้องย้อนกลับ 3 ขั้นตอนแรก ค้นหาช่องว่างและแทนที่ด้วยไม่มีอะไร จากนั้นค้นหาลำดับตัวยึดพื้นที่ของคุณแล้วแทนที่ด้วยช่องว่าง สุดท้ายใช้ regex ค้นหาและแทนที่ด้วย\<Z([^ ]*)\>\1

สลับซับซ้อน แต่ใช้ได้ผล
Freiheit

ความล้มเหลวของ Notepad ++ กับ regex ทำให้ฉันต้องหาวิธีแก้ปัญหาแบบนี้มาก่อนโดยเฉพาะเมื่อฉันต้องการค้นหาและแทนที่ข้ามบรรทัดหรือใช้อักขระพิเศษเช่นแท็บ
MBraedley

ในขณะเดียวกันโครงการนำไปสู่ ​​NP ++ (มิสเตอร์โฮอย่างที่ฉันจำได้) ทำให้เกิดเสียงใด ๆ เกี่ยวกับการแนะนำการสนับสนุนการเปลี่ยนเหมือนเป็นกลุ่มหรือไม่? มีปลั๊กอินใดบ้างที่สนับสนุน NP ++ และ TextFX นั้นทรงพลังจริง ๆ พวกเขาต้องการเพียงเพิ่มอีกเล็กน้อยเพื่อรวมเข้าด้วยกัน
Freiheit

ฉันไม่ได้ติดตามโครงการ แต่ฉันคิดว่าเขาถูก จำกัด โดยการใช้ Scintilla
MBraedley

1
คำเตือน: หากตัวอักษรตัวที่สองและที่ตามมาในแต่ละคำเป็นอักษรตัวพิมพ์ใหญ่ก็จะทำพิมพ์เล็กเช่นจะกลายเป็นALL_CAPS allCaps
Gnubie

15

การค้นหา / แทนที่อย่างง่ายจะทำใน NP ++:

หา: [_]{1,1}([a-z])

แทนที่: \U$1

คุณต้องเลือกปุ่มตัวเลือก 'นิพจน์ปกติ' ในแผงแทนที่เพื่อให้สามารถใช้งานได้


5
หรือเพียงแค่_(.)เป็นสตริงการค้นหา
Dominic Comtois

ถ้าคุณต้องการ PascalCase (ในขั้นตอนเดียว) คุณสามารถใช้ ค้นหา: (?:^|_)([a-z]) แทนที่: \U$1$2
Rubenisme

6

ฉันมักจะใช้เป็นกลุ่มตัวเองเป็นบรรณาธิการ นิพจน์ทั่วไปต่อไปนี้บรรลุสิ่งที่คุณพยายามทำในกลุ่ม:

%s/_\([a-zA-Z]\)/\u\1/g

จากสิ่งที่ฉันสามารถบอกได้ ( ฉันหลงกลด้วย NP ++ สักหน่อย ) Notepad ++ ไม่เข้าใจมาโครตัวพิมพ์ใหญ่\uใน Perl Regexp คุณอาจไม่สามารถทำได้ด้วย Notepad ++ หวังว่าใครบางคนจะพิสูจน์ฉันผิดและทำให้วันของคุณ


ใช่ฉันติดอยู่ในสภาพแวดล้อม Windows การคัดลอกข้อมูลไปยังเครื่อง * nix หรือ OS X ใช้งานได้ แต่แทบจะไม่ได้รับความสง่างาม ฉันยังสามารถฝึกเพื่อนร่วมทีมคนอื่น ๆ ใน NP ++
Freiheit

ฉันคิดว่าการแสดงออกที่เหมือนกันทำงานใน eMacs ความรู้ eMac ของฉันไม่ชัดเจน . .
surfasb

@ Freiheit มีกลุ่มสำหรับ windows; แม้ว่ามันจะไม่ช่วยให้เพื่อนร่วมทีมข้ามไปที่ NP ++
Mole เมทริกซ์

ดูเหมือนว่านี่จะทำงานได้ดีใน Notepad ++ รุ่นล่าสุด (ฉันใช้ 6.7.7)
levant pied

3

คุณสามารถทำได้ด้วยขั้นตอนเดียวใน notepad ++ ซึ่งอาจมีประโยชน์มากกว่า:

Find: ([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)\.php
Replace: $1\U$2\L$3\U$4\L$5\U$6\L$7

ปัญหาเดียวของสิ่งนี้คือคุณต้องทราบเวลาสูงสุดที่คะแนนต่ำกว่าสามารถแสดงได้และการสิ้นสุดของสตริง ในตัวอย่างข้างต้นฉันกำลังเปลี่ยนชื่อไฟล์ php เป็น camelCase โดยรู้ว่าคะแนนต่ำกว่าไม่สามารถแสดงได้มากกว่า 3 ครั้งน้อยกว่าไม่มีปัญหา


2

รายการโปรดส่วนตัวของฉันคือ sed มันเร็วฟ้าผ่า:

> echo make_me_camel_case_please | sed -e 's / (_ [az]) / \ U \ 1 / g' -e 's / _ // g'

makeMeCamelCasePlease

คุณสามารถใช้ตัวเลือก -i เพื่อทำการแทนที่ไฟล์ที่คุณกำลังแก้ไขและ N ++ ควรรับการเปลี่ยนแปลง

นี่จะเป็นการลบขีดล่างทั้งหมดเช่นเดียวกับวิธีแก้ไขปัญหาข้างต้น ที่สามารถแก้ไขได้หากเป็นปัญหา


2
  • แปลงกรณีงูฉันสามารถทำได้โดยใช้ Notepad ++ ทำตามขั้นตอนด้านล่าง

  • แปลงอินพุตเคสงูเป็นตัวพิมพ์เล็กทั้งหมดหากไม่ได้เป็นตัวพิมพ์เล็ก

  • เปิดแบบฟอร์มแทนที่ ( ค้นหา -> แทนที่หรือCtrl + H )
  • เลือกปุ่มตัวเลือกนิพจน์ปกติ
  • มองหา_([a-z])หรือ_(.)
  • แทนที่ด้วย\u\1อินพุต

0

ฉันทำงานกับ Notepad ++ 7.3 ฉันมีปัญหาเดียวกันและฉันทำต่อไปนี้:

  1. Ctrl+ H(แสดงฟอร์มค้นหา)
  2. เลือกปุ่มตัวเลือกนิพจน์ปกติ
  3. ค้นหา« _ ([az] +) »
  4. แทนที่ด้วย« \ u \ 1 »

และได้ผล!


ดังนั้นนี่จะเปลี่ยนตัวอักษรทั้งหมดให้เป็นตัวพิมพ์เล็กแล้วพิมพ์ตัวอักษรที่เป็นไปตามขีดล่างใช่ไหม? ดังนั้นWe use the bean_counter variable, which was Fred's ideaจะเปลี่ยนเป็นwe use the beanCounter variable, which was fred's idea(ลดตัวอักษรที่พิมพ์ใหญ่แล้ว) หรือไม่ ดูเหมือนว่าไม่น่าพอใจ
สกอตต์

ขอบคุณสกอตต์ฉันไม่เข้าใจความคิดทั้งหมดดังนั้นฉันหวังว่าตอนนี้จะใช้ได้
Francisco M

ใช่ดีกว่า คุณอาจทำให้มันง่ายขึ้นเล็กน้อย: แค่มองหา« _ ([az]) » (โดยไม่ต้อง+) น่าเสียดายที่ในตอนนี้สิ่งนี้เทียบเท่ากับคำตอบก่อนหน้าหลายคำ
สกอตต์

-1

ฉันพบปัญหานี้และพบทางออกที่ยอดเยี่ยม

  1. แทนที่ขีดล่างทั้งหมด ("_") ด้วยช่องว่าง ("")

  2. เปลี่ยนอักษรตัวแรกของแต่ละคำเป็นตัวพิมพ์ใหญ่

  3. แทนที่ช่องว่างทั้งหมด ("") ด้วยช่องว่าง ("")

  4. เสร็จสิ้น

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