2013-09-23 5 views
2

Я пытаюсь создать пару карт, чтобы быстро пройти через конфликты слияния. Вот мой код:Аргументы функции не оцениваются

func! DiffAccept(w) 
    diffget a:w 
    diffupdate 
    normal ]c 
endfunc 

noremap dh :exec DiffAccept("//2")<CR> 
noremap dl :exec DiffAccept("//3")<CR> 

Каждый раз, когда я пытаюсь использовать это я получаю «Нет соответствия буфера для: ш». Я явно использую эту переменную неправильно, но она действует как ожидалось, когда я меняю строку на «echo a: w».

ответ

5

Правила оценки Vim отличаются от большинства языков программирования. Вы должны использовать :execute, чтобы оценить переменную (аргумент функции); в противном случае, это буквально (в качестве имени буфера):

execute 'diffget' a:w 

PS: Предпочитают использованием :normal!!); это позволяет избежать помех от сопоставлений.

+0

+1 btw @Ingo, 'exec 'foo' .'bar'' и' exec 'foo' 'bar'', какой формат вы предпочитаете? – Kent

Смежные вопросы