подфункции в vim - PullRequest
       1

подфункции в vim

1 голос
/ 25 июня 2011

Я создал много функций в menu.vim.

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

p.e это код, который часто возвращается в моих функциях:

let zoek = @/    
if a:type == "'<,'>"    
 let r = substitute(zoek, '\\%V', '', 'g')    
elseif a:type == "%"    
 let r = zoek    
endif    

let a = substitute(r, '\', '', 'g')      

if matchstr(d, '>') == '>' || matchstr(d, '<') == '<'     
 let e = substitute(d, '\zs>\(\d\+\)%<\ze', '\1-', 'g')     
endif

Как я могу создать из него подфункцию? Как я могу вызвать это?
У Vim есть подфункции?

Ответы [ 2 ]

4 голосов
/ 26 июня 2011

Вы можете иметь «локальные» функции, определив их в словаре: в следующем коде

function MyFunc()
    let d={}
    function d.function()
        echo "Foo"
    endfunction
    call d.function()
endfunction

функция d.function доступна только внутри s: MyFunc и уничтожается после выхода из s: MyFunc.Я поместил «local» в кавычки, потому что d.function действительно глобальная функция с именем 42 (или другое число, это не имеет значения). Его нельзя вызвать без ссылки на него, и единственный способ создать ссылку - это использовать function dict.key() (ссылки могут быть скопированы после создания, но вы не можете создать ссылку, используя вызов function(), хотя это возможно для MyFunc: function("MyFunc")).Обратите внимание, что число (в данном случае 42) увеличивается каждый раз, когда вы создаете функцию, и я не знаю ни того, что является максимальным числом, ни того, что произойдет, когда оно будет достигнуто.Я лично использую функции словаря, потому что у них есть два других преимущества:

  1. Функция словаря, определенная внутри локального словаря сценария, не может быть достигнута без отладчика или явной передачи ссылки на функцию (возможно, как часть ее контейнера).) где-то.
  2. Если в словаре определено более одной функции, для их очистки все, что вам нужно, - это удалить этот словарь.Полезно для перезагрузки плагинов.
2 голосов
/ 25 июня 2011

В Vimscript есть только один тип функций, но я не уверен, что это то, что вы уже используете в вашем menu.vim.Определяемая пользователем функция определяется следующим образом:

    function! MyNewFunction()
        " your code here
    endfunction

Затем вы можете вызвать эту функцию в других местах ваших скриптов (и внутри других функций), используя

    call MyNewFunction()

Или установить переменную, равнуювозвращаемое значение вашей функции, используя

    let my_variable = MyNewFunction()

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

    help user-functions

Извинения, если я не ответил на ваш вопрос.

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