Как я могу просмотреть вывод консоли программы в редакторе, таком как Emacs или Vim в Linux? - PullRequest
2 голосов
/ 09 сентября 2011

Допустим, у меня есть простая программа: (псевдокод)

for(i=0;i<1000;i++)
{
   print(i + "\n");
   sleep(1);
}


Output:
0
1
2

Есть ли способ просмотреть этот вывод в редакторе, таком как emacs или Vi, при его изменении?Поведение, которое я хочу, похоже на "tail -f", выполняемый для файла, в который производится непрерывная запись.

Ответы [ 5 ]

4 голосов
/ 09 сентября 2011

Это на самом деле встроено в Emacs :)

M-x auto-revert-tail-mode

Из режима автоматического возврата хвоста C-h:

Когда включен хвостовой режим, хвост файла постоянно затем, как с командой оболочки `tail -f '. Это означает, что всякий раз, когда файл растет на диске (вероятно, потому что некоторые время от времени к нему добавляется фоновый процесс), это отражается в текущем буфере.

2 голосов
/ 09 сентября 2011
          (start-process "my-process" "foo" "ls" "-l" "/user/lewis/bin")
               ⇒ #<process my-process<1>>

          ---------- Buffer: foo ----------
          total 2
          lrwxrwxrwx  1 lewis     14 Jul 22 10:12 gnuemacs --> /emacs
          -rwxrwxrwx  1 lewis     19 Jul 30 21:02 lemon

          Process my-process<1> finished

          Process my-process finished
          ---------- Buffer: foo ----------
2 голосов
/ 09 сентября 2011

В Emacs есть Mx shell-команда, а также различные специализированные режимы для контроля вывода команды.Вы также можете запустить оболочку внутри Emacs с помощью оболочки Mx.Также нетрудно заставить процесс производить вывод непосредственно в буфер Emacs из elisp;см. документацию для запуска процесса (Ch f запуска процесса RET).

2 голосов
/ 09 сентября 2011

По крайней мере, в emacs вы можете открыть окно терминала и иметь его с одной стороны. Попробуйте M-x ansi-term RET . Затем вы можете разделить экран, используя различные C-x .

1 голос
/ 09 сентября 2011

Вы можете сделать что-то похожее на следующее, используя «ansi-term» и свою собственную программу (которую вы бы заменили вместо процесса «top», используемого в моем примере):

(progn 
  (ansi-term "/bin/sh" "top")
  (goto-char (point-max))
  (insert "top")
  (term-send-input))
...