Функция getbufvar при вызове из плагина или vimr c возвращает пустую строку - PullRequest
1 голос
/ 25 апреля 2020

У меня есть плагин, в котором я вызываю getbufvar внутри одной из функций плагина, чтобы проверить, является ли буфер списком quckfixlist. getbufvar всегда возвращает пустую строку. Однако, если я передаю жестко запрограммированное значение, такое как 1, в качестве номера буфера вместо переменной, возвращается правильная строка. Это ошибка в getbufvar?

Ниже приведен тестовый код для воспроизведения.

function! Test(bufNum)
  return getbufvar(a:bufNum, '&ft')
endfunction

au BufEnter * echoerr expand('<abuf>'). ", ". Test(expand('<abuf>'))

Приведенный выше фрагмент кода повторяет «1», когда я открываю файл python. Однако, если я вызываю getbufvar (1, '& ft'), он печатает '1, python'. Я что-то не так делаю?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2020

В VimScript строки и числа отличаются во время выполнения. expand() всегда возвращает строку, но getbufvar() ожидает либо имя буфера (v:t_string), либо номер буфера (v:t_number). Таким образом, «1» интерпретируется (по типу аргумента) как имя буфера. Вы должны привести его к числу, чтобы избежать этой проблемы.

Но учтите, что в этом случае BufEnter всегда вызывается после ввода в буфер, поэтому вы можете безопасно использовать bufnr() (или даже просто &ft без getbufvar()).

1 голос
/ 25 апреля 2020

Я думаю, что проблема связана с <abuf> здесь, вы можете использовать buffer_number() функцию вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...