如何修复vim中破坏的自动缩进

我试图使用vim 7.2(在Windows XP上)自动缩进和格式化一些VHDL和Matlab代码。 为此,我尝试使用“gg = G”命令。 但是这不能正常工作。 代码没有正确缩进。

举个例子,我有以下源代码,它已经被正确地缩进:

% This function is based on the code_g_generator() function
function [v_code] = get_code(n_code_number)
% There is no need to clear the persistent variables in this function
mlock 
%% Initialize the internal variables
persistent n_fifo_top;
if isempty(n_fifo_top)
    n_fifo_top = 1;
end

N_MEMORY_SIZE = 4;
if n_code_number > 4
    c_saved_code_fifo = {-1*ones(1, N_MEMORY_SIZE)};
end

如果我使用“gg = G”命令,我会得到:

% This function is based on the code_g_generator() function
function [v_code] = get_code(n_code_number)
% There is no need to clear the persistent variables in this function
mlock 
%% Initialize the internal variables
persistent n_fifo_top;
if isempty(n_fifo_top)
        n_fifo_top = 1;
    end

    N_MEMORY_SIZE = 4;
    if n_code_number > 4
        c_saved_code_fifo = {-1*ones(1, N_MEMORY_SIZE)};
    end

正如你所看到的,在这个例子中,Vim在第一个“if”块之后错误地缩进了代码。 对于其他文件,我会遇到类似的问题(尽管不一定在第一个块上)。

对于VHDL文件,我遇到类似的问题。

我尝试过使用autoindent,smartindent和cindent设置的不同组合。 在经过这些论坛之后,我还确保将“语法”,“文件类型”,“文件类型缩进”和“文件类型插件缩进”设置为打开。 不过,它不起作用。 另外,如果我做“设置语法?” 我得到matlab文件的“matlab”和vhdl文件的“vhdl”,这是正确的。 如果我做了“设置indentexpr?” 我为matlab文件获得“GetMatlabIndent(v:lnum)”,为vhdl文件获得“GetVHDLindent()”。

通过在不同的计算机上安装VIM(其中VIM从未安装过),尝试隔离问题(并确保它不是由于我安装的某个vim插件)。 在那台电脑上,我遇到了同样的问题(这就是为什么我不认为我需要给你.vimrc,但如果你需要它,我也可以在这里上传)。

有任何想法吗?


参见这个wiki页面,了解vim中自动缩进的不同方法的解释。

在这个页面上,你可以找到一个matlab的缩进文件,你可以使用基于文件类型的缩进。 对于VHDL,这是类似的。

链接地址: http://www.djcxy.com/p/49533.html

上一篇: How to fix broken automatic indentation in vim

下一篇: Changing Vim indentation behavior by file type