LINUX.ORG.RU

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

 ,


0

1

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

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

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

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

Последнее исправление: pon4ik (всего исправлений: 1)

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

Задача показать в loclist текст в искоммом положении.

В идеале, хотелось бы конечно делать это в «ленивом» режиме, но похоже в vim'e так нельзя.

pon4ik ★★★★★
() автор топика
Ответ на: комментарий от 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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.