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 を提供する必要はないと思いますが、必要な場合はここにもアップロードできます)。
何か案は?