我想要做的東西很簡單:Vim的自動滾動緩衝
我在Vim的兩個緩衝區,一個帶源代碼(B1),另外一個用文本文件a.txt
(B2)。 B1中的源代碼在Vim中使用自定義快捷方式運行,用文本填充a.txt
。我希望Vim在每次更新時自動滾動B2,即使我的光標在B1中。所以,我只是希望緩衝區B2的行爲方式爲tail -f
。
用ConqueTerm做這件事不是一個選項,因爲緩衝區B2可以是其他插件的預覽緩衝區。
我想要做的東西很簡單:Vim的自動滾動緩衝
我在Vim的兩個緩衝區,一個帶源代碼(B1),另外一個用文本文件a.txt
(B2)。 B1中的源代碼在Vim中使用自定義快捷方式運行,用文本填充a.txt
。我希望Vim在每次更新時自動滾動B2,即使我的光標在B1中。所以,我只是希望緩衝區B2的行爲方式爲tail -f
。
用ConqueTerm做這件事不是一個選項,因爲緩衝區B2可以是其他插件的預覽緩衝區。
通常,vim事件會響應用戶輸入而觸發。他們不只是在後臺運行。
This post詳細介紹一些技巧,您可以重新編寫一些自定義代碼來重新加載「tail -f」緩衝區並定期滾動到底部。
而不是試圖做這一切在vim,這裏是一個不同的建議,將實現使用GNU Screen(用vim一個終端區域編輯文件file1
,另一個運行tail -f
針對不同的文件file2
)類似的效果:
apt-get install screen
)screen
vim file1
Ctrl-A S
到終端攔腰水平分割(或,在最新版本的screen
,Ctrl-A |
將其分割向下垂直中間)Ctrl-A Tab
切換到分割的另一側Ctrl-A c
到開始這一邊tail -f file2
現在分割的一側示出了vim file1
和另一側示出tail -f file2
。這是結果的圖像。
該命令移動到包含a.txt
窗口,其重裝(edit
),移動到端部(+$
),然後跳回到前一個窗口。您可以將其添加到運行源代碼的快捷方式,以便在代碼運行時更新a.txt
。
:exe bufwinnr("a.txt") . "wincmd w" | edit +$ | exe winnr("#") . "wincmd w"
記住逃脫吧(\|
),並在末尾加上<CR>
如果你使用這一個映射。
這將需要您在前臺運行代碼的快捷方式,並且Vim將無響應直到完成(除非您按Ctrl-C)。如果您希望Vim在更改時自動重新加載a.txt
(因此繞過了在前臺運行代碼的需要),您將需要用於文件更改檢測的外部機制(例如Linux上的inotifywait
)。據我所知,當你將光標移動到該窗口時,Vim只檢查外部變化(使用autoread
)。
你好羅素,謝謝你的回答,但屏幕不是一個選項。正如我所說,緩衝區B2可以是一個預覽緩衝區(在我最重要的情況下)。解決方案的想法是在vim裏面,而不是在外面。您的解決方案適用於外部文件,類似於日誌,實際上它不需要屏幕,只需簡單的終端窗口分割,新選項卡或使用多路複用器(屏幕或tmux)即可。我將繼續尋找vim style/lang的解決方案。 – oclinux