Vimrc autocmd запускает команду вместо сопоставления

Я хочу добавить горячую клавишу в свой vim для запуска моих файлов python, поэтому я добавил следующую строку в свой vimrc:

autocmd FileType python map <F5> :w|!python3 %

Но при открытии файла вместо запуска autocmd он запускает python с моим файлом.

Для меня это ничем не отличается от того, что предлагают многие учебники по использованию autocmd и map, поэтому я хотел бы знать, что именно здесь происходит, а не ожидаемое поведение.


person Dávid Kerekes    schedule 11.12.2015    source источник


Ответы (1)


Ваша команда :map заканчивается разделителем команд |; остальное уже выполняется, когда запускается :autocmd. Вам нужно экранировать его (\|), или лучше использовать специальный символ <Bar>:

autocmd FileType python nnoremap <buffer> <F5> :w<Bar>!python3 %<CR>

Сп. :help map_bar. Кроме того, вы должны использовать :noremap; это делает сопоставление невосприимчивым к переназначению и рекурсии. И (как предложил @PeterRincker) сделать сопоставление буфера локальным, чтобы оно применялось только к буферам Python).


Ваш подход :autocmd FileType хорош для нескольких отображений, но он плохо масштабируется. Если у вас есть :filetype plugin on в вашем ~/.vimrc, вы можете включить наши сопоставления в отдельный скрипт ~/.vim/ftplugin/python_mappings.vim.

person Ingo Karkat    schedule 11.12.2015
comment
Вероятно, лучше всего использовать локальное отображение буфера через <buffer>. См. :h :map-local. - person Peter Rincker; 11.12.2015