由于某种原因或其他原因,我经常将代码分成多个标头,如下所示:

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


这些是3列80列宽的#行,标题居中中间。
到目前为止,我还没有找到在vim中生成这些代码的快捷方法。

我通常做的事情是按照80i#然后按yypp的方式给我3行,但随后我需要导航到中间并添加文本。我通常使用replace来执行此操作,但是replace不会将标题放在#内……#,因此我手动删除了多余的#

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

#1 楼

这是一种更有效/更简单的方法。用光标在要居中的文本行(即LOAD)的开头键入它。 br />
:center 80<cr>:在左侧添加hhv0r# s

#:在右侧添加大量A<space><esc>40A#<esc>s

#:删除多余的d80| s右

#:在顶部和底部添加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.


迷你截屏演示:



#2 楼

首先,您需要:set expandtab



80 i#Esc创建顶行

Yp复制它

OSpace LOAD SpaceEsc


:center 80(根据您的80设置,可以省略textwidth。)

hhv0r#填充左侧(使用可视选择并替换)

$ 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票,只接受一个答案。这次,我不得不选择一个我更熟悉的函数(以及编写函数-我对此并不熟悉,但是多亏了我,我才知道它们是如何工作的)。

– KarolisKoncevičius
2015年2月5日在16:38

#4 楼

或者您可以使用可视块:


确保顶部至少已经有三行空行,然后按CtrlV80L
R#
移动到中间块(您将不得不对此加以注意)

CtrlV并选择要删除的块的区域

RSpace

转到空白处,按R键,然后键入标题。

授予,这不是创建标题的最理想方法,因为您必须加以注意,但这是Visual有趣的情况块选择。

结果

#################################################################################
##########################    this is a header      #############################
#################################################################################