2

我目前正在重新格式化一个 python 项目以遵循 4 个空格缩进样式。该项目在 VIM 中使用以下插件完成:fugitive、snipmate、surround、git、supertab、minibufexpl、command-t。pyflakes-pathogen、ack、gundo、pydoc、pep8、py.test、makegreen、tasklist、nerdtree、ropevim。

我的 .vimrc 目前是:

set tabstop=4
set shiftwidth=4
set expandtab

let mapleader=","

filetype off

call pathogen#runtime_append_all_bundles()
call pathogen#helptags()


set foldmethod=indent
set foldlevel=99

map <leader>td <Plug>TaskList
map <leader>g :GundoToggle<CR>

syntax on
filetype on
filetype plugin indent on

let g:pyflakes_use_quickfix = 0

let g:pep8_map='<leader>8'

au FileType python set omnifunc=pythoncomplete#Complete
let g:SuperTabDefaultCompletionType = "context"

set completeopt=menuone,longest,preview

该项目不是我的,我想保持代码在功能上与原始代码保持不变。

该代码由一些赋值操作组成。每个的左侧是变量名,右侧是一个非常非常长的列表,其中包含多个嵌套列表。

如果我尝试使用 VIM 的重新缩进功能 "gg=G" 甚至 "100==" 从分配开始,VIM 将正确缩进分配右侧的前 50 行。然而,在右侧第 50 行之后,VIM 开始将第二级缩进另外四个空格。

