如何修复vim自动缩进失效问题

5
我正在尝试使用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”块之后错误地缩进了代码。对于其他文件,我也遇到了类似的问题(虽然不一定是在第一个if块上)。
对于VHDL文件,我也遇到了类似的问题。
我尝试使用不同的autoindent、smartindent和cindent设置组合。在查看这些论坛后,我还确保“syntax”、“filetype”、“filetype indent”和“filetype plugin indent”设置为开启状态。但仍然无效。此外,如果我执行“set syntax?”,Matlab文件会返回“matlab”,而vhdl文件会返回“vhdl”,这是正确的。如果我执行“set indentexpr?”,Matlab文件会返回“GetMatlabIndent(v:lnum)”,而vhdl文件会返回“GetVHDLindent()”。
为了尝试隔离问题(并确保它不是由我安装的vim插件之一引起的),我在另一台从未安装过vim的计算机上进行了全新安装。在该计算机上,我遇到了相同类型的问题(这就是为什么我认为我不需要给您提供.vimrc文件,但如果您需要,我也可以在此处上传它)。
有任何想法吗?
1个回答

1

请参阅this维基页面,了解vim中自动缩进的不同方法的解释。

this页面上,您可以找到一个matlab的缩进文件,您可以使用基于文件类型的缩进。这里有一个类似的VHDL文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接