1

現在の行を # で埋めてから、最初に移動して日付と時刻で書き換えるコマンドを実行しようとしています.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を拡張する最初の試みなので、これを大丈夫にする方法を理解するのを手伝ってください。

4

2 に答える 2

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>
于 2012-11-08T08:42:37.423 に答える
0

printfvimscriptで使用できます。

:nnoremap <F6> I<C-r>=substitute(printf("%-80s", strftime("%c")), '\(\s\)\@<=\s', '#', 'g')<CR><Esc>o
于 2012-11-08T14:20:43.970 に答える