14

Linux と gVim/Vim を Matlab の外部エディターとして使用しています。

Matlab エディターでは、 を押してファイルを実行できます F5gvim-gtkこれを Vim ( Debian パッケージからインストール) で再現しようとしています。

次のように、名前または現在のファイルまたは選択したテキストを「シェルモード」でMatlabに送信できることを知っています。

execute '!echo "' ."run(\'".expand("%:p")."\')" . '"| matlab -nojvm' 
execute '!matlab -nodisplay < '.expand("%:p") 
noremap <C-CR> :?%%?;/%%/w !matlab -nojvm

しかし、Matlab GUI を使用したい (私の場合は既に開いています)。

これが私にとってうまくいくと思った解決策です:

  1. 次のようなキー マッピングを vim で使用します。

    • (a) 次のようなものをクリップボードに入れます:run('path-to-file')またはcd('folder');run('filename').
    • (b) Matlab GUI にフォーカスを与えるシェル コマンドを呼び出す
  2. この時点で、Matlab コマンド ウィンドウにいるはずなので、Ctrl-Vを押すだけで、クリップボードの内容が貼り付けられます。(私は Linux を使用していますが、Windows のキーバインドで Matlab を使用しています。)

ステップ 1(a): 以下はrun('filename')コマンドをクリップボードに入れ、Matlab はCtrl-Vが押されるとそれを貼り付けます:

let @+="run(\'".expand("%:p")."')" 

次の 2 つのコマンドは、Linux の中ボタンの貼り付けで機能しますが、この手順ではマウスを使用しないようにしたいので、これは望ましくありません。

let @*="run(\'".expand("%:p")."')" 

execute '!echo "' . "run(\'".expand("%:p")."\')" . '"| xclip'  

ステップ 1(b): Matlab ウィンドウにフォーカスを移すには、次のコマンドを使用します。

wmctrl -a MATLAB &

これはうまく機能しますが、タイトルに Matlab という単語が含まれるページが開いている場合 (現在読んでいるページのように)、ブラウザ ウィンドウが表示されることもあります。

より複雑な解決策も参照してください:特定のプロセス ID に関連付けられたウィンドウ ID を判別する Linux コマンドはありますか? .

私の(今は古い)オプションですが、機能しませんCtrlVマウスの貼り付けのみが次のことを行います。

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.

4

3 に答える 3

15

編集: それから作られたプラグインを参照してください: https://github.com/elmanuelito/vim-matlab-behave

自分の質問に答えてすみません。それは私の悪いことです。 xclip -selection c を使用する必要があった場所で xclip を使用していました。F5 と評価セルの動作を再現しますが、Ctrl-V を押すか、マウスを使用して Matlab コマンド ウィンドウに貼り付ける必要があります。コマンド ウィンドウを使用していない場合は、matlab ショートカット Ctrl-0 を使用してジャンプします。スクリプトは自動的に vim から matlab に移動します (「matlab」という名前の別のウィンドウがない限り)。あとで元のカーソル位置に戻るためのマークを付けました。

スクリプト matlab 全体を実行するには:これは "Run/F5" 動作です (正しいディレクトリに移動し、スクリプト全体を実行します)。

function! MatRun()
   normal mm " mark current cursor in mark m"
   let @+="cd('".expand("%:p:h")."\'); run('./".expand("%:f"). "')"
   call system('xclip -selection c ', @+)
   call system('xclip ', @+)
   normal `m "go back to cursor location"
   !wmctrl -a MATLAB 
endfunction
map ,m :call MatRun() <cr><cr>

実行するには、セルのみを評価します:これは Ctrl+Enter の動作です。上記と同じ行: (編集: 最初の上向き %% またはファイルの先頭 (\%^) から最初の下向き %% またはファイルの終わり (\ ^$)編集終了)

function! MatRunCell()
    normal mm "remember cursor"
    :?%%\|\%^?;/%%\|\%$/w !xclip -selection c  "pipe the cell to xclip"
    normal `m "go back to cursor location"
    !wmctrl -a MATLAB  "go to matlab window"
endfunction
map ,k :call MatRunCell()  <cr><cr>

しかし、より複雑ではありますが (もちろん vim 専用にすることもできます)、次の方法の方が好きです。以下は、セルを実行するのに適切なディレクトリにいることを確認し、セルを評価した後に Vim に戻ります (matlab で外部エディターを正しく構成している場合)。私は gvim --servername MAT --remote-tab を使用します。 -静けさ)。

 function! MatRunCellAdvanced()
     execute "!echo \"cd(\'".expand("%:p:h")."\')\">/tmp/buff"  
     normal mm
     :?%%\|\%^?;/%%\|\%$/w>> /tmp/buff
     execute "!echo \"edit ".expand("%:f")."\">>/tmp/buff"
     !cat /tmp/buff|xclip -selection c
     !cat /tmp/buff|xclip
     normal `m
     !wmctrl -a MATLAB 
 endfunction
map ,n :call MatRunCellAdvanced()  <cr><cr>

現在の行を実行: 現在の行をクリップボードにコピーし、matlab ウィンドウに移動します。(Matlabで使用するショートカットの場合は、もう一度Control + Vを押してmatlabに貼り付けます)

 function! MatRunLine()
     " write current line and pipe to xclip "
     :.w !xclip -selection c
     !wmctrl -a MATLAB 
 endfunction
 map ,l :call MatRunLine()  <cr><cr>

実行選択 : F9 の動作をエミュレートします。

  function! MatRunSelect()
     normal mm
     !rm -f /tmp/buff
     :redir > /tmp/buff
     :echo @*
     :redir END
     execute "!echo \" \">>/tmp/buff"
     execute "!echo \"edit ".expand("%:p")."\">>/tmp/buff"
     !cat /tmp/buff|xclip -selection c
      normal `m
     !wmctrl -a MATLAB 
  endfunction

ボールド セル タイトル セル タイトル のボールド フォント

 highlight MATCELL cterm=bold term=bold gui=bold
 match MATCELL /%%.*$/

これらのコマンドを配置する場所 これらのコマンドはすべて .vim/after/ftplugin/matlab.vim にあります

edit 使用する代わりに:

 run('./".expand("%:f")."')"

今使ってる

run('".expand("%:p")."')"

vim 'pwd' がスクリプト ディレクトリと異なる場合に対処するため。スクリプト名だけを抽出する方法が見つからなかったので、フル パスを使用します。誰かがおそらくそれに対するより良い解決策を見つけることができます。

于 2012-04-21T18:01:16.927 に答える