Получите вход от редактора (vim / nano / emacs / textmate?)

Мне было просто любопытно, есть ли способ получить вход не из StdIn а из $EDITOR – будь то vim, nano, emacs или даже не-командной строки-редактора (MacVim / TextMate). Каковы варианты / обходные пути / bestpractices?

В принципе, я бы хотел работать с heredoc но вместо этого вместо редактора $.

 $ sort -nr << FOO | uniq -c pipe heredoc> foo pipe heredoc> bar pipe heredoc> baz pipe heredoc> foo pipe heredoc> FOO 2 foo 1 baz 1 bar 

  • Каков предполагаемый прецедент для COMPLETE_ALIASES в zsh?
  • история не сохраняется в zsh
  • Самый быстрый способ открыть все файлы в каталоге с несколькими расширениями файлов в командной строке
  • Отображение стандартного вывода фонового процесса в определенном месте терминала
  • Как запустить вторую команду, когда в командной строке запущена определенная команда?
  • Установки завершения zsh (autojump) - Как их использовать?
  • dircolors on zsh: непризнанные ключевые слова: MULTIHARDLINK, RESET & CAPABILITY
  • Какой интерпретатор оболочки запускает скрипт без shebang?
  • 4 Solutions collect form web for “Получите вход от редактора (vim / nano / emacs / textmate?)”

    Команда vipe в пакете moreutils позволяет запускать $ EDITOR в середине конвейера.
    Вы можете получить желаемое поведение следующим образом:

     $ </dev/null vipe |sort -nr | uniq -c 

    Я предполагаю, что ваш единственный шанс заставить его работать с любым редактором – использовать временные файлы:

     FILE=$(mktemp); $EDITOR "$FILE"; <"$FILE" …command… ; rm "$FILE" 

    (Однако это не позволяет запустить команду до предоставления полного ввода.)

    Также вы можете использовать echo "# please insert your input bellow" >"$FILE" перед вызовом в $EDITOR чтобы вставить комментарий, который появится внутри редактора. Убедитесь, что это не повлияет на поведение команды (или попросите пользователя явно удалить ее).

    Emacs имеет возможность запускать оболочку в одном из своих буферов (используйте оболочку MX). Но запущенные процессы все равно получат свой вклад от stdin, их stdin будет просто псевдотерминалом, другим концом которого будет emacs.

    В Emacs вы можете запускать любую команду и предоставлять контент одного из буферов Emacs (выбранный регион, если быть точным), как stdin для приложения.

    Например, если содержимое буфера Emacs будет ls и вы помечаете его как регион (используя C-SPC ), затем запустите shell-command-on-region ( M-| ) и введите команду bash (полная комбинация: M-| command RET ) в bash будет выполнено ls и вывод будет открыт как новый буфер.

    Если вы используете Cu M-| command RET Cu M-| command RET в области, выход заменит отмеченную команду в вашем текущем буфере.

    Linux и Unix - лучшая ОС в мире.