Недавно я наткнулся на ту же проблему. Мое решение - следующая функция vim (вставьте в мой .vimrc
):
function SplitToLines() range
for lnum in range(a:lastline, a:firstline, -1)
let words = split(getline(lnum))
execute lnum . "delete"
call append(lnum-1, words)
endfor
endfunction
Это может использоваться с линейными диапазонами, например, следующим образом
:26call SplitToLines()
, что разделит строку на номер 26. Но код также корректно обрабатывает диапазоны строк (поэтому диапазон в цикле for строится в обратном порядке).
1,10call SplitToLines()
будет разбивать строки с 1 по 10 на несколько строк. Тем не менее, я в основном использую это в визуальном режиме, как
'<,'>call SplitToLines()
, которая разбивает все строки, которые визуально отмечены. Конечно, вы можете определить некоторые однобуквенные аббревиатуры для этого вызова функции (с автозаполнением Tab Я не считаю это необходимым). Также обратите внимание, что добавив дополнительный аргумент, который также будет использоваться функцией «split», вы можете получить функцию, которая разбивает строки по определенным шаблонам (вместо просто пробелов).