2012-11-08 60 views
1

我試圖做到這一點填補了#當前行,然後去開始時,用的日期和時間重寫命令,然後與鄰,這是我的嘗試:如何用vimscript製作水平標尺?

: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的第一次嘗試請幫助我瞭解如何使這個好。

回答

3

映射的右側與輸入命令基本相同。這使您可以從重複輸入內容逐漸移動到錄製宏(@q),最終進行永久映射。

這是你嘗試了幾分直譯:

:nnoremap <F6> 80I#<Esc>0R<C-r>=strftime("%c")<CR><Esc>o 

,如果你想使用的80.固定寬度的東西更動態的(就像當它是> 0的'textwidth'值),你必須移動從通過:execute直接執行到程序插,就像這樣:

:nnoremap <F6> :execute 'normal' (&textwidth > 0 ? &textwidth : 80) . "I#\<lt>Esc>"<CR>0R<C-r>=strftime("%c")<CR><Esc>o 

正如你所看到的,這已經是方式更隱蔽,具有防爆的混合物命令和:normal模式,報價等

最後一步是一個完全可配置和可重用的插件。只有那些,精心錯誤處理之類的東西,您最好使用單獨的:function定義,然後將其剛剛從你的映射稱爲:

function! s:InsertSeparator() 
    ... 
endfunction 
nnoremap <silent> <F6> :call <SID>InsertSeparator()<CR> 
0

可以Vimscript中使用printf

:nnoremap <F6> I<C-r>=substitute(printf("%-80s", strftime("%c")), '\(\s\)\@<=\s', '#', 'g')<CR><Esc>o