tutorial - vim comandos
Cómo implementar el modo de célula tipo MATLAB en Vim (2)
No estoy seguro exactamente de lo que está preguntando, pero si lo que desea es procesar un bloque de celdas al hacer doble clic en el bloque con un mouse, puede asignar un doble clic del mouse (el mapeo <2-LeftMouse>
) a llamar a una función:
nnoremap <buffer> <2-LeftMouse> :call ProcessMouseDoubleClick()<CR>
ProcessMouseDoubleClick () sería una función que (1) selecciona visualmente el área de "celda" y (2) emite ''<,>''w !matlab
para que matlab ejecute el código seleccionado.
Al llamar a ProcessMouseDoubleClick, el cursor Vim se ubicará en el punto en el que haga clic en el documento. Aparte de eso, no hay nada específico para el mouse. De modo que también puede asignar cualquier tecla a la misma función, por ejemplo, un comando mnemónico para ''evaluar celda'':
map <buffer> <Leader>ec :call ProcessMouseDoubleClick()<CR>
Por lo tanto, no hay ninguna razón para tener un nombre de función que haga referencia al mouse, es posible que desee llamarlo de la misma manera que EvaluateMatlabCell()
.
En MATLAB, podemos escribirle al editor lo siguiente
%% -- a example cell --
plot(rand(3));
%% -- another cell
A=rand(2^10);
t=linspace(-pi,pi,2^10);
compass(fft(A*sin(t))
y podemos presionar Ctrl + Enter para ejecutar la celda que está siendo presionada por el puntero del mouse.
Ahora sé en Vim, puedo hacer
:''<,>''w !matlab
para ejecutar un bloque de código seleccionado visualmente.
¿Pero cómo implemento el modo de célula tipo MATLAB en Vim / gVim?
Por ejemplo, un código 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)
¿Alguien puede ofrecer algunas ideas?
Esta es mi opción para matlab, pero se puede adaptar fácilmente para Python. Cambia de vim a una ventana de Matlab y luego se pega con el mouse o el atajo de teclado. Lo describí en detalles allí: GUI de VIM y MATLAB - Emular MATLAB Run (<F5>) con VIM
Lo siguiente, asegura que está en el directorio correcto antes de ejecutar la celda, y también regresa a Vim después de evaluar la celda (si ha configurado correctamente el editor externo en matlab. Yo uso: gvim --nombre del servidor MAT --pantalla remota -silencio).
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>