使用=命令时,Vim不能正确缩进Python代码

时间:2013-02-10 19:05:47

标签: python vim

当我使用=命令缩进整个Python文件或某个部分时,它将无法正确缩进它。这是我的vimrc:

set nocompatible
syntax on
set ruler
set tabstop=2
set softtabstop=2
set shiftwidth=2
set expandtab
set smarttab
set hlsearch
set incsearch
set ignorecase
set autoindent
" turn on line numbers:
set number
" Toggle line numbers and fold column for easy copying:
nnoremap <F2> :set nonumber!<CR>:set foldcolumn=0<CR>
nnoremap <F4> :set nospell!<CR>
nnoremap <F3> :set invpaste paste?<Enter>
imap <F3> <C-O><F3>
set pastetoggle=<F3>

filetype on
filetype plugin indent on
filetype plugin on

" Execute file being edited with <Shift> + e:
map <buffer> <S-e> :w<CR>:!/usr/bin/env python % <CR>
let g:solarized_termcolors=256
set background=dark
colorscheme solarized 
"set spell spelllang=en_us

set backspace=indent,eol,start
autocmd FileType python set complete+=k~/.vim/syntax/python.vim isk+=.,(
autocmd VimEnter * NERDTree

此外,当我使用w或b循环浏览我的python文件时,或者当删除它时,将无法正确删除。例如,它不会停止。或(当删除他们之前的作品时,甚至会删除它们。

2 个答案:

答案 0 :(得分:2)

你应该摆脱filetype onfiletype plugin onfiletype plugin indent on是你需要的唯一一条线。

修改

.(的问题几乎肯定是由iskeyword引起的。我依稀记得有人遇到同样的问题,因为他/她在一些被误导的博客文章中发现他/她需要基于字典的完成。因为他/她的词典文件中的条目.method(形式,他/她需要将.视为关键字字符。

编辑Python文件时尝试此命令:

:verbose set iskeyword?

它应该返回逗号分隔的值列表,其中包含.(以及设置它的位置。它最有可能是第三方python ftplugin,因为默认的ftplugin不会触及iskeyword

此行是导致. / (问题的原因:

autocmd FileType python set complete+=k~/.vim/syntax/python.vim isk+=.,(
  1. 你绝对不需要那种完成机制,因为Vim的默认omnicompletion足够强大。

  2. 由于如何实现完成机制以及如何编写字典文件,Vim必须将.(视为关键字字符。

  3. 您的自定义/语法文件可能甚至不是这样形成的,所以此设置甚至可能无效。

  4. iskiskeyword的缩写形式,是定义关键字字符的选项。

  5. 您似乎从其他人那里复制了设置而不理解他们做了什么。一个简单的事实是,你的问题的答案在你自己的~/.vimrc中应该足以告诉你这个想法是多么错误。

答案 1 :(得分:0)

你可以使用:set paste正常粘贴,我有一个非常方便的宏:

set pastetoggle=<F10>

您可以将其设置为任何其他密钥,只需将其添加到.vimrc文件

即可