Thêm khối tiêu đề nhận xét rộng 80 cột với văn bản chính giữa


9

Vì lý do này hay lý do khác, tôi thường chia mã thành các phần phụ được phân tách bằng các tiêu đề như sau:

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

Đây là 3 dòng rộng 80 cột #với một tiêu đề ở giữa. Cho đến nay tôi không tìm thấy một cách nhanh chóng để tạo ra những thứ này trong vim.

Những gì tôi thường làm là một cái gì đó dọc theo dòng 80i#và sau đó yyppđể cho tôi 3 dòng, nhưng sau đó tôi cần điều hướng đến giữa và thêm văn bản. Tôi thường làm điều này với thay thế, nhưng thay thế không tập trung bên trong tiêu đề #... #Vì vậy, tôi xóa số chênh lệch giữa #là bằng tay.

Làm thế nào để tập trung văn bản ở hàng giữa? Và điều gì sẽ là một cách nhanh hơn để đạt được kết quả này?

Câu trả lời:


16

Đây là một phương pháp hiệu quả hơn / dễ dàng hơn một chút. Nhập nó bằng con trỏ ở đầu dòng văn bản (nghĩa là LOAD) mà bạn muốn căn giữa.

  • :center 80<cr>: căn giữa văn bản với chức năng tích hợp của Vim
  • hhv0r#: thêm #s ở bên trái
  • A<space><esc>40A#<esc>: thêm nhiều #s ở bên phải
  • d80|: xóa #s thừa ở bên phải
  • YppVr#kk.: thêm đỉnh và đáy #s

Vì vậy, lệnh đầy đủ:

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

Bạn có thể đặt một cái gì đó như thế này trong .vimrc của bạn để thêm ánh xạ thuận tiện:

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

Trình diễn mini-screencast:

trình diễn


3

Đầu tiên, bạn cần phải :set expandtab.

  1. 80i#Esc để tạo dòng trên cùng
  2. Yp nhân đôi nó
  3. OSpaceLOADSpaceEsc
  4. :center 80(Có 80thể bỏ qua, tùy thuộc vào textwidthcài đặt của bạn .)
  5. hhv0r# để điền vào bên trái (sử dụng chọn và thay thế trực quan)
  6. $hjlly$kp để điền vào bên phải (bằng cách sao chép một số ký tự từ dòng dưới cùng)

3

Tôi sẽ sử dụng một chức năng vimscript cho điều đó.

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

Và nó có thể được gọi là như

: call Header(80, 'Hello')

1
Cảm ơn bạn, đây là một câu trả lời thực sự tuyệt vời. Hoạt động cho bất kỳ số lượng dòng nào và thậm chí có thể được sửa đổi để bao gồm các ký tự khác (không chỉ #) một cách dễ dàng. Thật xấu hổ tôi chỉ có thể đưa ra 1 upvote và chỉ chấp nhận một câu trả lời duy nhất. Lần này tôi phải đi với cái mà tôi quen thuộc hơn (và các chức năng viết - tôi không quen với điều đó, nhưng nhờ có bạn tôi thấy chúng hoạt động như thế nào).
Karolis Koncevičius

2

Hoặc bạn có thể sử dụng các khối trực quan:

  1. Hãy chắc chắn rằng bạn đã có ít nhất ba dòng trống ở trên cùng, sau đó CtrlV80L

  2. R#

  3. Di chuyển đến giữa khối (bạn sẽ phải cầu mắt này)
  4. CtrlV và chọn khu vực của khối bạn muốn xóa
  5. RSpace
  6. Đi đến bắt đầu của không gian trống, nhấn Rvà nhập tiêu đề của bạn.

Cấp, đó không phải là cách hoàn hảo nhất để tạo tiêu đề, vì bạn phải nhắm mắt, nhưng đó là một trường hợp thú vị cho lựa chọn Visual Block.

Kết quả

#################################################################################
##########################    this is a header      #############################
#################################################################################
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.