Portál AbcLinuxu, 6. listopadu 2025 22:08
keywords vim matlab script m-file
Nevím, jak jsou na tom verze matlabu nyní, ale tento skript edit.m nahrazuje matlabí edit. Používal jsem jej pro gnome-terminal, ale pak jsem přešel na aterm. Proto je kód pro gnome-terminál ponechán zakomentovaný. Překvapil mne kamarád, že jej používá a bez problémů. Psal jsem to před 2 lety kvůli diplomce, protože jsem prostě na vim zvyklý.
Logika argumentů je divoká, ale nějak mě to zatím nezradilo.
Skript je k použítí v xkách. Matlab je dobré spouštet v terminálu jako matlab -nosplash -nojvm -nodesktop
~/matlab. Použijte help edit
function [C, A ] = vim( varargin )
% EDIT
% EDIT arg1 arg2
% EDIT ./arg1 ./arg2
% EDIT /.../arg1 /.../arg2
% [C, A ] = EDIT
% [C, A ] = EDIT( 'arg1', 'arg2', ... )
% [C, A ] = EDIT( '-c \"<editor command>\"', 'arg1', 'arg2' )
%
% EDIT overrides a default matlab script EDIT.m.
% EDIT opens the file in a text editor.
%
% By default, The EDIT editor is used. The user may
% specify a different editor by modifying the shell command
% in the M-file.
%
% EDIT X Y Z ... will atempt to open all specified files in an
% editor. Each argument is directly passed into an editor argument.
% Instead of the first file you can use the editor (EDIT) command
% as well. But this command has to be the first argument
% in the string.
%
% EDIT '-c \"w\"' FILE1.M FILE2.M
%
% passes the command "save FILE1.M" to EDIT. Be aware of placing
% a gap between both the editor command and the file name.
%
%
% EDIT, by itself, opens up a new editor window.
%
%
% EDIT returns two strings:
% C is the command passed into the terminal input.
% A is the command passed into the editor input.
%Copyleft 2004 elviin
if ~iscellstr( varargin )
error( 'The input must be a string.' );
return;
end
cellFileArg = '#'; %Use this character instead of a white space.
%There are problems with leading and trailing spaces.
%Because in gnome-terminal is needed full file-path.
%Say vim to open it. (I don't know why it doesn't work.)
%gnome-terminal
%vimOpenFile = '-c#\"e#';
%aterm
vimOpenFile = '-c#"e#';
%Set the proper directory for edited file.
curDir = strcat( pwd, '/' );
%gnome-terminal %Set the proper directory for editor;
%changeDirOptionTail = strcat( curDir, '\"' );
%aterm
changeDirOptionTail = strcat( curDir, '"' );
%for gnome-terminal
%changeDirOption = strcat( '#-c#\"cd#', changeDirOptionTail );
%for aterm
changeDirOption = strcat( '#-c#"cd#', changeDirOptionTail );
%Fill the buffer with arguments.
for i = 1:nargin
cVarargin = char( varargin(i) );
switch cVarargin(1)
case {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
Err = sprintf('Remove heading ''%s'' from the name.', cVarargin(1));, ...
disp(Err)
return
case '-', ...
cellFileArg = strcat( cellFileArg, cVarargin );, ...
cellFileArg = strcat( cellFileArg, '#' );
case {'~', '/', '.', '\'}, ...
if length(cVarargin) < 2
disp('File name is too short.')
return
end
nameLength = length( cVarargin );
if strfind( cVarargin( nameLength-1: nameLength ), '.m' )
cVarargin = strcat( vimOpenFile, cVarargin );
%for gnome-terminal
%cVarargin = strcat( cVarargin, '\"' ); %terminate the command
%for aterm
cVarargin = strcat( cVarargin, '"' ); %terminate the command
cellFileArg = strcat( cellFileArg, cVarargin );, ...
cellFileArg = strcat( cellFileArg, '#' );
else
cVarargin = strcat( cVarargin, '.m' );, ...
cVarargin = strcat( vimOpenFile, cVarargin );, ...
%for gnome-terminal
%cVarargin = strcat( cVarargin, '\"'); %terminate the command
%for aterm
cVarargin = strcat( cVarargin, '"'); %terminate the command
cellFileArg = strcat( cellFileArg, cVarargin );, ...
cellFileArg = strcat( cellFileArg, '#' );
end
otherwise %No exact file name is specified.
%Try to select a file:
parPath = which( cVarargin );
if ( strcmp( parPath, '' ) )
nameLength = length(cVarargin);
%If the file name is long enough...
if ( nameLength > 1 )
%If .m extension is missing...
if ( strfind( cVarargin( nameLength-1: nameLength ), '.m' ) )
cVarargin = strcat( curDir, cVarargin );
cellFileArg = strcat( cellFileArg, cVarargin );
cellFileArg = strcat( cellFileArg, '#' );
else
cVarargin = strcat( cVarargin, '.m' );
cVarargin = strcat( curDir, cVarargin );
cellFileArg = strcat( cellFileArg, cVarargin );
cellFileArg = strcat( cellFileArg, '#' );
end
else %Edit the file in spite of too short name.
cVarargin = strcat( cVarargin, '.m' );
cVarargin = strcat( curDir, cVarargin );
cellFileArg = strcat( cellFileArg, cVarargin );
cellFileArg = strcat( cellFileArg, '#' );
Err = sprintf('File name ''%s''is possibly too short to specify m-file.', cVarargin);, ...
disp(Err);
end
else %We have found a path to reach the file.
cellFileArg = strcat( cellFileArg, parPath );
cellFileArg = strcat( cellFileArg, '#' );
end
end
end;
%Convert values of the type cell to the string.
cFileArg = char( cellFileArg );
%Include arguments in to the shell command.
%You can edit both the name of a file manager and an editor.
%Change editting directory:
cFileArg = strcat( changeDirOption, cFileArg );
%--zoom arg is useless in Gnome
commandGnomeTerminal = strcat( 'gnome-terminal --window-with-profile=matlab --zoom=1.333333333 --geometry=80x25 --command "vim' , cFileArg );
commandATerm = strcat( 'aterm -T Matlab -e vim', cFileArg );
command = commandATerm; %commandGnomeTerminal
% command = strcat( command, '"' ); %commandGnomeTerminal terminator
%The way how to disable gtk warning messages:
%** (gnome-terminal:2240): WARNING **: [Invalid UTF-8]
%in case your default xwindow manager is not Gnome.
execommand = strcat( command, '#');
execommand = strcat( execommand, '>#/dev/null#2>&1#&');
execommand = strcat( 'nohup#', execommand );
%Replace the character '#' with ' ' and execute the command.
execommand = strrep( execommand, '#', ' ' );
%Execute the command attached to vim editor:
unix( execommand );
nout = max(nargout,1)-1;
%Disable output messages (0).
%List the enabled ones (1, 2).
switch nout
case 2,
C = execommand;,
A = strrep( cFileArg, '#', ' ' );
case 1,
C = execommand;
A = strrep( cFileArg, '#', ' ' );
case 0, %(*) explicit obstruction from stdout
otherwise
disp('To many output arguments.')
end;
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.