2010-01-06 13 views
11

Ich habe Vim 7 (erweitert) auf CentOS 5, und es kommt mit allen üblichen Vim-Plugins/Skripte bereit zu gehen.Vim Python Einzug funktioniert nicht?

$ 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 

Ich würde denken, dass, wenn eine Datei in Py (vim file.py) endet öffnen würde diese Plugins automatisch laden, aber ich bin nicht sicher, ob das der Fall ist. Was ich will ist:

Drücken Sie TAB und erhalten vier Leerzeichen. Automatische Einrückung der nächsten Zeile für Suites, Conditionals usw.

Ich habe dies funktioniert, indem ich Tabstop, Shiftwidth usw. explizit in meiner .vimrc-Datei festlegen. Ist das nicht das, was die obigen Python Dateien sind? Warum muss ich diese Dinge in meinem .vimrc setzen? Wie bekomme ich diese Funktionen von den Vim-Plugins?

Aktuelle .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 

Antwort

2

tabstop Einstellung, Einrückungstiefe, etc ... in Ihrem vimrc korrekt ist. Diese legen Ihre globalen Einstellungen fest und dienen als Parameter für die Dateityp-spezifische Einrückungsunterstützung.

Die Spracheinzug-Plugins verwenden diese Einstellungen, setzen aber normalerweise auch einen für die Sprache geeigneten Einrückungsausdruck (:he inde). Daher sollte der Python-Indenter automatisch nach einer Blockeröffnungsanweisung (def, class, for ...) und nach einem schließenden (z. B. return, pass, continue ...) und nach den ts, sw, ... hast du festgelegt.

Wenn Sie immer noch unsicher sind, ob das Plugin für einen Puffer geladen wird, tun Sie einfach :filetype, um die Erkennung, Plugin und Einzug Einstellungen anzuzeigen, und :set ft?, um den erkannten Typ zu sehen.

+0

So ist die ../indent/python.vim Datei zusammenfassen nicht in der Lage ist, die tabstop der Einstellung, Einrückungstiefe, etc. für mich ... also müssen sie innerhalb der vimrc angegeben werden? Was passiert, wenn Tabstop je nach Dateityp unterschiedlich sein soll? Kann ich diese vimrc-Einstellungen in der Datei indent/python.vim ablegen, damit sie nur für Python-Dateien geladen werden? – CarpeNoctem

+0

Sie können diese Einstellungen zu indent/python.vim hinzufügen und erhalten dieses Ergebnis, aber eine bessere Möglichkeit wäre, file type spezifische Einstellungen als autocmds hinzuzufügen, die nach dem Laden eines Puffers ausgeführt werden. (: er au) – abeyer

5

Mein Verständnis ist, dass die python.vim-Datei möglicherweise nur eine Syntax-Highlighting-Datei ist, weil Python-Dateien auf mehrere Arten eingerückt werden können. PEP8 schreibt vier Leerzeichen vor, aber Legacy-Dateien können unterschiedlich sein, einschließlich der Verwendung von Tabs.

Einige unserer alten Python-Dateien verwenden tatsächlich zwei Leerzeichen pro Einzug. Also lasse ich Python-Einrückungen an Vim und konfiguriere es pro Datei und Dateityp. Die folgende Zeile in .vimrc gibt mir Python-spezifische Einstellungen, die sich von meinen xml, xhtml und html (zwei Leerzeichen) unterscheiden.

au FileType python setl shiftwidth=4 tabstop=4 

können Sie auch bestimmte Einstellungen von Datei mit einem modeline eingestellt, was sehr praktisch ist, wenn Sie Legacy-Dateien zu tun haben.

# vi: set tabstop=2 expandtab textwidth=70 filetype=python: