Есть ли способ передать содержимое внешнего редактора в postgresql в буфер запросов, не выходя из редактора? - PullRequest
0 голосов
/ 03 ноября 2018

Моя среда:

OS: Linux CentOS 7 (x86_64)
PostgreSQL version: 10.5
Emacs 26.1

Я использую Emacs в качестве внешнего редактора в postgresql (установлен в моей переменной окружения EDITOR). Поэтому всякий раз, когда я печатаю в оболочке psql, \e открывает Emacs, где я могу писать / изменять запросы, представления, функции и т. Д.

Если я правильно понимаю, когда Emacs открыт, когда я ввожу C-x C-s, то есть я сохраняю и затем завершаю работу C-x C-c, отредактированное в Emacs содержимое передается в буфер запросов для анализа и выполнения ( при условии, что он содержит точку с запятой в конце). Таким образом, в основном каждый раз, когда мне нужно запустить \e, затем отредактировать, затем сохранить и выйти из редактора, чтобы выполнить работу.

Теперь, учитывая, что я использую Emacs для нескольких языков программирования, у меня довольно большой файл инициализации. В результате для запуска Emacs требуется несколько секунд (как в режиме -nw, так и в режиме GUI). Очевидно, это довольно раздражает, учитывая, сколько раз мне приходится открывать и выходить из редактора, пока я использую \e в psql.

Итак, мой вопрос: есть ли способ оставить внешний редактор открытым и продолжить работу с тем же редактором для дальнейших запросов и каким-то образом решить передать результат в буфер запросов, не выходя из редактора?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Выполнить emacsclient вместо emacs. У меня есть скрипт на ~/bin/editor:

#!/bin/sh
exec emacsclient -c -a '' "$@"

А потом я установил export EDITOR=$HOME/bin/editor в моем ~/.bashrc.

В результате вы запускаете Emacs только один раз, и каждый раз, когда вы запускаете $EDITOR, он просто присоединяется к одному и тому же сеансу Emacs.

Кроме того, я делаю

(global-set-key (kbd "C-x C-c") #'delete-frame)
(global-set-key (kbd "C-x C-S-c") #'save-buffers-kill-emacs)

поэтому C-x C-c просто удаляет фрейм, а не убивает Emacs.

0 голосов
/ 03 ноября 2018

Просто сохраните запрос во временный файл, например /tmp/q.sql, и несколько раз запустите \i /tmp/q.sql из psql со второго терминала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...