Помимо (очень хорошего) ответа Брайана Расмуссена, единственный известный мне способ сделать почти именно то, что вы просите, - это использовать режим virtualedit
. Это не позволит вам редактировать несуществующие строки, но позволит вам редактировать после конца существующих строк. Поэтому, чтобы превратить текущую строку в загрузку символов #, вы можете сделать это:
:set virtualedit=all
v50lr#
Чтобы создать блок 50х5, вы можете создать 4 новые пустые строки, а затем сделать то же самое:
:set virtualedit=all
4o<ESC>
<C-V>4k50lr#
(где <C-V>
означает нажатие Ctrl + V , а <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 (например, ~ / .vim / plugins в Unix)
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
и т.д ...