функции vim с областью действия скрипта - PullRequest
5 голосов
/ 29 мая 2011

Я установил Янус с моей настройкой MacVim. Чтобы узнать, как работают скрипты vim, я читал файл vimrc, который использует Янус, и я не понимаю, как автор этого использует функции. Например, вот одна из функций в vimrc:

function s:setupWrapping()
  set wrap
  set wrapmargin=2
  set textwidth=72
endfunction

Теперь, согласно разделу Определение функции руководства vim, «Имена функций должны начинаться с заглавной буквы». В соответствии с разделом Локальные сопоставления и функции руководства «При определении функции в сценарии к имени можно добавить« s: », чтобы сделать его локальным для сценария». Тем не менее, нет упоминания о возможности начинать имя функции со строчной буквы при указании области действия как локальной для сценария.

Итак, написана ли синтаксически некорректная функция, но все равно работает, или она синтаксически правильна, но я не могу найти документацию, в которой говорится об этом?

Ответы [ 2 ]

6 голосов
/ 29 мая 2011

Насколько я понимаю, правило о заглавных именах функций предназначено для избежания конфликтов со встроенными функциями vim. Нет возможности конфликта со скриптовыми локальными функциями, поэтому кажется разумным, что ограничение не будет применяться к ним, так как вы всегда должны ставить перед ними префикс с квалификатором пространства имен.

ZyX исправил меня в комментариях, указав, что, вопреки более раннему пересмотру этого ответа, vim не позволяет объявлять функции области буфера. Вы можете объявить глобальную функцию с именем, подобным b:function_name или в этом отношении _:function_name, но это сбивает с толку и, вероятно, ужасная идея по причинам, указанным в комментариях .

Функции, объявленные в словаре, не должны начинаться с заглавной буквы.

Буферные области видимости Funcrefs и, по-видимому, другие Funcrefs за пределами глобальной области действия или области действия уровня («локальные» Funcrefs) не нуждаются в заглавных буквах. Но они в любом случае имеют ограниченную полезность, поскольку Funcref должен ссылаться либо на глобальную функцию, либо на область действия скрипта (последняя синтаксически неудобна) или на функцию словаря; в последнем случае вы должны назвать его с call(funcref, args, dict).

Но, в любом случае, вы ищете документацию, поэтому я сделал :helpgrep capital и нашел эти самородки мудрости:

E704 : Переменная Funcref должна начинаться с заглавной буквы, "s:", "w:", "t:" или "b:".

E124 : «Определить новую функцию по имени {имя}. Имя должно состоять из буквенно-цифровых символов и '_' и должно начинаться с заглавной буквы или "s:" (см. Выше). »Указатель« см. Выше »относится к разделам user-functions и local-function , которые предоставляют более подробную информацию, но не упоминают ничего о не заглавных буквах script-scope функции. user-functions упоминает, что Имя функции должно начинаться с заглавной буквы, чтобы избежать путаницы со встроенными функциями.

Может быть, строгое правило всегда начинать имя функции с заглавной буквы было справедливо до появления других областей, из которых область видимости скрипта, по-видимому, была первой или, по крайней мере, первой, способной включать объявления функций. Я предполагаю, что части руководства, которые утверждают такое правило, просто не были обновлены, чтобы отразить состояние современного vim.

0 голосов
/ 29 мая 2011

Полагаю, вы никогда не узнаете, есть ли документация , но вы не можете ее найти .

Однако я посмотрел файл vimrc Дерека Вайета .в своем блоге, и он последовательно использует заглавную первую букву в именах функций.

Это только доказывает, что он тоже читал руководство.

...