2013-02-22 2 views
-1

исходный код:vim: материя - это exec или нормальная команда?

function! myfunc() 
    execute "normal! i\<c-r>=12+34\<cr>" 
endfunc 

inoremap <silent><Tab> <C-R>=myfunc()<CR> 

я имею выше код в моем .vimrc, что означает, если я ввожу <tab> в режиме вставки, а затем он будет добавлять 46. например, открыть новый файл, типа " hello "(здесь нет двойной кавычки), а затем нажмите <tab> ключ, результатом будет« hello46 ». Пока это не так. так почему?

+0

Я не думаю, что вы можете сделать это с помощью регистра выражения. Кажется, что вы хотите, чтобы myfunc просто вернул 12 + 34 –

+0

Если вы хотите что-то поместить в курсор, используйте , как в inoremap Myfunc() также ваша функция должна быть капитализирована с самого начала. Я пытаюсь понять, почему он не будет перезаписывать вкладку сейчас, если вы замените вкладку «a», вы получите то, что хотите. –

+0

да, конечно. Фактически, я хочу сделать это, набрав , чтобы вставить строку в текущую позицию. я просто упростил его до уровня выше. Спасибо за ответ! – kevin

ответ

1

Это, как вы делаете простую математику:

execute "normal! i" . (12 + 34) 

Но вы могли бы использовать эту форму:

inoremap <expr> <tab> 12 + 34 

редактировать

Ваши ошибки:

  1. Названия функций должны начинаться с капитала.
  2. <C-r>= используется для вставки результата выражения, но ваша функция ничего не возвращает: вместо этого выполняется команда нормального режима.

Эта версия вашего фрагмента работает. Функция возвращает то, что вы можете вставить с помощью <C-r>= в вашем картотеке:

function! MyFunc() 
    let myvar = "foo" 
    return myvar 
endfunc 

inoremap <silent> <Tab> <C-r>=MyFunc()<CR> 
+0

похоже, все еще не работает, см. Ниже код. – kevin

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