################################################################################
#################################### 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')
#4 楼
或者您可以使用可视块:确保顶部至少已经有三行空行,然后按CtrlV80L
R#
移动到中间块(您将不得不对此加以注意)
CtrlV并选择要删除的块的区域
RSpace
转到空白处,按R键,然后键入标题。
授予,这不是创建标题的最理想方法,因为您必须加以注意,但这是Visual有趣的情况块选择。
结果
#################################################################################
########################## this is a header #############################
#################################################################################
评论
谢谢,这是一个非常好的答案。适用于任意数量的行,甚至可以轻松修改以包含其他字符(不仅是#)。不好意思,我只能投1票,只接受一个答案。这次,我不得不选择一个我更熟悉的函数(以及编写函数-我对此并不熟悉,但是多亏了我,我才知道它们是如何工作的)。
– KarolisKoncevičius
2015年2月5日在16:38