是否有使用当前名称将打开文件保存到当前目录的快捷方式?如果我下载多个具有相同名称的文件,则会进入我的“下载”文件夹,最终会使用function (1).m
而不是function.m
这样的名称。
此时,通过我的Web浏览器打开文件可以轻松打开文件并查看内容 - MATLAB查看文件扩展名并打开它。但是,如果它是一个函数,我必须在我能够使用代码之前另存为并移动/重命名文件。
编辑:由于MATLAB坚持文件名与函数名相同,我希望有一个快捷方式可以将打开的文件直接保存到当前的MATLAB路径并对其进行相应的命名。
由于MATLAB约定文件名与函数名相同,我希望有一个快捷方式可以将打开文件直接保存到当前MATLAB路径,并根据文件中指定的函数名称对其进行命名。
答案 0 :(得分:2)
您将需要一个始终位于Matlab路径上的目录。这可以通过adding one in the startup.m
script实现。
然后你应该将以下函数savefunc.m
保存到该目录,这样你就可以随时调用它。
function savefunc(FuncName, Directory)
% Set directory if not given, default is working directory
if nargin < 2; Directory = pwd; end
% Get active document
ActiveDoc = matlab.desktop.editor.getActive;
% Set FuncName if not given, or if FuncName was empty string
if nargin < 1 || strcmp(FuncName, '');
% Get function name
FuncName = ActiveDoc.Text; % Entire text of document
% Could use indexing to only take first n characters,
% and not load entire string of long function into variable.
% FuncName = ActiveDoc.Text(1:min(numel(ActiveDoc.Text), n));
FuncName = strsplit(FuncName, '('); % Split on parenthesis
FuncName = FuncName{1}; % First item is "function [a,b,c] = myFunc"
FuncName = strsplit(FuncName, ' '); % Split on space (functions don't always have equals)
FuncName = strtrim(FuncName{end}); % Last item (without whitespace) is "myFunc"
end
% Save the file
saveAs(ActiveDoc, fullfile(Directory, [FuncName, '.m']));
end
现在,假设您刚刚创建了以下Untitled.m
:
function [a,b,c] = mytest()
a = 1; b = 1; c = 1;
end
快捷方式:打开Untitled.m
,然后输入命令窗口
savefunc()
Untitled.m
将在当前工作目录中保存为mytest.m
。请注意,如果您愿意,您还可以传递不同的函数名称和save-as目录,这使其适用于其他场合。
如果要指定目录但使用自动命名,则可以将空字符串作为FuncName
传递。
您可以使用matlab.desktop.editor.getAll
对此进行扩展以获取所有打开的文档,然后循环浏览它们以进行保存。
有关详细信息,请在命令窗口中键入help matlab.desktop.editor
,似乎缺少在线文档。
matlab.desktop.editor:以编程方式访问MATLAB编辑器以打开,更改,保存或关闭 文档。
最后,请注意,不需要“保存成功”类型的消息,因为您将看到文件名更改,如果失败也会收到错误(来自saveAs
文档):
如果在
saveAs
操作期间发生任何错误,MATLAB将抛出MATLAB:Editor:Document:SaveAsFailed
异常。如果操作在没有抛出异常的情况下返回,则假定操作成功。