2013-07-19 2 views
2

Я пытаюсь сделать что-то очень простое:Vim автоматические прокрутки буфер

У меня есть два буфера в Vim, один с исходным кодом (B1), другой с текстовым файлом a.txt (В2). Исходный код в B1 запускается с помощью специального ярлыка в Vim, заполняя a.txt текстом. Я хочу, чтобы Vim автоматически прокручивал B2 каждый раз, когда он обновляется, даже если мой курсор находится в B1. Итак, я просто хочу, чтобы буфер B2 вел себя так, как делает tail -f.

Выполнение этого с помощью ConqueTerm не является вариантом, так как буфер B2 может быть буфером предварительного просмотра от другого плагина.

ответ

2

В общем, пожар vim в ответ на вход пользователя. Они не просто работают постоянно в фоновом режиме.

This post Подробные сведения о некоторых трюках, которые вы можете переделать, чтобы написать некоторый код настройки, чтобы перезагрузить буфер «хвост -f» и периодически прокручивать донизу.

Вместо того, чтобы сделать все это в Vim, здесь другое предложение, которое позволит достичь аналогичного эффекта с помощью GNU Screen (одну концевой области с Vim редактированием файла file1, другой работают tail -f против другого файла file2):

  • загрузить/установить GNU Screen (возможно 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. Вот изображение результата.

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

+0

Привет, Рассел, спасибо за ответ, но экран не вариант. Как я уже сказал, буфер B2 может быть буфером предварительного просмотра (и в моем самом важном случае это). Решение ideia должно быть внутри vim, а не снаружи. Ваше решение работает для внешнего файла, действующего как журнал, и на самом деле ему не нужен экран, просто простое окно терминала, новая вкладка или использование мультиплексоров (экран или tmux). Я продолжу искать решение в стиле vim/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 всякий раз, когда он был изменен (таким образом, в обход необходимости запуска кода на переднем плане), вам понадобится внешний механизм для обнаружения изменений файла (например, inotifywait в Linux).Насколько я знаю, Vim проверяет только внешние изменения (с autoread), когда вы перемещаете курсор в это окно.

Смежные вопросы