Portál AbcLinuxu, 30. dubna 2025 09:04
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.