ブライアン・ラスムッセンからの(非常に良い)答えは別として、あなたが求めていることをほぼvirtualedit
正確に行うために私が知っている唯一の方法は、モードを使用することです。これにより、存在しない行を編集することはできませんが、既存の行の終わりを超えて編集することはできます。したがって、現在の行を#シンボルのロードに変換するには、次のようにします。
:set virtualedit=all
v50lr#
50x5ブロックを作成するには、4つの新しい空白行を作成してから、同じことを行います。
:set virtualedit=all
4o<ESC>
<C-V>4k50lr#
(ここで、は+を<C-V>
押し、はを押すことを意味します)。CtrlV<ESC>
Esc
このようなコメントブロックを簡単に作成できるさまざまなファイルタイプのプラグインがあると思いますが、どれが最適かはわかりません。
次のようなことができます。
50i#<ESC>yyo#<ESC>48a<SPACE><ESC>a#<ENTER>#<SPACE><SPACE>My comment goes here<ESC>:exe<SPACE>'normal'<SPACE>(49-getpos('.')[2]).'a<SPACE>'<ENTER>a#<ENTER>#<ESC>48a<SPACE><ESC>a#<ESC>p
しかし、多分それは私がばかげているだけです!:help
あなたが興味を持っているなら(あなたの友達です)、読者がそこで何が起こっているのかを理解するための練習問題として残しておきます。
これをもう少し深刻な代替手段としてはどうでしょうか。vimrcまたはvimランタイムフォルダのpluginsディレクトリにあるファイル(Unixの場合は〜/ .vim / pluginsなど)に次のように追加します。
nmap <F4> :InsertCommentBlock<CR>
command! InsertCommentBlock call InsertCommentBlock()
function! InsertCommentBlock()
let linelength = 50
let linelist = []
call add(linelist, repeat('#', linelength))
call add(linelist, '#' . repeat(' ', linelength-2) . '#')
let comment = input('Please enter a comment: ')
call add(linelist, '# ' . comment . repeat(' ', linelength - (4+len(comment))) . '#')
call add(linelist, '#' . repeat(' ', linelength-2) . '#')
call add(linelist, repeat('#', linelength))
call append(line('.'), linelist)
endfunction
見る:
:help function
:help 'virtualedit'
:help command
:help nmap
:help repeat()
:help append()
:help add()
:help getpos()
:help :exe
等...