2

在 MATLAB 中,我们可以向编辑器写入以下内容

%% -- a example cell --

plot(rand(3));

%% -- another cell
A=rand(2^10);
t=linspace(-pi,pi,2^10);
compass(fft(A*sin(t))

我们只需点击Ctrl+Enter即可运行鼠标指针单击的单元格。

现在我知道在 Vim 中,我可以做到

:'<,>'w !matlab运行视觉选择的代码块。

但是如何在 Vim/gVim 中实现类似 MATLAB 的单元格模式?

例如一些python代码

import os
import subprocess
import random

## 1st cell
ps =["python", "-h"]
out = subprocess.Popen(ps).communicate()[0]
print out

## 2nd cell

# import random -sould not be needed if we concatenate the import section and the cell
print random.randint(1,100)

谁能提供一些想法?

4

2 回答 2

2

不知道你在问什么,但如果你想要的是在用鼠标双击块时处理一个单元块,那么你可以映射鼠标双击(<2-LeftMouse>映射)来调用一个函数:

nnoremap <buffer> <2-LeftMouse> :call ProcessMouseDoubleClick()<CR>

ProcessMouseDoubleClick() 将是一个函数,它 (1) 直观地选择“单元格”区域和 (2)'<,>'w !matlab让 matlab 运行所选代码的问题。

当调用 ProcessMouseDoubleClick 时,Vim 光标将位于您在文档中单击的任何位置。除此之外,没有什么特定于鼠标的。因此,您还可以将任何键映射到相同的功能,例如“评估单元格”的助记符命令:

map <buffer> <Leader>ec :call ProcessMouseDoubleClick()<CR>

因此,根本没有任何理由让函数名称引用鼠标,您可能希望将其称为EvaluateMatlabCell().

于 2011-02-23T16:18:34.910 回答
2

这是我对 matlab 的选择,但它可以很容易地适用于 python。它从 vim 切换到 Matlab 窗口,然后您使用鼠标或键盘快捷键粘贴。我在那里详细描述了它: Vim and matlab GUI - Emulate matlab Run (<F5>) with Vim

以下内容确保您在运行单元之前位于正确的目录中,并在评估单元后返回 Vim(如果您在 matlab 中正确配置了外部编辑器。我使用:gvim --servername MAT --remote-tab -沉默的)。

function! MatRunCellAdvanced()
   execute "!echo \"cd(\'".expand("%:p:h")."\')\">/tmp/buff"  
   :?%%?;/%%/w>> /tmp/buff
   execute "!echo \"edit ".expand("%:f")."\">>/tmp/buff"
   !cat /tmp/buff|xclip -selection c
   !cat /tmp/buff|xclip
   !wmctrl -a MATLAB 
endfunction
map ,n :call MatRunCellAdvanced()  <cr><cr>
于 2012-04-21T18:29:02.793 回答