Как правильно настроить автоинденцию Vim для редактирования файлов Python?

83

У меня проблемы с настройкой Vim (7.1.xxx) для редактирования файлов Python (* .py). Отступы вроде нарушены (оптимально 4 пробела). Я следил за некоторыми руководствами, которые нашел через Google. По-прежнему никакого эффекта: / Пожалуйста, помогите

M_1
источник
2
В чем именно твоя проблема? Как нарушается отступ?
cschol
1
Какую платформу вы используете? Windows / Mac / Linux?
Джейми,

Ответы:

75

Я использую это на своем MacBook:

" configure expanding of tabs for various file types
au BufRead,BufNewFile *.py set expandtab
au BufRead,BufNewFile *.c set expandtab
au BufRead,BufNewFile *.h set expandtab
au BufRead,BufNewFile Makefile* set noexpandtab

" --------------------------------------------------------------------------------
" configure editor with tabs and nice stuff...
" --------------------------------------------------------------------------------
set expandtab           " enter spaces when tab is pressed
set textwidth=120       " break lines when line length increases
set tabstop=4           " use 4 spaces to represent tab
set softtabstop=4
set shiftwidth=4        " number of spaces to use for auto indent
set autoindent          " copy indent from current line when starting a new line

" make backspaces more powerfull
set backspace=indent,eol,start

set ruler                           " show line and column number
syntax on               " syntax highlighting
set showcmd             " show (partial) command in status line

(отредактировано, чтобы показывать только то, что связано с отступом / вкладками)

Дарен Томас
источник
1
Не используйте вкладки при редактировании языков в стиле C. s / noexpandtab / expandtab
badeip 01
@AlexKreimer, ты, наверное, прав - я написал это в 2008 году - это было давно . Я бы хотел обновить его, но я отказался от использования vim для большинства вещей. Обязательно вернитесь сюда и опубликуйте ссылку на лучший ответ (или напишите его самостоятельно), когда найдете лучшее решение!
Дарен Томас
@DarenThomas IMO, очень устаревший ответ
Alex Kreimer
15

Я использую:

$ cat ~/.vimrc
syntax on
set showmatch
set ts=4
set sts=4
set sw=4
set autoindent
set smartindent
set smarttab
set expandtab
set number

Но я собираюсь попробовать записи Дарена

танос
источник
2
Обратите внимание, что smartindentэто подходит только для редактирования файлов C, а не файлов Python (и в любом случае уже устарело; см. Stackoverflow.com/a/234578/37639 ).
corwin.amber 08
12

Более простой вариант: просто раскомментируйте следующую часть конфигурации (которая изначально закомментирована) в файле / etc / vim / vimrc:

    if has("autocmd")
      filetype plugin indent on
    endif
Тедди Белэй
источник
3

Убедитесь, что вы редактируете правильный файл конфигурации для VIM. Особенно, если вы используете окна, где файл может называться _vimrc вместо .vimrc, как на других платформах.

В типе vim

:help vimrc

и проверьте свой путь к файлу _vimrc / .vimrc с помощью

:echo $HOME

:echo $VIM

Убедитесь, что вы используете только один файл. Если вы хотите разделить свою конфигурацию на более мелкие части, вы можете получить другие файлы из вашего файла _vimrc.

:help source

Джейми
источник
1

Объединив решения, предложенные Дареном и Таносом, мы получили хороший файл .vimrc.

-----
" configure expanding of tabs for various file types
au BufRead,BufNewFile *.py set expandtab
au BufRead,BufNewFile *.c set noexpandtab
au BufRead,BufNewFile *.h set noexpandtab
au BufRead,BufNewFile Makefile* set noexpandtab

" --------------------------------------------------------------------------------
" configure editor with tabs and nice stuff...
" --------------------------------------------------------------------------------
set expandtab           " enter spaces when tab is pressed
set textwidth=120       " break lines when line length increases
set tabstop=4           " use 4 spaces to represent tab
set softtabstop=4
set shiftwidth=4        " number of spaces to use for auto indent
set autoindent          " copy indent from current line when starting a new line
set smartindent
set smarttab
set expandtab
set number

" make backspaces more powerfull
set backspace=indent,eol,start

set ruler                           " show line and column number
syntax on               " syntax highlighting
set showcmd             " show (partial) command in status line

Флавио Брито
источник
0

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

Габор
источник