MATLAB Answers

Chad Greene
6

Keyboard shortcut to evaluate current line?

Asked by Chad Greene
on 2 Jun 2014
Latest activity Commented on by Andres Rey Sanchez on 10 Nov 2018 at 22:16
I often use a keyboard shortcut to evaluate highlighted selections of a script I'm working on. But often, I will add a single line to a script and want to evaluate it right away. To do this I highlight the line and hit F9, but it would be a smoother process if I could simply hit F10 to evaluate the line my cursor is on without needing to highlight the line. I've checked the Preferences and I don't see this option available. Are there any clever hacks to allow this?
I'm using R2012b on a Mac.

  0 Comments

Sign in to comment.

Products

6 Answers

Answer by Eric
on 27 Mar 2015
Edited by Eric
on 27 Mar 2015
 Accepted Answer

Create a Quick Access Toolbar shortcut for doing this and call it "Run line". Here's the code:
currentEditor = matlab.desktop.editor.getActive;
originalSelection = currentEditor.Selection;
assert(originalSelection(1)==originalSelection(3));%Check that multiple lines are not selected
currentEditor.Selection = [originalSelection(1) 1 originalSelection(1) Inf];%Select the whole line
eval(currentEditor.SelectedText);%Run the whole line
currentEditor.Selection = originalSelection;%Reset selection to original state
clear currentEditor originalselection
Now, press and hold the Alt key (at least in Windows) to see the mnemonics for the Quick Access Toolbar items. On my system a little "5" shows for the "Run line" shortcut.
Hence I can press Alt+5 to run the current line and leave my selection unchanged. Alternatively I could use the mouse to click the "Run line" button on the Quick Access Toolbar.
-Eric

  22 Comments

Hey all, just for ease of access for others that don't initally find the thing: The toolbar is on the upper right, next to the close "X". I never used it and totally missed it.
Other than that, I have augmented this a little such that it selects all lines that are selected somehow (no need to restrict to one line imho), then jumps to the next line that has code in it. If an error happens, the selection that generated the error will persist. the code is:
% Evaluates selected lines of code (no need to highlight the entire lines) and jumps
% to the next line that has code in it. Errors will be rethrown and the line won't
% jump in that case.
currentEditor = matlab.desktop.editor.getActive;
% Selections are of the format:
% [start_line start_element_in_line end_line end_element_in_line]
originalSelection = currentEditor.Selection;
% Select the whole line
% The selection with the Inf-th element will automatically select the last one
current_selection = [originalSelection(1) 1 originalSelection(3) Inf];
currentEditor.Selection = current_selection;
% Try to evaluate the selection, if error, reset to original state and rethrow it
try
% Run the whole line
eval(currentEditor.SelectedText);
catch ME
% Reset selection to original state
currentEditor.Selection = originalSelection;
clear currentEditor originalselection
% Throw the original error
rethrow(ME)
end
% Check if the line is empty, if yes, advance one line
% Pretend the current length is 0, to initialize the first jump to the next line
line_length = 0;
while line_length == 0
% Jump to the line after selection and select all
currentEditor.Selection = [current_selection(3)+1 1 current_selection(3)+1 Inf];
current_selection = currentEditor.Selection;
line_length = current_selection(4) - current_selection(2);
end
% Undo the selection of the whole line again
currentEditor.Selection = [current_selection(3) 1 current_selection(3) 1];
clear currentEditor originalselection
Enjoy!
Thanks, Marius! Works nicely

Sign in to comment.


Answer by rrg
on 27 Apr 2016

Also request in Mac

  0 Comments

Sign in to comment.


Answer by Sean de Wolski
on 2 Jun 2014

I don't know of this option but I do understand the use-case and agree that it would be valuable. Here's how I do it right now:
When writing a script, I always use lots of code sections.
Since you can evaluate a section from keyboard or from the "run section" button there is always the option to evaluate the section. If you intelligently name your variables so that they don't overwrite previous ones, then you will never have trouble running the whole section versus just the line of code. I'll also put computationally expensive lines of code in their own section so that it only needs to be rerun if the higher-level sections have changed.
This mimics the functionality you desire and actually expands it to multiple lines at once.

  1 Comment

Indeed, I also use sectioning quite a bit. I was hoping for a single-line equivalent. I effectively want a new cell for each line of code without actually adding the %% between each line. It's only a minor inconvenience to highlight some new xlim line and hit F9 after data have already been plotted, but it would be less clunky if the current line could be evaluated with a single keystroke.

Sign in to comment.


Answer by Joseph Cheng
on 19 Aug 2014
Edited by Joseph Cheng
on 19 Aug 2014

This is not entirely 1 button press but you can use the documentation here http://blogs.mathworks.com/community/2009/09/28/configurable-keyboard-shortcuts-have-arrived/ and configure a shortcut to do this. My test (in windows R2011A and R2013b) was to assign "evaluate selection" to F8 and "Selection End Line" to F8. I kept the "limit" keystroke selection to 1.
So by doing this F8 now either:
  1. if something is selected runs the selection
  2. with nothing selected the first F8 press highlights from my cursor to the end of line then upon second F8 press it runs selection.
I see now that i could have just mapped it to F9 as its performance is conditional to what is selected.
Not entirely sure how much faster this is. Normal keyboard way would be home->shift+end->F9 which is just 4 presses. My method would save you a key press as its home->F8->F8.

  1 Comment

I can't get this to work in R2015A. They list a possible conflict between the two actions and F8 ends up only evaluating, it does not perform selection end line.
BUT, I did discover that single clicking the white margin to the left of your text (between the grey debug "-" (after the line number) and the first letter on your line) will select the entire line. Thus, clicking that margin and then pressing F9 completes what we are trying to accomplish... still wish we could just have one keybind for evaluating the current line.

Sign in to comment.


Answer by Benjamin Bechtel on 19 Aug 2014

Unfortunately I don't have a answer, but I'd be interested too. Did you find a way?

  3 Comments

Still nothing. But I would use such a feature every day if I could.
I'll add my vote for this feature too. It's perhaps a minor inconvenience to have to highlight a line, but it's one of those little things I repeat dozens of times each day.
I agree wholeheartedly and would love to see this feature request completed! How do we go about getting our request known?

Sign in to comment.


Answer by Rodrigo Coelho on 3 Mar 2018

Anybody knows how to get the keyboard mnemonics for Mac?

  2 Comments

I am not certain I understand what you are asking, but have you looked Preferences -> Keyboard -> Shortcuts ?
On Mac, select the lines to run; then press:
fn + shift + F7

Sign in to comment.