การเพิ่มบล็อกส่วนหัวความคิดเห็นแบบกว้าง 80 คอลัมน์พร้อมข้อความกึ่งกลาง


9

ด้วยเหตุผลบางอย่างฉันมักจะแบ่งรหัสออกเป็นส่วนย่อยโดยแยกส่วนหัวดังนี้:

################################################################################
#################################### LOAD ######################################
################################################################################

เหล่านี้คือบรรทัดที่มีความกว้าง 80 คอลัมน์จำนวน 3 คอลัมน์#โดยมีหัวเรื่องอยู่กึ่งกลาง จนถึงตอนนี้ฉันยังไม่พบวิธีที่รวดเร็วในการสร้างสิ่งเหล่านี้ในกลุ่ม

สิ่งที่ฉันมักจะทำคือบางสิ่งบางอย่างตามแนวของ80i#แล้วyyppให้ฉัน 3 บรรทัด แต่จากนั้นฉันต้องนำทางไปที่ตรงกลางและเพิ่มข้อความ ฉันมักจะทำสิ่งนี้ด้วยการแทนที่ แต่การแทนที่ไม่ได้อยู่ตรงกลางส่วนหัวด้านใน#... #ดังนั้นฉันจึงลบส่วนเกินของ#ด้วยตนเอง

วิธีการจัดกึ่งกลางข้อความในแถวกลาง? และอะไรจะเป็นวิธีที่เร็วกว่าเพื่อให้ได้ผลลัพธ์นี้?

คำตอบ:


16

นี่เป็นวิธีที่มีประสิทธิภาพ / ง่ายกว่าเล็กน้อย พิมพ์ด้วยเคอร์เซอร์ที่จุดเริ่มต้นของบรรทัดข้อความ (เช่นLOAD) ที่คุณต้องการจัดกึ่งกลาง

  • :center 80<cr>: จัดกึ่งกลางข้อความด้วยฟังก์ชันในตัวของ Vim
  • hhv0r#: เพิ่ม#s ทางซ้าย
  • A<space><esc>40A#<esc>: เพิ่ม#s มากมายทางด้านขวา
  • d80|: ลบส่วนที่เกิน#ทางด้านขวา
  • YppVr#kk.ด้านบนและด้านล่างเพิ่ม#s

ดังนั้นคำสั่งเต็ม:

:center 80<cr>hhv0r#A<space><esc>40A#<esc>d80<bar>YppVr#kk.

คุณสามารถใส่อะไรเช่นนี้ลงใน. vimrc ของคุณเพื่อเพิ่มการจับคู่ที่สะดวก:

nnoremap <C-b> :center 80<cr>hhv0r#A<space><esc>40A#<esc>d80<bar>YppVr#kk.

การสาธิตมินิ - screencast:

สาธิต


3

:set expandtabครั้งแรกที่คุณจะต้อง

  1. 80i#Esc เพื่อสร้างบรรทัดบนสุด
  2. Yp เพื่อทำซ้ำ
  3. OSpaceLOADSpaceEsc
  4. :center 80( 80อาจละเว้นได้ขึ้นอยู่กับtextwidthการตั้งค่าของคุณ)
  5. hhv0r# เพื่อเติมด้านซ้าย (ใช้การเลือกภาพและแทนที่)
  6. $hjlly$kp เพื่อเติมด้านขวา (โดยการทำซ้ำอักขระบางตัวจากบรรทัดล่างสุด)

3

ฉันจะใช้ฟังก์ชัน vimscript สำหรับสิ่งนั้น

function Header(width, word)
    let a:inserted_word = ' ' . a:word . ' '
    let a:word_width = strlen(a:inserted_word)
    let a:length_before = (a:width - a:word_width) / 2
    let a:hashes_before = repeat('#', a:length_before)
    let a:hashes_after = repeat('#', a:width - (a:word_width + a:length_before))
    let a:hash_line = repeat('#', a:width)
    let a:word_line = a:hashes_before . a:inserted_word . a:hashes_after

    :put =a:hash_line
    :put =a:word_line
    :put =a:hash_line
endfunction

และมันอาจถูกเรียกว่า

: call Header(80, 'Hello')

1
ขอบคุณนี่เป็นคำตอบที่ยอดเยี่ยมจริงๆ ใช้งานได้กับจำนวนบรรทัดใด ๆ และสามารถแก้ไขเพื่อรวมอักขระอื่น ๆ (ไม่เพียง #) ได้อย่างง่ายดาย ความอัปยศฉันสามารถให้ 1 upvote เท่านั้นและยอมรับเพียงคำตอบเดียว ครั้งนี้ฉันต้องไปกับคนที่ฉันคุ้นเคยมากกว่า (และฟังก์ชั่นการเขียน - ฉันไม่คุ้นเคยกับสิ่งนั้น แต่ต้องขอบคุณคุณฉันเห็นว่าพวกเขาทำงานอย่างไร)
Karolis Koncevičius

2

หรือคุณสามารถใช้บล็อกภาพ:

  1. ตรวจสอบให้แน่ใจว่าคุณมีบรรทัดว่างอย่างน้อยสามบรรทัดที่ด้านบนสุดจากนั้น CtrlV80L

  2. R#

  3. ย้ายไปที่ตรงกลางของบล็อก (คุณจะต้องใช้ลูกตานี้)
  4. CtrlV และเลือกพื้นที่ของบล็อกที่คุณต้องการลบ
  5. RSpace
  6. ไปที่จุดเริ่มต้นของพื้นที่ว่างกดRและพิมพ์ส่วนหัวของคุณ

จริงอยู่มันไม่ใช่วิธีที่สมบูรณ์แบบที่สุดในการสร้างส่วนหัวตามที่คุณต้องใช้ลูกตา แต่เป็นกรณีที่น่าสนใจสำหรับการเลือก Visual Block

ผลลัพธ์

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