Vim: автоматизировать чтение строки из внешнего файла
Я пытаюсь автоматизировать следующее в vim:
:r! sed -n 10p filename
Где номер строки (10) постоянно меняется. Я думал что-то вроде
function! GetLine(line, filename)
:r! sed -n a:line,p a:filename
endfunction
который я положил в свой.vimrc и правильно поставлен. Но когда я звоню с :call GetLine(10, "testfile.txt")
это не работает
Теперь, пока я уже давно использую vim, я новичок в написании сценариев, поэтому, пожалуйста, потерпите меня, если я упускаю что-то очевидное.
2 ответа
Я бы сделал что-то подобное
function! GetLine(line, filename)
execute 'r! sed -n ' . a:line . 'p ' . a:filename
endfunction
execute
выполняет следующую команду ex. Мы генерируем команду ex, используя конкатенацию строк. .
объединяет строки и переменные
Взгляни на :h :execute
Другой подход, более подходящий для отображения, - вставка номера строки через <C-r>
:
:nmap <Leader>r :r! sed -n <C-r>=variable<CR>p filename<CR>