В итоге я написал надстройку для vim под названием shell_complete
. На самом деле это не супер-мегазорд-круто, но он делает почти то, что я искал, то есть более или менее имитирует завершение, используемое :!
. Это означает, что это своего рода «псевдозавершение оболочки»: он завершает команды для первого «слова» и файлов оттуда. Базовое \
экранирование пробелов работает нормально.
завершение псевдооболочки
Установка shell_complete
несколько сложна, особенно для тех, кто не знаком с vim-addon-manager. . Аддон имеет несколько зависимостей, и ни одна из них не «опубликована», то есть VAM еще не знает о них. Вы можете сообщить о них VAM, установив (через git clone
; дополнительную информацию см. в документации) другое дополнение, которое я назвал tt_addons
. В любом случае, как только вы это сделаете, вы сможете просто :ActivateAddons tt_addons
, а затем :ActivateAddons shell_complete
.
Если вы не используете VAM, вам придется загрузить (или git clone
, что более вероятно) все соответствующие модули, а затем смешать их в каталоге vim, или создать из них пакеты патогенов, или что-то еще. Если вы действительно в конечном итоге захотите сделать это, вероятно, вам стоит начать использовать VAM. Если вы какой-то ворчливый луддит, который отказывается это делать, дайте мне знать, и я могу опубликовать это на vim.org, если будет достойный интерес.
Я думаю, довольно очевидно (по крайней мере, из документации), как использовать shell_complete
, но если вы хотите увидеть его в действии, вы можете проверить мой reput
, который использует его для завершения своей команды :RePutShell
. reput
также в настоящее время доступен только через github, и те же предостережения применяются в отношении установки через VAM.
Фактическое завершение оболочки с использованием оболочки
Для справки, я думаю, что предложение sehe об использовании самой оболочки для завершения полностью вспышка. На самом деле я потратил довольно много времени на выяснение того, как это сделать, и решил, что это возможно, по крайней мере, в теории. Сначала я думал, что будет проще сделать это таким образом, чем делать то, что делает shell_complete
, но оказалось, что bash (как и vim) не предоставляет никакого программного способа доступа к своим средствам завершения, поэтому вам в конечном итоге придется переопределить их в bash после очистки конфигурации с помощью grep
и друзей. Баш очень плох для такого рода вещей, поэтому я трусливо отказываюсь участвовать в этой битве, по крайней мере, на данный момент.
Если кто-то настолько смелый/глупый, чтобы принять этот стандарт, он может воспользоваться хрониками моих мучений. Мне удалось заставить его выполнять завершения, которые обрабатываются пользовательскими функциями завершения. Однако это лишь малая часть головоломки, потому что bash также предоставляет около 6½ других способов завершения. Он как бы дополняет функциональность, предоставляемую shell_complete, поэтому может быть целесообразно синергетически объединить их в своего рода неуклюжий, пьяный Voltron завершения оболочки vim.
person
intuited
schedule
10.05.2011