Il formato python di Vim che utilizza formatexpr / prg (gq) fornisce risultati errati


0

Sto avendo problemi con l'interazione di Python con i commenti. Questi possono essere suddivisi in due numeri. Mi aspetto che siano imparentati, quindi li posterò entrambi qui.

Numero 1.

Quando si usa GQ per avvolgere automaticamente il codice Python dà il risultato sbagliato. Ad esempio, dato questo:

# 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 

Selezionandolo e correndo GQ dà:

# 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

Al contrario, eseguire la stessa cosa in YAML o Coffee-script dà:

# 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

Ci si aspetterebbe che le regole dei commenti di Python rispettino gli stessi principi di Coffee-script o YAML o di altri che hanno # commenti lineari

Numero 2.

L'avvio di un commento fa saltare il cursore all'inizio della riga, quando dovrebbe continuare alla profondità corrente.

Per esempio:

class Hello(object):
   """Something"""
# The comment starts here

# or worse
  def hi(self):
# again, here
      pass

Questo è contrario a ciò che viene esposto da PEP 8: blocco dei commenti - l'aggiunta di un commento dovrebbe indentare come segue:

class Hello(object):
   """Something"""
   # The comment starts here

  # or worse
  def hi(self):
      # again, here
      pass

impostazioni

Sto usando il fantastico script Vundle, e i plugin che sto usando sono:

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

Dal mio .vimrc, ecco le impostazioni relative a Python:

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

Sommario

Dato che Python è un po 'più vecchio e maturo di YAML e Coffee-script, sono sorpreso e frustrato dal fatto che Vim stia producendo risultati sbagliati. Non è chiaro per me cosa potrebbe succedere - e sarei grato per qualsiasi pensiero e direzione. Certo che se lo capisco, posterò le mie conclusioni.


Cos'è questa cosa "nmove"?
romainl

@romainl Quando evidenzi un blocco e premi & lt; kbd & gt; gq & lt; / kbd & gt; Vim mi stava dicendo che il comando era stato chiamato Nmove, anche se i documenti dicono che lo è formatexpr se definito, altrimenti formatprg se definito, o altrimenti "fatto internamente".
Brian M. Hunt

Prova senza plugin e con un .vimrc vuoto (eccetto per una riga: au FileType python setlocal textwidth=79 )
DBedrenko
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.