我的 vimrc 中有以下内容:
nnoremap <F1> :!screen -S foo -p run -X stuff '!!^M'
但是,当单击 F1 时,我收到错误:没有先前的命令。
我想要的是告诉屏幕会话中名为“foo”的“运行”窗口运行我之前运行的任何内容。
我的 vimrc 中有以下内容:
nnoremap <F1> :!screen -S foo -p run -X stuff '!!^M'
但是,当单击 F1 时,我收到错误:没有先前的命令。
我想要的是告诉屏幕会话中名为“foo”的“运行”窗口运行我之前运行的任何内容。
如果您打算!!
由 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>
. 因为在任何 bang thingie 中的意思是“将我之前在 vim 中使用其他 bang thingie!
跑过的任何东西放在这里”</p>
我会尝试使用这样的技巧保存历史文件:http ://www.cuberick.com/2008/11/update-bash-history-in-realtime.html
然后,一旦你有了历史,运行 screen 并将命令作为参数 - 注意screen dmesg
将运行命令并终止。如果您不希望它终止,您会这样做screen bash -c "dmesg ; bash"
(或您运行的任何外壳程序)。所以,一旦你知道了诀窍,重点是放置 `tail -n1 .bash_history` 而不是 dmesg。
编辑:
抱歉,我后来注意到“vim”标题。这种方式对我有用:
:nnoremap <F1> :!screen bash -c " '!!'"