Vim-Format-Python mit formatexpr / prg (gq) liefert ein falsches Ergebnis

698
Brian M. Hunt

Ich habe Probleme mit Pythons Interaktion mit Kommentaren. Diese können in zwei Themen unterteilt werden. Ich gehe davon aus, dass sie verwandt sind, also werde ich beide hier posten.

Fehler 1.

Wenn gqPython-Code automatisch umbrochen wird, führt dies zu einem falschen Ergebnis. Zum Beispiel das gegeben:

# Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod  # tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim  # veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea # commodo consequat. Duis aute irure dolor in reprehenderit in voluptate  

Wenn Sie es auswählen und ausführen, erhalten Sie gq:

# Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod # tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim # veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea # commodo consequat. Duis aute irure dolor in reprehenderit in voluptate 

Im Gegensatz dazu führt das Gleiche in YAML oder Coffee-Script aus:

# Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod # tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim # veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea # commodo consequat. Duis aute irure dolor in reprehenderit in voluptate 

Man könnte erwarten, dass die Regeln von Python sich an dieselben Prinzipien halten wie Coffee-Script oder YAML oder andere, die #Zeilenkommentare haben .

Ausgabe 2.

Beim Starten eines Kommentars springt der Cursor an den Anfang der Zeile, wenn er in der aktuellen Tiefe fortgesetzt wird.

Zum Beispiel:

class Hello(object): """Something""" # The comment starts here  # or worse def hi(self): # again, here pass 

Dies steht im Gegensatz zu dem, was in PEP 8 dargelegt ist : Kommentare blockieren - Ein Kommentar sollte wie folgt eingerückt werden:

class Hello(object): """Something""" # The comment starts here  # or worse def hi(self): # again, here pass 

die Einstellungen

Ich verwende das fantastische Vundle-Skript und die Plugins, die ich verwende, sind:

Bundle 'gmarik/vundle' " navigation / display Bundle 'kien/ctrlp.vim' Bundle "tpope/vim-fugitive" Bundle "ton/vim-bufsurf" python import sys; sys.path.append("") set rtp +=~/.vim/bundle/powerline/powerline/bindings/vim Bundle 'Lokaltog/powerline' Bundle 'nathanaelkane/vim-indent-guides' Bundle 'altercation/vim-colors-solarized'  " syntax Bundle 'jQuery' Bundle 'kchmck/vim-coffee-script' " Bundle 'scrooloose/syntastic' Bundle 'Syntastic' Bundle "groenewege/vim-less" Bundle "skammer/vim-css-color" Bundle "hail2u/vim-css3-syntax"  " Editing Bundle 'AndrewRadev/splitjoin.vim' Bundle 'tpope/vim-unimpaired' Bundle 'rstacruz/sparkup.git' Bundle 'klen/python-mode' " Bundle 'sjl/gundo.vim' Bundle 'mbbill/undotree' " file-type based configs filetype plugin indent on 

Aus meiner .vimrc, hier sind die Python-Einstellungen:

let g:syntastic_python_checker = 'pyflakes' let g:syntastic_python_flake8_args =  \ '--ignore=W191,E501,E121,E122,E123,E128,E225,W291' let pymode_lint = 0 au FileType python setlocal expandtab shiftwidth=4 tabstop=8 \ formatoptions+=croq softtabstop=4 smartindent \ cinwords=if,elif,else,for,while,try,except,finally,def,class,with let python_highlight_all=1 let python_highlight_exceptions=0 let python_highlight_builtins=0 

Zusammenfassung

Da Python etwas älter und reifer ist als YAML und Coffee-Script, bin ich überrascht und frustriert, dass Vim die falschen Ergebnisse liefert. Mir ist nicht klar, was los sein könnte - und ich wäre für alle Gedanken und Anweisungen dankbar. Wenn ich es herausfinde, werde ich natürlich meine Schlussfolgerungen veröffentlichen.

0
Was ist das "kleine" Sache? romainl vor 10 Jahren 0
@romainl Wenn Sie einen Block markieren und gqdrücken, dass Vim mir mitteilte, der Befehl hieß "Nmove", obwohl die Dokumente sagen, es sei "formatexpr", falls definiert, andernfalls "formatprg", falls definiert, oder anderweitig "erfolgt intern". Brian M. Hunt vor 10 Jahren 0
Versuchen Sie es ohne Plugins und mit einem leeren .vimrc (außer einer Zeile: `au FileType python setlocal textwidth = 79`) DBedrenko vor 9 Jahren 0

0 Antworten auf die Frage