Отступ Vim Python не работает? - PullRequest
11 голосов
/ 06 января 2010

У меня есть Vim 7 (улучшено) на CentOS 5, и он поставляется со всеми обычными плагинами / скриптами Vim, готовыми к работе.

$ find /usr/share/vim/vim70/ -name \*python\*
/usr/share/vim/vim70/syntax/python.vim
/usr/share/vim/vim70/ftplugin/python.vim
/usr/share/vim/vim70/indent/python.vim
/usr/share/vim/vim70/autoload/pythoncomplete.vim

Я думаю, что при открытии файла, оканчивающегося на .py (vim file.py), он автоматически загрузит эти плагины, но я не уверен, что это так. То, что я хочу, это:

Нажмите TAB и получите четыре пробела. Автоматический отступ следующей строки для наборов, условий и т. Д.

У меня это работает путем явной установки tabstop, shiftwidth и т. Д. В моем файле .vimrc. Разве не для этого предназначены файлы Python ? Почему я должен установить эти вещи в моем .vimrc? Как получить эти функции из плагинов Vim?

Текущий .vimrc:

syntax on
set hls
set expandtab
set textwidth=0
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set backspace=indent,eol,start
set incsearch
set ignorecase
set ruler
set wildmenu
set smarttab
filetype indent on
filetype on
filetype plugin on

Ответы [ 2 ]

5 голосов
/ 06 января 2010

Насколько я понимаю, файл python.vim, возможно, является файлом подсветки синтаксиса, поскольку файлы Python могут иметь отступы несколькими способами. PEP8 предписывает четыре пробела, но устаревшие файлы могут отличаться, включая использование вкладок.

Некоторые из наших старых файлов Python фактически используют два пробела на отступ. Поэтому я оставляю отступы Python для Vim и настраиваю его для каждого файла и для каждого типа файла. Следующая строка в .vimrc дает мне специфичные для Python настройки, которые отличаются от, скажем, my xml, xhtml и html (два пробела).

au FileType python setl shiftwidth=4 tabstop=4

Вы также можете установить определенные настройки по файлу с помощью modeline , что удобно, если у вас есть устаревшие файлы.

# vi: set tabstop=2 expandtab textwidth=70 filetype=python:
2 голосов
/ 06 января 2010

Настройка tabstop, shiftwidth и т. Д. В вашем vimrc верна. Они устанавливают ваши глобальные настройки, а также служат параметрами для поддержки отступов для конкретного типа файла.

Плагины отступа языка используют эти настройки, но обычно также устанавливают выражение отступа (:he inde), соответствующее языку. Таким образом, индентор Python должен автоматически отступать после оператора открытия блока (def, class, for ...) и отступать после закрывающего (return, pass, continue ...) и делать это в соответствии с ts, sw, ... вы установили.

Если вы все еще не уверены, загружается ли плагин для буфера, просто наберите :filetype, чтобы показать настройки обнаружения, плагина и отступа, и :set ft?, чтобы увидеть обнаруженный тип.

...