Получить смещение текущего буфера в vim (в частности, с помощью скриптов python)

Я хочу получить смещение

  • текущая позиция курсора
  • текущий диапазон выбора

в vim, начиная с начала файла. Я делаю это в python, поэтому подсказки, как это сделать с помощью скриптов vyth python, будут очень полезны.

Я использовал vim.current.. before для выполнения сценариев, но он использует строки и столбцы, а не общее смещение.

Должен ли я рассчитать сумму всех предыдущих строк + текущей строки или есть более простой метод?

Ответ 1

Если ваш vim скомпилирован с опцией +byte_offset, то в Python script после обычного import vim вы можете используйте, например:

vim.eval('line2byte(line("."))+col(".")')

чтобы получить смещение байта от начала файла положения курсора и аналогично для других меток. В более общем плане, если у вас есть пара строк/столбцов (при условии, что +byte_offset как скомпилирован ваш vim), это способ получить смещение байта (там также есть функция byte2line, чтобы перейти в другую сторону).

В то время как модуль vim делает большую функциональность доступной непосредственно для скриптов Python в vim, я обнаружил, что vim.eval и vim.command часто являются самым удобным (а иногда и единственным;) способом получить только насколько это необходимо;-). О, и я всегда стараюсь, чтобы vim был скомпилирован с + justabouteverything всякий раз, когда я могу; -).

Ответ 2

Вы также можете посмотреть настройку statusline. Это добавит смещение bye к статусной линии:

set statusline+=%o

См. :h statusline

Просто будьте осторожны, потому что статусная линия по умолчанию пуста, и добавив к ней% o, вы потеряете все значения по умолчанию.