添加具有居中文本的80列宽的注释标题块


9

由于某种原因或其他原因,我经常将代码划分为多个小节,这些小节由标头分隔,如下所示:

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

这是3列80列的宽线,#中间居中。到目前为止,我还没有找到在vim中生成它们的快速方法。

我通常要做的是沿着的内容,80i#然后yypp给我3行,但是然后我需要导航到中间并添加文本。我通常使用replace来执行此操作,但是replace不会使标头居中居中#…… #因此,我#手动删除了多余的。

如何将文本居中居中?而达到此结果的更快方法是什么?

Answers:


16

这是一种更有效/更简单的方法。用光标在LOAD要居中的文本行(即)的开头键入它。

  • :center 80<cr>:使用Vim的内置功能将文本居中
  • hhv0r##在左侧添加s
  • A<space><esc>40A#<esc>#在右边添加大量s
  • d80|:删除#右侧的多余s
  • YppVr#kk.:加入顶部和底部#小号

因此,完整的命令:

: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.

微型截屏演示:

示范


3

首先,您需要:set expandtab

  1. 80i#Esc 创建顶行
  2. Yp 复制它
  3. OSpaceLOADSpaceEsc
  4. :center 8080根据您的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票,只接受一个答案。这次,我不得不选择一个我更熟悉的函数(以及编写函数-我对此并不熟悉,但是多亏了我,我才知道它们是如何工作的)。
KarolisKoncevičius15年

2

或者您可以使用可视块:

  1. 确保顶部已经至少有三个空行,然后 CtrlV80L

  2. R#

  3. 移动到块的中间(您将不得不对此视而不见)
  4. CtrlV 并选择要删除的块的区域
  5. RSpace
  6. 转到空白处的开头,单击R并键入标题。

诚然,这不是创建标头的最完美方法,因为您必须加以注意,但这是选择Visual Block的有趣案例。

结果

#################################################################################
##########################    this is a header      #############################
#################################################################################
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.