I have these lines in my ~/.inputrc
:
set editing-mode vi
set keymap vi
This allows me to use vi
keybindings in every program that uses GNU readlines for text input. Examples: python
, irb
, sftp
, bash
, sqlite3
, and so on. It makes working with a command line a breeze. Matlab doesn't use readlines, but vi
keybindings would be amazing to have when debugging or working interactively. Is there an existing solution?
I tend to use matlab -nosplash -nodesktop
from the command line and that got me thinking: would it be possible to write a wrapper that does use readlines and pass the input to matlab
? (If I have to implement this, I'd probably prefer to do so in Ruby.)
Update:
Thanks for the help. This almost works:
# See also: http://bogojoker.com/readline/
require 'readline'
puts 'Starting Matlab...'
io = IO.popen('matlab -nosplash -nodesktop 2>&1', 'w+')
while input_line = Readline.readline('>> ', true)
io.puts input_line
puts io.gets
end
But it only reads a single line from Matlab at a time (because I'm using gets
). Any ideas on how to get everything until the next time it's waiting for input? Here's what's happening (I'm entering stuff at the >>
prompt):
Starting Matlab...
>> 1
>> 2
< M A T L A B (R) >
>> 3
Copyright 1984-2009 The MathWorks, Inc.
>> 4
Version 7.8.0.347 (R2009a) 32-bit (glnx86)
>> 5
February 12, 2009
>> 6
>> 7
>> 8
To get started, type one of these: helpwin, helpdesk, or demo.
>> 9
For product information, visit www.mathworks.com.
>> 0
>> 1
>>
>> 2
ans =
>> 3
>> 4
1
>> 5
>> 6
>>
>> 7
ans =
>> 8
>> 9
2
>> 0
>> 1
>>
>> 2
ans =
>> 3
>> 4
3