Menambahkan blok tajuk komentar lebar 80 kolom dengan teks di tengah

9

Untuk beberapa alasan atau lain, saya sering membagi kode menjadi subbagian yang dipisahkan oleh header seperti ini:

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

Ini adalah 3 garis lebar 80 kolom #dengan judul di tengah. Sejauh ini saya belum menemukan cara cepat untuk menghasilkan ini di vim.

Apa yang biasanya saya lakukan adalah sesuatu di sepanjang baris 80i#dan kemudian yyppmemberi saya 3 baris, tapi kemudian saya perlu menavigasi ke tengah dan menambahkan teks. Saya biasanya melakukan ini dengan mengganti, tetapi ganti tidak memusatkan header di dalam #... #Jadi saya menghapus kelebihan #secara manual.

Bagaimana cara memusatkan teks di baris tengah? Dan apa cara yang lebih cepat untuk mencapai hasil ini?

Karolis Koncevičius
sumber

Jawaban:

16

Inilah metode yang sedikit lebih efisien / lebih mudah. Ketik dengan kursor di awal baris teks (yaitu LOAD) yang ingin Anda tuju.

  • :center 80<cr>: pusatkan teks dengan fungsi bawaan Vim
  • hhv0r#: tambahkan #s di sebelah kiri
  • A<space><esc>40A#<esc>: tambahkan banyak #s di sebelah kanan
  • d80|: hapus kelebihan #s di sebelah kanan
  • YppVr#kk.: Add atas dan bawah #s

Jadi, perintah lengkapnya:

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

Anda bisa meletakkan sesuatu seperti ini di .vimrc Anda untuk menambahkan pemetaan yang nyaman:

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

Peragaan mini-screencast:

demonstrasi

Gagang pintu
sumber
3

Pertama, kamu harus :set expandtab.

  1. 80i#Esc untuk membuat baris teratas
  2. Yp untuk menduplikatnya
  3. OSpaceLOADSpaceEsc
  4. :center 80( 80Mungkin dihilangkan, tergantung pada textwidthpengaturan Anda .)
  5. hhv0r# untuk mengisi sisi kiri (menggunakan pemilihan visual dan penggantian)
  6. $hjlly$kp untuk mengisi sisi kanan (dengan menggandakan beberapa karakter dari garis bawah)
200_sukses
sumber
3

Saya akan menggunakan fungsi vimscript untuk itu.

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

Dan itu bisa disebut seperti

: call Header(80, 'Hello')
jalanb
sumber
1
Terima kasih, ini jawaban yang sangat bagus. Berfungsi untuk sejumlah garis dan bahkan dapat dimodifikasi untuk memasukkan karakter lain (tidak hanya #) dengan mudah. Malu saya hanya bisa memberikan 1 upvote dan hanya menerima satu jawaban. Kali ini saya harus pergi dengan yang lebih saya kenal (dan fungsi menulis - saya tidak terbiasa dengan itu, tetapi terima kasih kepada Anda saya melihat bagaimana mereka bekerja).
Karolis Koncevičius
2

Atau Anda dapat menggunakan blok visual:

  1. Pastikan Anda sudah memiliki setidaknya tiga baris kosong di bagian atas CtrlV80L

  2. R#

  3. Pindah ke tengah blok (Anda harus melihat ini)
  4. CtrlV dan pilih area blok yang ingin Anda hapus
  5. RSpace
  6. Pergi ke awal ruang kosong, tekan Rdan ketik tajuk Anda.

Memang, ini bukan cara yang paling sempurna untuk membuat header, karena Anda harus melihatnya, tetapi ini merupakan kasus yang menarik untuk pemilihan Blok Visual.

Hasil

#################################################################################
##########################    this is a header      #############################
#################################################################################
CharlesL
sumber