2013-08-30 3 views
0

Я добавляю аббревиатуры в autocmds к моему vimrc. Они заключаются в следующем:Vim iabbrev в моем vimrc не работает

augroup caucmds 
    autocmd! 
    autocmd FileType c :iabbrev iff if()<left> 
    autocmd FileType c :iabbrev elseif else if()<left> 
    autocmd FileType c :iabbrev whilee while()<left> 
    autocmd FileType c :iabbrev elsee else()<left> 
    autocmd FileType c :iabbrev forr for()<left> 
augroup END 

Однако они не работают. Нужно ли мне избегать определенных персонажей или что-то еще? Запуск их внутри файла сам по себе тоже не работает.

+0

Я не думаю, что вам нужны двоеточия. – pandubear

+0

Колонии необязательны там, да. – elmart

+0

Убрав двоеточие, казалось, исправило его для верхней. Однако остальные все еще не работают. – thaweatherman

ответ

2

Он должен работать с или без двоеточий (они здесь избыточны).

Вы установили эти автокоманды для запуска события FileType для типа файла c.

Таким образом, при открытии любого файла C, вы можете ввести iff<Space> или iff<Tab> или iff<Enter> или iff<Esc>, чтобы вызвать сокращение и вставить расширения. Обратите внимание, что аббревиатура запускается только после того, как вы как-то указали ее конец.

Если Filetype c не распознается для файлов C, то вы, вероятно, отсутствует линия

filetype plugin indent on 

в вашем vimrc.

И вы должны использовать нерекурсивную команду inoreabbrev вместо iabbrev.

+0

'filetype plugin indent on' находится в моем vimrc. Также да, я тестирую файл .c – thaweatherman

+0

Замечание о нерекурсивном сопоставлении с' inoreabbrev' очень важно. см. [Сравнение Стива Лоша] (http://learnvimscriptthehardway.stevelosh.com/chapters/05.html) рекурсивных и нерекурсивных отображений для дальнейшего объяснения. – jfmercer

1

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

augroup caucmds 
    autocmd! 
    autocmd FileType c :iabbrev <buffer> iff if()<left> 
    autocmd FileType c :iabbrev <buffer> elseif else if()<left> 
    autocmd FileType c :iabbrev <buffer> whilee while()<left> 
    autocmd FileType c :iabbrev <buffer> elsee else()<left> 
    autocmd FileType c :iabbrev <buffer> forr for()<left> 
augroup END 

Я пробовал это, и он работает для меня. Обратите внимание, что аббревиатуры не запускаются до тех пор, пока вы не нажмете букву без ключевого слова. Это, например, для iff, чтобы вы могли набрать iff<space>. Также обратите внимание, что вы должны редактировать файл c для их работы, поскольку вы определили их только для файлов c.

Если он все еще не работает, возможно, у вас есть конфликт. Попробуйте это, чтобы узнать, кто последний параметр, который сокращен:

:verbose iabbrev iff 
+0

': verbose ibbrev iff' возвращает« Аббревиатура не найдена », даже после добавления к каждой строке – thaweatherman

+0

У Yoy есть опечатка там (ibbrev вместо iabbrev). Но я думаю, что это опечатка, копируя ее там. Затем вы работаете в ac-файле при выполнении этого? Выполнить ': set ft?' when что c-файл открыт. Если он не говорит 'filetype = c' в строке состояния, то вы не обнаруживаете типы файлов. Это тот случай? – elmart

+0

Да, это файл ac. И я заметил опечатку, когда Вим завопил у меня :). Кажется, что w сейчас.Я обновлял свой vimrc, когда меняю вещи, поэтому я не знаю, в чем проблема. Спасибо за вашу помощь! Upvoted – thaweatherman

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