1

Я пытаюсь автоматизировать следующее в 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 ответа2

3

Я бы сделал что-то подобное

function! GetLine(line, filename)
    execute 'r! sed -n ' . a:line . 'p ' . a:filename
endfunction

execute выполняет следующую команду ex. Мы генерируем команду ex, используя конкатенацию строк. . объединяет строки и переменные

Посмотрите на :h :execute

0

Другой подход, более подходящий для отображения, вставляет номер строки через <C-r>:

:nmap <Leader>r :r! sed -n <C-r>=variable<CR>p filename<CR>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .