Вы можете использовать pydo
команду, доступную начиная с Vim 7.4, руководство описывает, как она работает лучше, чем я:
: [range] pydo {body}
Выполните Python-функцию «def _vim_pydo (line, linenr): {body}» для каждой строки в [range], причем аргументы функции поочередно задаются для текста каждой строки, без завершающего <EOL> и текущего номер строчки. Функция должна возвращать строку или None. Если строка возвращается, она становится текстом строки в текущем повороте. По умолчанию для [range] используется весь файл: «1, $».
Для вашего примера вы можете использовать команду вроде:
:python import vim
:pydo vim.current.buffer[linenr - 1] = '[%s]' % line
linenr - 1
Бит существует потому , что линии в vim.current.buffer
0-индексированные , но Вим начинают считать строки от 1.
Приятно то, что вы можете легко определить пользовательскую команду для выполнения вашего кода Python в диапазоне строк:
command! -range=% BracketLines
\ <line1>,<line2>pydo vim.current.buffer[linenr - 1] = '[%s]' % line
Вы можете получить текущий буфер с
vim.current.buffer
, который является итеративным; Вы можете использоватьfor
цикл для получения каждой строки.Вы можете изменить строки, назначив их; Итак, сложив это вместе, мы получим:
Также см
:help python-buffer
.источник