matlab - Vim和 matlab GUI仿真用Vim运行( <F5> )

  显示原文与译文双语对照的内容
0 0

我使用的linux为Matlab和gvim/vim作为外部编辑器。

使用matlab编辑器,可以通过按F5运行文件。 我想仿照这种gvim gtk(有官方的debian软件包) 。

我知道这可以命令中filename或选定内容复制到Matlab " bash " 模式类似于下面这样:

execute '!echo "' ."run('".expand("%:p")."')" . '"| matlab -nojvm' 
execute '!matlab -nodisplay < '.expand("%:p") 
noremap <C-CR> :?%%?;/%%/w !matlab -nojvm

但是我想对于我来说使用Matlab gui ( 已打开) 。 我以为我能为你给我的解决方案是:

  1. 在vim中使用的键映射,应执行下列操作:
    • ( a ) 放置在剪贴板中,类似如下内容: run( ;run(文件名) 文件) 或cd(文件夹路径)
    • ( b ) 调用shell命令,将焦点给予Matlab GUI
  2. 在这里,我应该在matlab命令窗口,所以我只要按一下Ctrl V,将剪贴板中的内容将被粘贴。 ( 我正在使用linux和windows键绑定,但是Matlab )

Step 1a: ) 命令将把run( 以下文件名复制到剪贴板,并将粘贴后按Ctrl Matlab V

let @+="run('".expand("%:p")."')" 

以下两个能不能在linux中键pasting(,但这并不是我想要的,因为我想避免鼠标在这一步)

let @*="run('".expand("%:p")."')" 
execute '!echo "' . "run('".expand("%:p")."')" . '"| xclip'  

Step 1b: 我以matlab来最大化窗口,请使用以下命令:

wmctrl -a MATLAB &

这非常适用,但它还将看到浏览器如果要在页面上的字" Matlab title(就像你正在阅读。。。) 。 ( 另请参见更加复杂的解决方案 Is有linux命令来确定窗口ID关联到一个给定的进程ID? )

我现在( 旧) 选项,而且 Ctrl V 没用。 只有鼠标粘贴的作用:

function! MatRun()
    let @+="run('".expand("%:p")."')" 
    let @*="run('".expand("%:p")."')" 
    :call system('xclip', @+)
    !wmctrl -a MAT
endfunction
map <F5> :call MatRun() <cr><cr>

不知道怎么的,ctrl v 无效在这种情况下结合wmctrl ( 请参阅下面的编辑) 。 我的主要目的是避免使用鼠标来进行此操作。

谢谢你的帮助。

Edit和工作方案使用xclip 我不对,我我应该在哪里使用xclip选择c 。 下面看我的回复。

我会很高兴如果你们找到更好的方法,比如: 在matlab命令窗口中,确保你在命令窗口中直接粘贴( Ctrl 0 ) 或避免使用wmctrl捕获浏览器。

时间:原作者:5个回答

0 0

EDIT : 看到插件中执行它: https://github .com/elmanuelito/vim matlab表现

对不起,回答我的问题。 这是我不对,我在用xclip需要使用xclip我应该选择c 。 下面我将为我制定的守则: 它再现了F5和计算单元的行为但你得按Ctrl V 中或用鼠标粘贴Matlab Command Window 。 如果不在命令窗口中使用快捷Ctrl Matlab 0 跳转到它。 该脚本将自动添加从vim切换到matlab(除非其他窗口名称为" matlab " 在其中) 。 我添加了标记之后回到前光标位置。

Matlab 来运行整个脚本: 这是" run/f5 " 行为( 转到正确的目录,然后执行整个脚本) :

function! MatRun()
   normal mm " mark current cursor in mark m"
   let @+="cd('".expand("%:p:h")."'); run('./".expand("%:f"). "')"
   call system('xclip -selection c ', @+)
   call system('xclip ', @+)
   normal `m "go back to cursor location"
   !wmctrl -a MATLAB 
endfunction
map ,m :call MatRun() <cr><cr>

要运行,仅计算单元: 这是Ctrl+Enter行为。 位于同一行中的比上图: ( Edit : 我现在从第一个向上扩展它,以便用%%或文件的开头( %^ ) 向下直到第一个%%或文件的结尾( ^$ ) 结束编辑 )

function! MatRunCell()
    normal mm "remember cursor"
    :?%%|%^?;/%%|%$/w !xclip -selection c  "pipe the cell to xclip"
    normal `m "go back to cursor location"
    !wmctrl -a MATLAB  "go to matlab window"
endfunction
map ,k :call MatRunCell()  <cr><cr>

我比较喜欢后面的过程,虽然更复杂( 并且可能仅有哪些地方反映了vim ) 。 以下,确保你们在合适的目录运行该单元格,也可以追溯到Vim进行评估后的单元格( 如果已正确配置中的外部编辑器Matlab 。 我use:gvim servername远程选项卡MAT静音) 。

 function! MatRunCellAdvanced()
     execute "!echo "cd('".expand("%:p:h")."')">/tmp/buff"  
     normal mm
     :?%%|%^?;/%%|%$/w>> /tmp/buff
     execute "!echo "edit ".expand("%:f")."">>/tmp/buff"
     !cat /tmp/buff|xclip -selection c
     !cat /tmp/buff|xclip
     normal `m
     !wmctrl -a MATLAB 
 endfunction
map ,n :call MatRunCellAdvanced()  <cr><cr>

Run当前行: Copy当前行复制到剪贴板并转至Matlab窗口。 ( 再次Control+V,将其粘贴到matlab,如果是在matlab中所使用的捷径)

 function! MatRunLine()
     " write current line and pipe to xclip "
     :.w !xclip -selection c
     !wmctrl -a MATLAB 
 endfunction
 map ,l :call MatRunLine()  <cr><cr>

Run选择: Emulates F9行为。

  function! MatRunSelect()
     normal mm
     !rm -f /tmp/buff
     :redir > /tmp/buff
     :echo @*
     :redir END
     execute "!echo " ">>/tmp/buff"
     execute "!echo "edit ".expand("%:p")."">>/tmp/buff"
     !cat /tmp/buff|xclip -selection c
      normal `m
     !wmctrl -a MATLAB 
  endfunction

Bold Cell标题 Bold字体在单元格中title

 highlight MATCELL cterm=bold term=bold gui=bold
 match MATCELL /%%.*$/

其中把上述命令,所有命令都在.vim/after/ftplugin/matlab .vim

编辑来代替:

 run('./".expand("%:f")."')"

我现在用

run('".expand("%:p")."')"

处理一种情况,vim'pwd'不同于脚本目录中。 我没有办法提取出脚本名,所以我使用的完整路径。 有人估计能找到一个更好的解决方案。

原作者:
0 0

有些人可能只是希望能够运行Matlab脚本从vim和不需要其他精美GUI东西你可以尝试用matlab的命令行shell 。

:! matlab -nosplash -nodesktop -r %:r将启动新的Matlab shell并运行当前文件作为脚本( 或函数不带参数) 类似于F5在Matlab GUI那样 你需要输入'exit'赶快走开Matlab shell和回vim之后。 当然这只适用于如果文件要运行位于Matlab路径或终端的工作目录。

这样也许有点麻烦和新Matlab实例已启动一直以来,运行脚本可能需要一些时间。 你可以尝试用 -nojvm以避免开销但在我看来最好的解决方案是由java导致保持Matlab shell打开。

方法是提供一个vim插件称为 Conque Shell
安装后可以启动shell Matlab为 :ConqueTerm matlab -nodesktop你就能得到的缓冲区可以使用像Matlab console 。 执行代码部分能很好地工作与移出并粘贴。 或者也可以创建vim的函数为你执行此操作。 因为我不擅长这个我只能提供这个丑陋的映射如下:

:nmap <f5> :let @"=expand('%:r')<cr>:buffer matlab -nodesktop<tab><cr>""p<cr>

原作者:
...