เยื้องไปยังระดับการเยื้องถัดไปด้วย >>


9

บางครั้งฉันต้องทำงานกับโค้ดที่ไม่ได้เยื้องระดับของการเยื้องฉันได้ตั้งค่ากลุ่ม (4 ช่องว่างต่อระดับ) โดยปกติหลังจากคัดลอก / วางบางสิ่งบางอย่างในไฟล์ ฉันมักจะทำอะไรกับและ<< >>ปัญหาคือพวกเขาไม่ข้ามไปยังระดับการเยื้องถัดไปพวกเขาเพียงแค่เพิ่มหรือลบ 4 ช่องว่าง

ถ้าฉันมีรหัสเช่นนี้

if condition:
    do this
   do that

การทำ>>ต่อไปdo thatจะส่งผลให้

if condition:
    do this
       do that

ฉันต้องการที่จะไปที่นี้

if condition:
    do this
    do that

นอกเหนือจากการจับคู่การเยื้องของบรรทัดข้างต้นอย่างง่าย ๆ แล้วฉันต้องการให้มันข้ามไปยังระดับถัดไปของการเยื้องไม่เพิ่ม 4 ช่องว่าง

นี่คือสิ่งที่ฉันมีใน. vimrc ของฉันเกี่ยวกับการเยื้อง

:set tabstop=4 shiftwidth=4 expandtab

หากคุณยังมีfiletype plugin indent onในของคุณ.vimrc, filetype (และปลั๊กอิน) กฎระเบียบที่เกี่ยวข้องกับการเยื้องจะนำไปใช้ เช่นตรวจสอบสิ่งที่คุณtabstopคุ้มค่าจริงคือ ( set tabstop?จะทำอย่างไรเหมือนกันสำหรับการตั้งค่าอื่น ๆ ) เมื่อมีการแก้ไขและเปลี่ยนค่าเหล่านั้นโดยการเพิ่มสายของคุณไปยัง 'หลัง' ไฟล์, สิ่งที่ชอบ: stackoverflow.com/a/159066/5000478
VanLaser

3
>>และ<<เพิ่มและลบการเยื้องซึ่งไม่ใช่สิ่งที่คุณต้องการตามลำดับ สิ่งที่คุณต้องการคือ "การจัดรูปแบบ" ==ซึ่งจะทำด้วย
romainl

สามารถแมป:nnoremap >> ^i<tab><esc>หากคุณต้องการพฤติกรรมแท็บใน>>
Wolfie

@romainl ==จะข้ามไปที่ระดับของบรรทัดด้านบน ในขณะที่สิ่งที่ดีที่จะรู้ว่ามันจะไม่ทำงานในทุกกรณีที่ฉันสนใจนอกเหนือจากคำถามสิ่งที่ฉันต้องการมีไว้สำหรับ>>และ<<เพื่อเยื้อง / อุทิศถึงความหลากหลายของการเปลี่ยนแปลงจากชายแดนในทิศทางนั้น .
Dumitru

2
ไม่มี==การใช้ประโยชน์อย่างใดอย่างหนึ่งequalexprหรือequalprgฟอร์แมตเส้นที่กำหนด
romainl

คำตอบ:


12

เมื่อคุณใช้คำสั่ง{count}>>, {count}<<, >{motion}หรือ<{motion}บนเส้นบางที่ได้รับการเยื้องแล้วและคุณต้องการระดับเยื้องใหม่ของพวกเขาที่จะเป็นหลายของคุณ'shiftwidth'คุ้มค่าตัวเลือกคุณสามารถเปิดใช้งาน'shiftround'ตัวเลือกและเพิ่มบรรทัดนี้ในของคุณvimrc:

set shiftround

2

หากคุณต้องการ>>เยื้องไปที่แท็บถัดไปถัดไปและ<<เพื่อลบไปที่แท็บสต็อปครั้งสุดท้ายคุณสามารถเชื่อมมันซ้ำได้เช่น:

:nnoremap << ^i<BS><esc>
:nnoremap >> ^i<tab><esc>

สิ่งนี้จะย้ายเคอร์เซอร์ แต่คุณอาจทำเครื่องหมายเล่ห์เหลี่ยมบางอย่างเพื่อย้ายกลับ ^ไม่ทิ้งm'เครื่องหมาย แต่คุณสามารถทิ้งไว้ด้วยตนเองในการผูก

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