2012-01-01 11 views
0

こんにちは私はこれを見たことがありますquestionここでstackoverflow、しかし私の質問は少し異なります。vim map long GNU Screenコマンド

私は、次のマップを使用する場合、私は便利なマップを定義します。

map <Leader>r :!screen -p run_and_test -X stuff '(cd /really/long/folder/data/gen_prob; epy gen_data.py)^V^V^M'<CR><CR> 

は、これは本当に長いラインでbecames、と私は線で、これを分割することを好むだろう。 私は試しました:

let folder = '/really/long/folder/gen_prob' 
let cmd = "'(cd " . folder . "; python gen_data.py)^V^V^M'" 
map <Leader>r :execute "!screen -p run_and_test -X stuff" . cmd <cr><cr> 

しかし、動作しません。

この初期マッピングをいくつかの行に分割する方法はありますか?

編集:最終的な解決策は、私が実装さ:

function! Execute_screen() 
    let folder = '/really/long/folder/gen_prob' 
    let cmd = "'(cd " . folder . "; python gen_data.py)\r'" 
    execute "!screen -p run_and_test -X stuff " . cmd 
endfunction 

noremap <Leader>r :call Execute_screen()<cr><cr> 

答えて

2

私は

  1. <C-v>除いて、ここで多くの問題が表示されていない。私の知る限り、これらの文字は、画面内のため、あなたのプログラムのために、:mapのためではありません2つを削除することができます^V
  2. stuffの後にスペースを忘れました。

は、しかし、いくつかのマイナーな問題があります。

  1. あなたがnoreを省略している理由がわからない場合は:mapを使用しないでください。この場合、:nnoremapが必要ですが、noreバージョンの:map:noremapです。非noreコマンドは悪いです。マッピングの数が増えるにつれて、新しいマッピングが古いものになる可能性があり、noreコマンドではこれが行われない可能性があるからです。
  2. テキストファイルに生の制御文字を持っている悪い(彼らはその後、通常catで見ることができず、さまざまなユーティリティにより、バイナリファイルとして扱うことができる)ので、あなたは、この目的のために(^Mを持っているところ\r\<C-m>を使用します\nも使用できます)。
+0

ありがとうZyX、私はあなたの答えを使用し、関数で実装しました。私はまた、私のvimrcファイルを調べて、すべてのマップをnoremapで置き換えました。 – skeept

関連する問題