[О блоге] [наверх] [пред] [2018-12-23 17:26:26+03:00] [72bfea8fec7934c5c70a6a6795e48b8c8c9e920c]
Темы: [tip][vim]

Написал zshfe плагин для Vim

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 МОЯСТРОКАПОИСКА<Tab> EFHSZ
* затем подаёт <CR>, набирает exit и тоже <CR>, чтобы этот zsh вышел и
  не пришлось бы бесконечно ждать всего вывода из этого PTY
* в его выводе находит строку которая оказалась между ZSHFE ... EFHSZ.
  Она уже является результатом работы дополнения. При этом ждёт вывод
  (ведь это происходит полностью асинхронно и параллельно) exit, так как
  completion может работать даже с секунду
* выводит пойманную строку

    [оставить комментарий]