内容简介:使用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)
- 程序员高薪盛宴背后:程序员正在消失?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Effective java 中文版(第2版)
Joshua Bloch / 俞黎敏 / 机械工业出版社 / 2009-1-1 / 52.00元
本书介绍了在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰、健壮和高效的代码。 本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。本书内容全面,结构清晰,讲解详细。可作为技术人员的参考用书。一起来看看 《Effective java 中文版(第2版)》 这本书的介绍吧!