ฉันจะเลื่อนบรรทัดเยื้องไปเป็นค่าเฉพาะได้อย่างไร


11

หลายครั้งที่ฉันพบกับสถานการณ์ที่บรรทัดไม่เยื้องอย่างเหมาะสม อีเธอร์ผ่านปลั๊กอินการเยื้องที่ไม่ดี / ไม่ต้องการหรือส่วนใหญ่มักจะเว้นวรรคเพื่อชดเชยค่าเยื้อง ฉันมักจะแก้ไขปัญหานี้โดย<<หรือ>>บรรทัดสองสามครั้งเพื่อแก้ไข ในกรณีที่มีช่องว่างเพิ่มเติมฉันจะทำหนึ่ง100<<ระดับ>>สำหรับแต่ละย่อหน้าที่ฉันต้องการ

คำถามคือเช่นการ|เคลื่อนไหวที่ช่วยให้คุณกำหนดคอลัมน์ตามจำนวน10|ส่งเคอร์เซอร์ไปที่คอลัมน์ที่ 10 ฉันจะระบุระดับการเยื้องได้อย่างไร

ตัวอย่าง (สิ่งนี้ใช้ไม่ได้) กับshiftwidth=4 expandtab:

The quick (indent level 0)
••••Brown Fox (indent level 1)
••••••••••Jumped over the lazy dog (indent level 2 with two extra spaces)

ในกรณีนี้ฉันต้องนับระดับเยื้องของบรรทัดสุดท้าย (2) และเพิ่มหนึ่งรายการสำหรับช่องว่างเพิ่มเติมจากนั้นพิมพ์3<<แล้วนับระดับเยื้องของสิ่งที่ฉันแล้ว1>>(หรือใช้autoindentและ==คำสั่ง)

ฉันขอให้บางสิ่งบางอย่างเช่น1==บังคับให้เยื้องเป็นเยื้องระดับ 1 หรือในบางกรณี0==เพื่อลบการเยื้องออกด้วยกัน

ฉันรู้ว่าตัวอย่างข้างต้นทำการเยื้องอัตโนมัติใน 1 หรือ 0 บรรทัด (ตามลำดับ) และไม่ทำสิ่งที่ฉันต้องการ แต่หวังว่ามันจะช่วยอธิบายคำถามได้ดีขึ้น

คำตอบ:


18

คุณสามารถใช้:leftคำสั่ง:

:[range]le[ft] [indent]
[range]เส้นซ้ายจัดใน ตั้งค่าการเยื้องในบรรทัดเป็น[indent](ค่าดีฟอลต์ 0) {ไม่ใช่ใน Vi}

โปรดทราบว่าการ:leftตั้งค่าการเยื้องเป็นnช่องว่างและไม่ทราบshiftwidthหรือtabstopดังนั้นการใช้:left 8จะใช้ช่องว่าง 8 ช่อง

หากคุณต้องการตั้งค่าระดับการเยื้องคุณสามารถกำหนดคำสั่งได้อย่างง่ายดาย:

command! -nargs=1 Left execute 'left ' . &sw * <args>

การใช้:Left 2จะตั้งค่าการเยื้องเป็น 8 ช่องว่าง

ในการจับคู่สิ่งนี้กับ<Leader>=คุณสามารถใช้:

noremap <expr> <Leader>= ':left ' . str2nr(nr2char(getchar())) * &sw . '<CR>'

ฉันไม่แน่ใจว่านี่เป็นวิธีที่ดีที่สุด แต่เป็นวิธีเดียวที่ฉันสามารถจัดการ ... \=2จะเยื้องบรรทัดปัจจุบันเป็น 8 ช่องว่างและ5\=3จะเยื้อง 5 บรรทัดถัดไปเป็น 12 ช่องว่าง


คำแนะนำที่เกี่ยวข้องที่ยังแก้ปัญหาของคุณคือการตั้งค่าshiftroundตัวเลือก จาก:help 'shiftround'

'shiftwidth'เยื้องรอบหลาย ใช้กับ>และ< คำสั่ง CTRL-T และ CTRL-D ในโหมดแทรกจะปัดการเยื้องเป็นจำนวนเท่าของเสมอ'shiftwidth'(ซึ่งเข้ากันได้กับ Vi)

ในตัวอย่างของคุณช่องแรก<<จะ "ปัด" เป็น 8 ช่องว่าง ดังนั้นปัญหาของคุณ (ใช้3<<แล้ว>>) ได้รับการแก้ไข และตามที่หน้าช่วยเหลือบอกไว้คุณสามารถใช้<C-d>จากโหมดแทรก


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