LINUX.ORG.RU

Viml способ прочитать заданную строку из файла в переменную

 ,


0

1

На входе имеем имя файла и номер строки.

Надо максимально эффективно, средствами viml считать содержимое строки в переменную.

Пока делаю тупо:

let l:text = readfile(l:path)[l:line]
★★★★★

Ответ на: комментарий от pon4ik

Я даже не смотрел, что там в твоем варианте. Ты спросил, я ответил как это делается.
Что имеется в виду под словом лениво я не уверен, возможно оградить себя от использования памяти пропорционально размеру файла? Тогда нужно что-то типа потока... Вообще если нет цели сделать на чистом вимскрипте, можно заюзать сед.

mos ★★☆☆☆ ()
Ответ на: комментарий от mos

Лениво, в смысле что бы текст получался в тот момент, когда пользователь увидел строку.

В общем пока сделал так:

let l:cache = {}
let l:text = get(l:cache, l:path, readfile(l:path))[l:line]
pon4ik ★★★★★ ()
Ответ на: комментарий от pon4ik

Надо максимально эффективно
get(l:cache, l:path, readfile(l:path))

Аргументы же вычисляются до вызова функции. Придётся как-то так:

let l:cache = {}
if has_key(l:cache, l:path)
    let l:text = l:cache[l:path][l:line]
else
    let l:contents = readfile(l:path)
    let l:cache[l:path] = l:contents
    let l:text = l:contents[l:line]
endif
xaizek ★★★★★ ()