วิธีการแปลงข้อความทั้งหมดเป็นตัวพิมพ์เล็กใน Vim


211

คุณแปลงข้อความทั้งหมดใน Vim เป็นตัวพิมพ์เล็กได้อย่างไร เป็นไปได้ไหม


เรามีหน้า html จำนวนมากที่มีตัวอักษรทั้งหมดเป็นตัวพิมพ์ใหญ่ สิ่งนี้ช่วยประหยัดเวลาของฉันในการพิมพ์ทุกอย่างเป็นตัวพิมพ์เล็ก
ksuralta

2
ก่อนที่คำถามจะถูกแก้ไขมันเป็นวิธีการแปลงข้อความทั้งหมดในกลุ่มเป็นตัวพิมพ์เล็ก เห็นได้ชัดว่ามีกรณีการใช้งานสำหรับการแปลงข้อความเป็นตัวพิมพ์เล็ก
lemonad

6
เว็บไซต์ VIM มีคำตอบ: vim.wikia.com/wiki/Switching_case_of_charactersขอบคุณ
fnds

คำตอบ:


122
  1. หากคุณหมายถึงตัวพิมพ์ใหญ่เล็ก ๆ น้อย ๆแล้วไม่นั่นเป็นไปไม่ได้เพราะไม่สามารถแปลงข้อความให้เป็นตัวหนาหรือตัวเอียงในโปรแกรมแก้ไขข้อความใด ๆ(เมื่อเทียบกับโปรแกรมประมวลผลคำ ) หากคุณต้องการแปลงข้อความเป็นตัวพิมพ์เล็กให้สร้างบล็อกแบบวิชวลแล้วกดu(หรือUเพื่อแปลงเป็นตัวพิมพ์ใหญ่) Tilde ( ~) ในโหมดคำสั่งย้อนกลับกรณีของตัวละครภายใต้เคอร์เซอร์

  2. หากคุณต้องการดูข้อความทั้งหมดใน Vim ในตัวพิมพ์เล็กคุณอาจต้องการดูguifontตัวเลือกหรือพิมพ์:set guifont=*ถ้า Vim ของคุณรองรับตัวเลือกแบบอักษร GUI


33
ฉันคิดว่ามันคุ้มค่าที่จะกล่าวถึงว่าคุณไม่จำเป็นต้องสร้างบล็อกภาพเพื่อพิมพ์ตัวอักษรเล็ก ๆ guuจะตัวพิมพ์เล็กบรรทัดและgu[motion]ตัวพิมพ์เล็กของข้อความ ในทำนองเดียวกันgUUและgU[motion]ทำงานในลักษณะเดียวกันสำหรับตัวพิมพ์ใหญ่เท่านั้น
Zachary Murray

1
ในความเป็นจริงตัวอักษรขนาดเล็กสามารถใช้กับตัวอักษรส่วนใหญ่ได้เช่นกันโดยใช้ᴀʙcᴅᴇꜰɢʜıᴊᴋʟᴍɴoᴘʀsᴛᴜvwxʏz
gerrit

1
นั่นเป็นเพียงการแฮ็ก สิ่งเหล่านี้ไม่ได้มีไว้สำหรับใช้เป็นตัวพิมพ์ใหญ่ขนาดเล็กและไม่ได้รับการสนับสนุนจากแบบอักษร (บนเครื่องเดสก์ท็อปของฉัน F แสดงผลอย่างแปลกประหลาดบนโทรศัพท์ของฉันมันไม่ได้แสดงผลเลยเพื่อเป็นตัวอย่าง) อย่างไรก็ตามส่วนที่น่าสนใจของ Unicode ขอบคุณ!
โซล

2
คำตอบนี้ไม่ถูกต้อง user80168 มีคำตอบที่ถูกต้อง
Wayne Workman

400

ฉันคิดว่าคุณต้องการตัวพิมพ์เล็ก การแก้ปัญหาค่อนข้างง่าย:

ggVGu

คำอธิบาย:

  1. gg - ไปที่บรรทัดแรกของข้อความ
  2. V - เปิดการเลือกภาพในโหมดบรรทัด
  3. G - ไปที่จุดสิ้นสุดไฟล์ (ในขณะที่คุณเลือกข้อความทั้งหมด)
  4. u - พื้นที่ที่เลือกเป็นตัวพิมพ์เล็ก

88
หรือ ggguG หากคุณต้องการที่จะทำโดยไม่ต้องเลือกภาพ : help gu
DrAl

18
ใช้ทุนUสำหรับตัวพิมพ์ใหญ่ (เช่นggVGU)
Nathan Wallace

42

คล้ายกับวิธีแก้ปัญหาของ mangledorf แต่สั้นกว่าและเป็นมิตรกับคนธรรมดา

:%s/.*/\L&/g


3
:%s/.*/\L&จะพอเพียง (ไม่จำเป็นต้องมีgธงตั้งแต่.*เลือกทั้งบรรทัด)
Gordon Gustafson

1
ตามที่ต้องการ:%s/./\L&/gเนื่องจาก / g / หมายถึงการดำเนินการที่เป็นสากลสำหรับสาย สิ่งที่ได้รับฉัน &แต่เป็น ทำไมจึงจำเป็น
Braden สุดยอด

1
&ยืนอยู่ที่นี่สำหรับwhat was matched by the patternดังนั้นจึงสามารถเข้าใจได้ดังต่อไปนี้แทนโดย.* \Lowercase(what was matched by the pattern)โปรดทราบว่าการจับคู่บน.ทั่วโลกช้ากว่าการจับคู่.*
Camusensei

