我正在尝试用#填充当前行的命令,然后转到开头并重写日期和时间,然后o,这是我的尝试:
:nnoremap <F6><Home>
set count = 0
normal i
while count <= columns
normal #
set count += 1
endwhile
<Home>R =strftime("%c")<CR>
normal o
按下F6的结果应该是:
日期和时间############################################ ##########################
但是,这是我第一次尝试扩展vim,所以请帮助我了解如何使这一切正常。
答案 0 :(得分:3)
映射的右侧与键入命令的方式基本相同。这允许您逐步从重复键入内容到录制宏(@q
),最终进行永久映射。
以下是您尝试的字面翻译:
:nnoremap <F6> 80I#<Esc>0R<C-r>=strftime("%c")<CR><Esc>o
它使用80的固定宽度。如果你想要更动态的东西(比如'textwidth'
的值> 0),你必须通过:execute
从直接执行转移到编程插值,像这样:
:nnoremap <F6> :execute 'normal' (&textwidth > 0 ? &textwidth : 80) . "I#\<lt>Esc>"<CR>0R<C-r>=strftime("%c")<CR><Esc>o
正如你所看到的,这已经更加神秘了,混合了Ex命令和:normal
模式,引用等等。
最后一步是完全可配置且可重用的插件。只有那些具有精心设计的错误处理和内容的人,通常会使用单独的:function
定义,然后从映射中调用这些定义:
function! s:InsertSeparator()
...
endfunction
nnoremap <silent> <F6> :call <SID>InsertSeparator()<CR>
答案 1 :(得分:0)
您可以在vimscript中使用printf
。
:nnoremap <F6> I<C-r>=substitute(printf("%-80s", strftime("%c")), '\(\s\)\@<=\s', '#', 'g')<CR><Esc>o