这是因为,当MATLAB打开时,它会跟踪加载到编辑器中的文件以及每个文件的显示参数。这些信息存储在以下位置。
fullfile(prefdir, 'MATLABDesktop.xml')
没有为你当前在活跃MATLAB编辑器中打开每个文件的条目。
当您在重新启动时选择不记住文件的首选项时,会导致应用程序退出时从该文件中删除所有这些条目。
当你有多个同时运行的MATLAB实例(同一版本)时,它们都依赖于同一个文件。所以当你用一个实例打开一个文件时,然后启动一个新实例,新实例加载该文件并从中填充编辑器状态。
至于修复这种行为,我认为这可能是困难的。您可以也许编辑您的startup.m文件以从MATLABDesktop.xml文件中删除所有这些条目。即使如此,我不确定这会如何影响其他正在运行的实例的稳定性。
脚本执行此清洁
如果你想有一个脚本这是能够做到这一点,同时保留存在的配置文件中的所有其他设置,下面应该工作。
filename = fullfile(prefdir, 'MATLABDesktop.xml');
xml = xmlread(filename);
% Find ALL entries in the file and determine "Class" attribute
clients = xml.getElementsByTagName('Client');
clients = arrayfun(@(x)clients.item(x-1), 1:clients.getLength, 'uni', 0);
classes = cellfun(@(x)char(x.getAttribute('Class')), clients, 'uni', 0);
% Find all EditorViewClient entries
func = @(x)isempty(regexp(x, '\.EditorViewClient$', 'once'));
toremove = ~cellfun(func, classes);
clients = clients(toremove);
% Remove all client entries that need to be removed
for k = 1:numel(clients)
parent = clients{k}.getParentNode();
parent.removeChild(clients{k});
end
% Write the remaining data back to the file
xmlwrite(filename, xml);