使用 formatexpr/prg (gq) 的 Vim 格式 python 给出了不正确的结果

使用 formatexpr/prg (gq) 的 Vim 格式 python 给出了不正确的结果

我在 Python 与注释交互时遇到了麻烦。这可以分为两个问题。我认为它们是相关的,所以我会将它们都发布在这里。

问题 1。

当使用gq自动换行 Python 代码时,会产生错误的结果。例如,给定以下代码:

# 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 

选择它并运行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

相比之下,在 YAML 或 Coffee-script 中运行同样的事情会产生以下结果:

# 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

人们期望 Python 的注释规则遵循与 Coffee-script 或 YAML 或其他具有#基于行注释的规则相同的原则。

问题 2。

开始注释会导致光标跳转到行首,但实际上它应该继续在当前深度。

例如:

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

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

这与PEP 8:块注释- 添加注释应按如下方式缩进:

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

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

设置

我正在使用很棒的 Vundle 脚本,我正在使用的插件是:

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

从我的 中.vimrc,以下是与 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

概括

由于 Python 比 YAML 和 Coffee-script 更古老、更成熟,因此我对 Vim 产生错误结果感到惊讶和沮丧。我不清楚到底发生了什么 - 我将非常感激任何想法和指导。当然,如果我弄明白了,我会发布我的结论。

相关内容