2013-07-19 85 views
2

我想要做的東西很簡單:Vim的自動滾動緩衝

我在Vim的兩個緩衝區,一個帶源代碼(B1),另外一個用文本文件a.txt(B2)。 B1中的源代碼在Vim中使用自定義快捷方式運行,用文本填充a.txt。我希望Vim在每次更新時自動滾動B2,即使我的光標在B1中。所以,我只是希望緩衝區B2的行爲方式爲tail -f

用ConqueTerm做這件事不是一個選項,因爲緩衝區B2可以是其他插件的預覽緩衝區。

回答

2

通常,vim事件會響應用戶輸入而觸發。他們不只是在後臺運行。

This post詳細介紹一些技巧,您可以重新編寫一些自定義代碼來重新加載「tail -f」緩衝區並定期滾動到底部。

而不是試圖做這一切在vim,這裏是一個不同的建議,將實現使用GNU Screen(用vim一個終端區域編輯文件file1,另一個運行tail -f針對不同的文件file2)類似的效果:

  • 下載/安裝GNU Screen(也許apt-get install screen
  • 運行screen
  • 運行vim file1
  • 類型Ctrl-A S到終端攔腰水平分割(或,在最新版本的screenCtrl-A |將其分割向下垂直中間)
  • 類型Ctrl-A Tab切換到分割的另一側
  • 類型Ctrl-A c到開始這一邊
  • 運行一個新的終端tail -f file2

現在分割的一側示出了vim file1和另一側示出tail -f file2。這是結果的圖像。

Here's an image of me using <code>vim</code> and <code>gnu screen</code>.

+0

你好羅素,謝謝你的回答,但屏幕不是一個選項。正如我所說,緩衝區B2可以是一個預覽緩衝區(在我最重要的情況下)。解決方案的想法是在vim裏面,而不是在外面。您的解決方案適用於外部文件,類似於日誌,實際上它不需要屏幕,只需簡單的終端窗口分割,新選項卡或使用多路複用器(屏幕或tmux)即可。我將繼續尋找vim style/lang的解決方案。 – oclinux

1

該命令移動到包含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)。