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>
Другие вопросы по тегам