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」がオンに設定されていることも確認しました。それでも、うまくいきません。また、「構文を設定しますか?」matlab ファイルの場合は「matlab」、vhdl ファイルの場合は「vhdl」と表示されますが、これは正しいです。「set indentexpr?」を実行すると、matlab ファイルの場合は "GetMatlabIndent(v:lnum)"、vhdl ファイルの場合は "GetVHDLindent()" を取得します。

別のコンピューター (VIM が以前にインストールされたことがない) に VIM を新規インストールして、問題を切り分ける (そして、インストールした vim プラグインのいずれかが原因ではないことを確認する) には。そのコンピューターでも同じような問題が発生します (そのため、.vimrc を提供する必要はないと思いますが、必要な場合はここにもアップロードできます)。

何か案は?

4

1 に答える 1

1

vim での自動インデントのさまざまな方法の説明については、このwiki ページを参照してください。

このページではファイルタイプ ベースのインデントで使用できる matlab のインデント ファイルを見つけることができます。これは、 VHDLの同様のものです。

于 2010-09-27T00:51:59.210 に答える