内容简介:使用matlab自带的编辑来写脚本感觉并不美妙,无法享受来自vim操作带来的便利,然而单纯使用vim来编辑,与matlab的交互性并不好,需要进行一定量的配置。所幸linux的工具众多,通过工具的的组合,也得与matlab的交互有了一定量的改善。为了更好的完成matlab程序编辑工作,有一些插件是能是必须的。ale/syntastic 是语法检查软件,能够调用语法检查工具进行对当前脚本进行检查。其中ale只支持vim 8.0以上的版本,而syntastic是支持vim7.4的版本的,需要跟据需要进行选择。
使用matlab自带的编辑来写脚本感觉并不美妙,无法享受来自vim操作带来的便利,然而单纯使用vim来编辑,与matlab的交互性并不好,需要进行一定量的配置。所幸 linux 的 工具 众多,通过工具的的组合,也得与matlab的交互有了一定量的改善。
一、vim插件推荐
为了更好的完成matlab程序编辑工作,有一些插件是能是必须的。
1.1 ale或syntastic
ale/syntastic 是语法检查软件,能够调用语法检查工具进行对当前脚本进行检查。其中ale只支持vim 8.0以上的版本,而syntastic是支持vim7.4的版本的,需要跟据需要进行选择。
此处非常有必要了解一下matlab的语法检查工具 mlint
,该工具一般位于 /bin/glnx64/mlint
目录下,其中
代表matlab的安装目录。由于该工具一般不在linux的PATH目录下,所以需要一般情况均需要手动做一个软链接从而实现全局通用:
$ ln -s /bin/glnx64/mlint /usr/bin/mlint
mlint本身没有什么帮助文档,其中帮助文档可参照matlab的doc(虽然其运行方式不一于,但是参数却是相同的),其中比较重要两个用法有:
$ mlint [filename.m] #检查[filename.m] $ mlint -id [filename.m] #检查[filename.m],并给出错误码 $ mlint -config=[setting.txt] [filename.m] #按照[setting.txt]设置检查
其中 [filename.m]
代表被检查的文件名,而 [setting.txt]
则代表mlint的配置文件。其中 -id
的运行结果示例如下:
L 969 (C 58-64): INUSD: Input argument 'handles' might be unused. If this is OK, consider replacing it by ~.
其中 INUSD
就代表着本错误的错误码,如果不想显示/检查该错误,那么只需要在[setting.txt]中加上该语句,然后使用 -config
参数即可。
$ cat setting.txt INUSD
虽然ale/syntastic默认均有matlab的语法检查,但是没有使用 -config
参数配置,这点对于matlab来说还是很重要的。因为某些matlab错误只是警告,我们大多数时候都很想将其忽略。而如果没有该配置,mlint将默认开启怕有警告,显然,这是比较碍眼的。
syntastic插件提供了的mlint的option项,所以只需要在~/.vimrc下面添加:
let g:syntastic_matlab_mlint_option='-config=[setting.txt] -id'
而ale由于发展时间较短,目前还没有给matlab提供option项,虽然作者已经有下一步计划了。目前就只能通过修改源码来解决问题,修改内容如下所示:
# 文件为ale_linters/matlab/mlint.vim # 增加两行(行首-号代表删除,+号代表增加) let g:ale_matlab_mlint_executable = \ get(g:, 'ale_matlab_mlint_executable', 'mlint') +let g:ale_matlab_mlint_options = get(g:, 'ale_matlab_mlint_options', '') +let g:ale_matlab_mlint_use_global = get(g:, 'ale_matlab_mlint_use_global', 0) # 将 return 访行换为下面几行 - return l:executable . ' -id %t' + if ale#Var(a:buffer,'matlab_mlint_options') is# '' + return l:executable.' -id %t' + else + return l:executable.' '.ale#Var(a:buffer, 'matlab_mlint_options').' %t' + endif
然后就可以在 ~/.vimrc
中添加如下一行:
let g:ale_matlab_mlint_option='-config=[setting.txt] -id'
ale 的 下载地址
syntastic 的[下载地址]](https://github.com/vim-syntastic/syntastic)
1.2 matlab.vim
matlab.vim可以说是vim编辑matlab的核心插件了,提供的功能比较多,主要如下:
1. 关键词高亮(仅包含核心关键词) 2. 自动对齐(可以使用=自动对齐) 3. Tag支持(可以使用ctags生成tag,从而实现函数识别) 4. if/end等配置支持(可以使用%进行if和end之间调转)
注意,if/end配对支持需要 matchit
插件支持: 下载地址
matlab.vim由matlab论坛的人开发的,我现在已将其放到github上去了: 下载地址
1.3 其它的插件
经过上面几个插件的安装之后,vim下matlab编辑也已经基本完善,但是如果缺少其它编程插件的帮助,也很难获得较好的编辑体验。下面主要列出几个对于相对较为通用的编程插件:
nerdcommenter 注释工具,可以方便的加行注释和取消注释 deoplete 相当不错的自动补全工具 ctrlp 文件搜索工具 auto-pairs 自动添加配对括号
vim 插件众多,其中有很多插件都能帮助matlab编译速度更快,显示更好,此处不一一列举,有兴趣慢慢探索。
二、终端下matlab操作
既然使用了vim作为matlab的编辑器,那么matlab必然是使用终端版本,其中最为重要的方法如何在终端下使用matlab,启动方法自然是采用无界面模式(注意:此处要将matlab放到PATH目录下)
# -nodesktop 为无桌面模式, -nosplash 为无启动界面 $ matlab -nodesktop -nosplash
而剩下的如何在命令行下方便的使用matlab呢,个人已经在[早期的文章]中有已经有较好的描述,包含了如何打开图形界面,如何进行方便的调式。
三、vim发送命令到matlab
由于matlab没有提供API可以直接将信息传递到指定的matlab下,使得vim难以实现通过一键在已知听matlab中运行命令。前一段时间无意中发现vscode里面有一个插件能够实现:在vim中选定代码,然后在当前matlab环境中下执行选定代码。虽然我不清楚这个插件是怎么实现的,但是我觉得这个功能相当实用,但是需要将来自的vim的消息传到matlab中并执行才可。
经过调研,两个终端本身并不能实现数据通信并执行,而经过 screen
这个工具则可以实现该功能。screen是由gnu开发的一个终端工具,可以实现终端的状态保存与背后运行。今天我们也可以试着使用screen将来一个终端的命令发送到别外一个终端并执行。
在系统安装screen之后,试开两个终端ter1和ter2,在ter1中执行:
$ screen -S test # screen 新开了名叫test的session.
然后在ter2中即可进行操作:
$ screen -S test -X stuff 'ls\n'
再看ter1的显示情况,显然,ter1已经执行了 ls
并显示结果。
根据上述的原理,我们就可以至少可以实现下面三个较比较实用的功能:
1. 一键执行当前脚本 2. 一键执行当前选中文本 3. 一键查询当前光标下的函数
3.1 具体方案
首先matlab需要在screen下打开:
$ screen -S matlab # 建立一个名叫matlab的session $ matlab -nodesktop -nosplash # 在screen中启动matlab
然后在~/.vimrc中添加如下函数:
function! RunSelectInMatlab() range
'<,'> write! matlab_tmp.m
silent !echo delete\(\'matlab_tmp.m\'\)\; >> matlab_tmp.m && screen -S matlab -X stuff 'matlab_tmp^M'
redraw!
endfunction
function! RunCurrentFileInMatlab()
execute "silent !screen -S matlab -X stuff '".strpart(@%,0,len(@%)-2)."^M'"
redraw!
endfunction
function! GetMatlabDoc()
execute "silent !screen -S matlab -X stuff 'doc ".expand("<cword>")."^M'"
redraw!
endfunction
显然,这上面三个函数各自己实现了三个功能。这个时候需要将三个函数绑定三个快捷键上去:
autocmd FileType matlab vnoremap <F5> :call RunSelectInMatlab()<CR> autocmd FileType matlab nnoremap <F5> :call RunCurrentFileInMatlab()<CR> autocmd FileType matlab nnoremap <Leader>d :call GetMatlabDoc()<CR>
该键盘映射实现了三个功能:
1. 在V模式下(一般使用大写V键进行选行),使用<F5>执行所选行
在matlab中可见matlab_tmp命令
2. 在N模式下,使用<F5>执行当前脚本
在matlab中可见当前脚本执行
3. 在N模式下,使用<Leader>d查询当前光标下的函数
在matlab中可见doc+函数名执行
3.2 更为方便的方案
为更好实现matlab与vim的集成,我建议使用tmux进行分屏。为了更快的在screen中打开matlab,可使用如下命令:
$ screen -S matlab -m sh -c "<PATH>/matlab -nodesktop -nosplash"
这样就实现了matlab与screen的同时启动与关闭。为了方便的使用,可以将其写入alias。
以上所述就是小编给大家介绍的《linux下用vim写matlab程序》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 程序员有话说 | 平时的程序猿 VS 面试的程序员
- 玩转小程序转发——小程序探索
- 利用“驱动人生”升级程序的恶意程序预警
- 我是女程序员,不是程序媛
- 「小程序JAVA实战」小程序搜索功能(54)
- 程序员高薪盛宴背后:程序员正在消失?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Practical Algorithms for Programmers
Andrew Binstock、John Rex / Addison-Wesley Professional / 1995-06-29 / USD 39.99
Most algorithm books today are either academic textbooks or rehashes of the same tired set of algorithms. Practical Algorithms for Programmers is the first book to give complete code implementations o......一起来看看 《Practical Algorithms for Programmers》 这本书的介绍吧!