告诉屏幕窗口运行上一个命令

时间:2012-10-31 19:11:52

标签: vim gnu-screen

我的vimrc中有以下内容:

    nnoremap <F1> :!screen -S foo -p run -X stuff '!!^M'

然而,当点击F1时,我收到错误:没有上一个命令。

我想要的是告诉名为'foo'的屏幕会话中的'run'窗口运行我之前运行的任何内容。

2 个答案:

答案 0 :(得分:3)

如果你想用bash执行!!(因此“运行我在之前运行的那个屏幕实例”),你必须逃避它:

nnoremap <F1> :!screen -S foo -p run -X stuff $'\!\!\n'<CR>

或使用system()

nnoremap <F1> :call system('screen -S foo -p run -X stuff $''!!\n''')<CR>

。因为任何爆炸性事物中的!意味着“无论我在之前使用其他爆炸物使用其他爆炸性物品

答案 1 :(得分:0)

我尝试使用这样的技巧保存历史文件:http://www.cuberick.com/2008/11/update-bash-history-in-realtime.html

然后,获得历史记录后,使用命令作为参数运行屏幕 - 注意screen dmesg将运行命令并终止。如果你不希望它终止,你可以screen bash -c "dmesg ; bash"(或者你运行的任何shell)。所以,一旦你知道了这个技巧,重点是把`tail -n1 .bash_history`放在dmesg上。

修改

对不起,我后来注意到了“vim”标题。这种方式对我有用:

:nnoremap <F1> :!screen bash -c " '!!'"