我在我的vimrc以下:告訴屏幕窗口運行先前的命令
nnoremap <F1> :!screen -S foo -p run -X stuff '!!^M'
然而,當點擊F1,我得到的錯誤:沒有前一個命令。
我想要的是在名爲'foo'的屏幕會話中告訴'run'窗口來運行我以前運行的任何程序。
我在我的vimrc以下:告訴屏幕窗口運行先前的命令
nnoremap <F1> :!screen -S foo -p run -X stuff '!!^M'
然而,當點擊F1,我得到的錯誤:沒有前一個命令。
我想要的是在名爲'foo'的屏幕會話中告訴'run'窗口來運行我以前運行的任何程序。
如果你的意思是!!
由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>
。由於!
任何爆炸的thingie的意思是「發生在這裏不管我使用其他爆炸的thingie在vim 跑前」
謝謝。我不知道!在vim中也是以前的命令。使用system()還有一個很好的好處,就是不會強制我輸入額外的Enter。 –
@DatChu可以修改第一個變體,以免強制您按下Enter:在'
我會嘗試使用節省一招這樣的歷史文件: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 " '!!'"
該死的,對不起,這不是vim。 – d33tah
我沒有看到這種現象的一個原因,但你在這裏有兩個誤區:''的'開頭: !ls'將運行命令':!screen -S foo -p run -X stuff'lsls'(無尾隨'''!):1.兩個劉海產生兩個先前的命令和2.'^ M'原始''由''產生')執行':!'命令。你應該使用''! ''。 –
ZyX
你究竟跑了什麼? – ZyX