Как реализовать MATLAB-подобный режим ячеек в Vim - PullRequest
2 голосов
/ 23 февраля 2011

В 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 + Введите , чтобы запустить ячейку, по которой щелкаютуказатель мыши.

Теперь я знаю, что в Vim я могу сделать

:'<,>'w !matlab для запуска визуально выбранного блока кода.

Но как мне реализовать MATLAB?-подобный режим ячейки в Vim / gVim?

Например, какой-нибудь код 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)

Может кто-нибудь предложить какие-нибудь идеи?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2012

Вот мой вариант для Matlab, но он может быть легко адаптирован для Python. Он переключается с vim на окно Matlab, а затем вы вставляете мышью или сочетанием клавиш. Я подробно описал это там: Графический интерфейс Vim и Matlab - эмуляция запуска Matlab () с Vim

Следующее гарантирует, что вы находитесь в правильном каталоге перед запуском ячейки, а также возвращаетесь в Vim после оценки ячейки (если вы правильно настроили внешний редактор в matlab. Я использую: gvim --servername MAT - удаленные закладки молчит).

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>
2 голосов
/ 23 февраля 2011

Не совсем точно, что вы спрашиваете, но если вам нужно обработать блок ячейки после двойного щелчка мышью в блоке, тогда вы можете отобразить двойной щелчок мышью (отображение <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().

...