39

ใช้ตัวเลือกโหมดคำสั่งนี้

ggguG


gg - Goto the first line 
g  - start to converting from current line    
u  - Convert into lower case for all characters
G  - To end of the file.

27

มีหลายวิธีในการสกินแมว ... นี่คือวิธีที่ฉันโพสต์เกี่ยวกับ:


:%s/[A-Z]/\L&/g

เช่นเดียวกันสำหรับตัวพิมพ์ใหญ่:


:%s/[a-z]/\U&/g

ฉันชอบวิธีนี้เพราะฉันใช้โครงสร้างนี้ ( :%s/[pattern]/replace/g) ตลอดเวลาดังนั้นจึงเป็นธรรมชาติมากขึ้น


ฉันคิดว่ามี Typo ในตัวอย่างสุดท้าย ('เช่นเดียวกันสำหรับตัวพิมพ์ใหญ่') - regex ควรเปลี่ยนเป็น [az] มากกว่า '[AZ]'
monojohnny

1
:%s/./\U&/gยังใช้งานได้ ปรากฎว่ามันละเว้นตัวเลขและตัวอักษรที่ไม่ใช่ตัวอักษร สิ่งที่ทำให้ฉันเป็นคือ&. ทำไม \ U (หรือ \ L) ไม่เพียงพอเอง? เราจะขอคำอธิบายได้ไหม?
Braden สุดยอด

2
&เป็นแบบสแตนด์อะโลนสำหรับสตริงที่ตรงกัน ดังนั้นจะ\U&ใช้ประโยชน์จากสตริงที่ตรงกันเพื่อให้มันสามารถใช้สำหรับการแทนที่
Alec Jacobson

22
  • สลับตัวอักษร "HellO" เป็น "hELLo" ด้วย g ~ จากนั้นจึงเคลื่อนที่
  • ตัวพิมพ์ใหญ่ "HellO" เป็น "HELLO" ที่มี gU แล้วเคลื่อนไหว
  • ตัวพิมพ์เล็ก "HellO" ถึง "hello" พร้อม gu จากนั้นจึงเคลื่อนไหว

สำหรับตัวอย่างและข้อมูลเพิ่มเติมโปรดอ่าน: http://vim.wikia.com/wiki/Switching_case_of_characters


ฉันเดาว่าไม่มี แต่มีคำสั่งทดแทนที่ง่ายกว่าสำหรับคำตอบใน @mangledorf ด้วยการแทนที่อักขระที่ต้องการด้วยลำดับการหลีก "\ L &" สำหรับตัวพิมพ์เล็กและ "\ U &" สำหรับตัวพิมพ์ใหญ่ สิ่งที่ทำให้ฉันเป็นคือ&. \ L และ \ U มีเหตุผลสมบูรณ์แบบ แต่ทำไมจึง&จำเป็น
Braden สุดยอด

9

ใช้ ggguG

gg: ไปที่บรรทัดแรก gu: เปลี่ยนเป็นตัวพิมพ์เล็ก G: ไปที่บรรทัดสุดท้าย


มันแตกต่างจากคำตอบของ Kalanidhi อย่างไร?
MSeifert

เพิ่มขึ้นเพื่อให้คะแนนเป็น 0 ซึ่งเป็นคะแนนที่เพียงพอสำหรับคำตอบที่เป็นสำเนาของรายการก่อนหน้า @MSeifert คะแนนลบควรถูกสงวนไว้สำหรับการแก้ปัญหาที่ผิด / เป็นอันตราย
Titou

7

โดยปกติVu(หรือVUตัวพิมพ์ใหญ่) ก็เพียงพอที่จะเปลี่ยนทั้งบรรทัดให้เป็นตัวพิมพ์เล็กได้Vเลือกทั้งบรรทัดเพื่อนำการกระทำไปใช้

Tilda ( ~) เปลี่ยนกรณีของตัวอักษรบุคคลส่งผลให้เกิดกรณีอูฐหรือที่คล้ายกัน

มันยอดเยี่ยมจริงๆที่ Vim มีโหมดที่แตกต่างกันมากมายในการจัดการกับโอกาสต่าง ๆ และวิธีการจัดระเบียบเหล่านั้นอย่างเป็นระเบียบ

ตัวอย่างเช่นv- โหมดภาพที่แท้จริงและโหมดVvisual line และCtrl+ Q- visual block ที่เกี่ยวข้อง (สิ่งที่ช่วยให้คุณสามารถเลือกบล็อกได้คุณสมบัติที่ยอดเยี่ยมของบรรณาธิการชั้นสูงอื่น ๆ ก็มีให้โดยการกดAltปุ่มและเลือกข้อความ)


6

หากคุณกำลังทำงานภายใต้รสชาติของ Unix

:0,$!tr "[A-Z]" "[a-z]"

4
เครื่องหมายวงเล็บเหลี่ยมไม่จำเป็นและเมื่อคุณลบออกเครื่องหมายอัญประกาศก็ไม่จำเป็นเช่นกัน :%!tr A-Z a-z
ephemient

!บ่งชี้ว่าคำสั่งของเชลล์ภายนอกดังนั้น$ man tr(เมื่อเทียบกับ:help tr) เผยให้เห็นว่าเป็นtr translate
Braden ที่ดีที่สุด

วิธีอื่น::%0,$!tr [:upper:] [:lower:]
albertovar

2

ฉันมีปัญหาที่คล้ายกันและฉันต้องการใช้":%s/old/new/g"แต่จบลงด้วยการใช้สองคำสั่ง:

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