Получите вход от редактора (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 

  • Как перечислить все папки в каталоге, не начиная с символа L?
  • Как вы управляете своими псевдонимами bash / zsh?
  • Параметры команды загрузки из файла верхнего уровня
  • Почему «набор» не работает для меня, а «объявляет»?
  • zsh сохраняет историю обмена даже при отключенной общей истории
  • Как выполнить команду, не сохраняя ее в истории (даже для клавиши «вверх») в zsh
  • Выполнение команды на разных оболочках
  • Zsh - более интеллектуальная автокоррекция
  • 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 в области, выход заменит отмеченную команду в вашем текущем буфере.

    Interesting Posts

    Не удается установить вино на debian amd64:

    Начните полноцветный полноэкранный режим с терминала

    Как создать резервную копию виртуальных дисков с помощью PlayOnLinux?

    Как хранить в переменной список файлов, который включает обратную косую черту, когда это необходимо?

    VNC отправляет Ctrl + Alt + F1-F6 на сервер

    systemd: переместить getty в tty2 + и запустить скрипт на tty1

    Найти файл с наименьшим 4-значным номером

    Добавить ssh pubkey в authorized_keys на локальном хосте (пропуск отсутствует)

    Как объединить zw autocomplete для аргументов функции-оболочки и существующей команды

    Горит успешно, каталог доступен, но не может выполнять операции (cp, mkdir и т. Д.)

    fedora 22 – переход от gnome к kde4

    Eval для имен файлов, зло?

    для + array + args

    Извлечение подмножества строк файла на основе регулярного выражения для первой и последней строки

    Программное обеспечение для контроля доступа по времени для точек доступа Wi-Fi

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