我使用 Linux 和 gVim/Vim 作为 Matlab 的外部编辑器。
在 Matlab 编辑器中,您可以通过按 运行文件 F5。我试图在 Vim 中重现这个(从gvim-gtk
Debian 包安装)。
我知道可以将名称或当前文件或选定文本以“shell 模式”发送到 Matlab,如下所示:
execute '!echo "' ."run(\'".expand("%:p")."\')" . '"| matlab -nojvm'
execute '!matlab -nodisplay < '.expand("%:p")
noremap <C-CR> :?%%?;/%%/w !matlab -nojvm
但我想使用 Matlab GUI(在我的情况下它已经打开)。
这是我认为可以为我解决的解决方案:
在 vim 中使用键映射:
- (a) 在剪贴板中放入类似:
run('path-to-file')
或cd('folder');run('filename')
。 - (b) 调用一个 shell 命令,将焦点转移到 Matlab GUI
- (a) 在剪贴板中放入类似:
此时,我应该在 Matlab 命令窗口中,所以我只需按Ctrl- V,剪贴板的内容应该被粘贴。(即使我在 Linux 上,我也使用带有 Windows 键绑定的 Matlab。)
Step 1(a):
下面将run('filename')
命令放到剪贴板中,Matlab 会在按下Ctrl-时粘贴:V
let @+="run(\'".expand("%:p")."')"
以下两个命令适用于 Linux 中键粘贴,但这不是我想要的,因为我想在此步骤中避免使用鼠标:
let @*="run(\'".expand("%:p")."')"
execute '!echo "' . "run(\'".expand("%:p")."\')" . '"| xclip'
步骤 1(b):为了将焦点放在 Matlab 窗口,我使用以下命令:
wmctrl -a MATLAB &
这很好用,但它也可能会打开一个浏览器窗口,如果它碰巧打开了一个标题中带有 Matlab 一词的页面(就像你现在正在阅读的那个)。
另请参阅更复杂的解决方案:是否有 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
(请参阅下面的编辑)。对我来说,重点是避免使用鼠标进行此操作。
感谢您的帮助。
更新:一个工作选项
我的错,我正在使用xclip
我应该使用的地方xclip -selection c
。请看我下面的回复。
如果有人找到更好的解决方案,我会很高兴,例如:直接在 Matlab 命令窗口中粘贴,确保您在命令窗口(Ctrl- 0)中,或者避免使用wmctrl
.