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

これがmatlabの私のオプションですが、Pythonに簡単に適応させることができます。vim から Matlab ウィンドウに切り替わり、マウスまたはキーボード ショートカットで貼り付けます。そこで詳しく説明しました: Vim and matlab GUI - Vim で matlab Run (<F5>) をエミュレート

以下では、セルを実行する前に正しいディレクトリにいることを確認し、セルを評価した後に 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 に答える
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 に答える