vim map long GNU Screen命令

时间:2012-01-01 06:46:42

标签: vim gnu-screen

您好我在stackoverflow上看过这个question,但我的问题略有不同。

当我使用下面的地图时,我定义了一个方便的地图:

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> 

这在一个非常长的路线上,我宁愿用线分开。 我尝试过:

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>

1 个答案:

答案 0 :(得分:2)

除了

,我在这里看不到太多问题
  1. <C-v>:AFAIK这些是:map的字符,不适用于屏幕内的程序,因此您可以删除两个^V
  2. 您在stuff之后忘记了空格。
  3. 但是有一些小问题:

    1. 如果您不知道省略:map的原因,请不要使用nore。在这种情况下,您需要:nnoremap,但nore :map:noremapnore。非nore命令很糟糕,因为随着映射数量的增加,新映射会使旧映射变得越来越大,而cat命令无法实现这一点。
    2. 在文本文件中使用原始控制字符是不好的(然后\r无法正常查看它们,并且可以被各种实用程序视为二进制文件),因此请使用\<C-m>或{{ 1}}你有^M的地方(为此你也可以使用\n)。