From 72bfea8fec7934c5c70a6a6795e48b8c8c9e920c Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sun, 23 Dec 2018 17:26:26 +0300 Subject: [PATCH] =?utf8?q?=D0=9D=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB=20zsh?= =?utf8?q?fe=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=20=D0=B4=D0=BB=D1=8F?= =?utf8?q?=20Vim?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit https://git.stargrave.org/cgit.cgi/vim-dotfiles.git/commit/?id=81ce5c525547a1f8748a76711830a86d700c812e Давно хотел сделать так, чтобы можно было открывать файлы указывая не родным дополнением, а используя движок zsh. В Vim нет никаких hook-ов для того чтобы для этого действия вызывать что-то своё. Поэтому решаю делать отдельную команду (Fe (:edit), Fsp (:split), Fvs (:vsplit)) которой указать то, чтобы я ввёл в zsh и нажал Tab. Считаю что можно пожертвовать случаем когда вариантов может быть предложено несколько и нельзя будет выбрать среди них. На моей практике этот случай в меньшинстве. Надо "просто" получить результат дополнения от zsh-а. Пришлось искать на stackexchange. Как оказалось, такой возможности zsh не предоставляет. Но я взял идею использования zpty модуля для этой цели. Vim команды просто обычным system() вызовом запускают отдельную утилиту на zsh, которая: * запускает на отдельном PTY zsh интерпретатор * подаёт в этот PTY команду: print ZSHFE МОЯСТРОКАПОИСКА EFHSZ * затем подаёт , набирает exit и тоже , чтобы этот zsh вышел и не пришлось бы бесконечно ждать всего вывода из этого PTY * в его выводе находит строку которая оказалась между ZSHFE ... EFHSZ. Она уже является результатом работы дополнения. При этом ждёт вывод (ведь это происходит полностью асинхронно и параллельно) exit, так как completion может работать даже с секунду * выводит пойманную строку -- 2.50.0