animations = [
        ["stand", 0, amf_client_prediction,
            #   [3.0, "myanim", 0, 50, arf_cyclic|arf_loop_pos_0_25],
            [3.0, "anim_human", 50, 52, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.25],
            [3.0, "anim_human", 60, 62, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.75],
            [3.0, "anim_human", 70, 72, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.25],
            [3.0, "anim_human", 80, 82, arf_use_stand_progress|arf_cyclic|arf_two_handed_blade, 0, (0, 0, 0), 0.5],
            ##   [35.0, "stand_woman", 0, 1059, arf_use_stand_progress|arf_cyclic|arf_two_handed_blade, 0, (0, 0, 0), 0.5],
            ##   [43.0, "stand_woman_public", 0, 1313, arf_use_stand_progress|arf_cyclic|arf_two_handed_blade, 0, (0, 0, 0), 0.5],
            #  [35.0, "tavern_stand", 0, 472, arf_cyclic|arf_loop_pos_0_25],
            ],
        ["stand_man", 0, amf_client_prediction,
            [11.0, "stand_man", 0, 315, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.25],
            ],
        ["stand_player_first_person", 0, amf_client_prediction,
            [3.5, "anim_human", 90, 100, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.25],
            [3.5, "anim_human", 110, 120, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.25],
            ],
        ["jump", acf_enforce_lowerbody, amf_priority_jump|amf_play|amf_client_prediction|amf_continue_to_next,
            ##   [1.09, "jump", 22, 48, arf_blend_in_1],
            [1.0, "jump", 22, 46, arf_blend_in_1],
            ##   [0.8, "anim_human", 270, 272, arf_blend_in_4],
            ],
        ["jump_loop", acf_enforce_lowerbody, amf_priority_jump|amf_play|amf_client_prediction,
            ##   [0.8, "jump_loop", 0, 30, arf_blend_in_2|arf_cyclic],
            [0.5, "jump_loop", 0, 14, arf_blend_in_3|arf_cyclic],
            ],
        ["jump_end", acf_enforce_lowerbody, amf_priority_jump_end|amf_play|amf_client_prediction,
            ##   [0.1, "jump", 48, 55, arf_blend_in_1],
            [0.3, "jump", 48, 55, arf_blend_in_2],
            ],
        ["jump_end_hard", acf_enforce_lowerbody, amf_priority_jump_end|amf_play|amf_client_prediction,
            ##   [0.8, "jump_end_hard", 29, 54, arf_blend_in_1],
            [0.6, "jump_end_hard", 36, 54, arf_blend_in_1],
            ],
        ["stand_unarmed", 0, amf_client_prediction,
            [8, "noweapon_cstance", 0, 100, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.25],
            ],
        ["stand_single", 0, amf_client_prediction,
            [9.0, "sword_loop01", 0, 200, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.25],
            ],
        ["stand_greatsword", 0, amf_client_prediction,
            [6.0, "greatsword_cstance", 0, 91, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.25],  
            ],
        ["stand_staff", 0, amf_client_prediction,
            [2.0, "staff_cstance", 0, 60, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.0],  
            ],
        ["stand_crossbow", 0, amf_client_prediction,
            [2.0, "staff_cstance", 0, 60, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.0],  
            ],
        ["turn_right", acf_enforce_lowerbody, amf_play|amf_client_prediction,
                [0.95, "stand_man", 0, 30, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.25], #TODO
                ],
        ["turn_left", acf_enforce_lowerbody, amf_play|amf_client_prediction,
                [0.95, "stand_man", 0, 30, arf_use_stand_progress|arf_cyclic, 0, (0, 0, 0), 0.25], #TODO
                ],
        ["turn_right_single", acf_enforce_lowerbody, amf_play|amf_client_prediction,
                [0.95, "turn_man_onehanded", 0, 23, arf_cyclic|blend_in_walk|arf_make_walk_sound,pack2f(0.4,0.9), (0, 0, 0), 0.0],
                ],
        ["turn_left_single", acf_enforce_lowerbody, amf_play|amf_client_prediction,
                [0.95, "turn_man_onehanded", 30, 53, arf_cyclic|blend_in_walk|arf_make_walk_sound,pack2f(0.4,0.9), (0, 0, 0), 0.0],
                ],
        ["turn_right_staff", acf_enforce_lowerbody, amf_play|amf_client_prediction,
                [0.95, "turn_man_staff", 0, 20, arf_cyclic|blend_in_walk|arf_make_walk_sound,pack2f(0.4,0.9), (0, 0, 0), 0.0],
                ],
        ["turn_left_staff", acf_enforce_lowerbody, amf_play|amf_client_prediction,
                [0.95, "turn_man_staff", 30, 50, arf_cyclic|blend_in_walk|arf_make_walk_sound,pack2f(0.4,0.9), (0, 0, 0), 0.0],
                ],
        ["turn_right_greatsword", acf_enforce_lowerbody, amf_play|amf_client_prediction,
                [0.95, "turn_man_greatsword", 0, 20, arf_cyclic|blend_in_walk|arf_make_walk_sound,pack2f(0.4,0.9), (0, 0, 0), 0.0],
                ],
        ["turn_left_greatsword", acf_enforce_lowerbody, amf_play|amf_client_prediction,
                [0.95, "turn_man_greatsword", 30, 50, arf_cyclic|blend_in_walk|arf_make_walk_sound,pack2f(0.4,0.9), (0, 0, 0), 0.0],
                ],
        ["prepare_kick_0", acf_enforce_lowerbody, amf_priority_kick|amf_play|amf_client_prediction|amf_continue_to_next,
                [0.05, "kick_rightleg", 10, 12, arf_blend_in_3],
                ],

VIM 是否使用某种缓冲区来设置将跟踪缩进的最大行数?如果是这样,有没有办法增加这个缓冲区的大小?

否则,如果这仅仅是内置缩进逻辑的错误,是否存在更强大的第三方解决方案可以为这种特定情况提供缩进功能?

如果需要更多信息,我会更新。

4

1 回答 1

4

hmmm 在 $VIMRUNTIME/indent/python.vim 中它看起来像是在扫描过去的 50 行以获取上下文

let s:maxoff = 50        " maximum number of lines to look backwards for ()

您可以通过检查当前缓冲区的 indentexpr 来查看 VIM 用于缩进的内容

:set indentexpr?   

返回, indentexpr=GetPythonIndent(v:lnum)

filetype plugin indent on.vimrc 中的内容是加载 python 文件时加载它的内容

于 2012-07-25T03:40:06.757 回答