Завершение команды оболочки - PullRequest
0 голосов
/ 16 апреля 2011

Пользовательским командам может быть предоставлена ​​опция -complete=shellcmd.Это вызывает разочарование, поскольку вместо того, чтобы работать так же, как встроенное завершение vim для своей команды :!, он просто многократно завершает имена команд оболочки в пути.

Я хотел бы написать команду, которая завершает имена команд, а затем файлы.Есть ли удобный способ сделать это, либо с помощью встроенной функциональности vim, либо через аддон?

Ответы [ 2 ]

1 голос
/ 17 апреля 2011

Почему бы не использовать bash-complete, пока вы на нем?Вы должны быть в состоянии ветвить оболочку bash с источником / etc / bash_completion и разговаривать с ней по каналам для ее опроса.Таким образом, у вас будут все вкусности оболочки.

Конечно, вы можете сделать, как я, и Cz приостановить Vim вместо того, чтобы вернуться к вашей оболочке.

0 голосов
/ 10 мая 2011

В итоге я написал аддон vim с именем shell_complete.Это на самом деле не супер-мегазорд-офигенный, но он делает в значительной степени то, что я искал, то есть более или менее подражать завершению, используемому :!.Это означает, что это своего рода «завершение псевдооболочки»: оно выполняет команды для первого «слова» и файлов оттуда.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * *} * * * * '' '' '' 'Vim-addon-менеджер .У аддона есть пара зависимостей, и ни одна из них не «опубликована», то есть VAM еще не знает о них.Вы можете сообщить VAM о них, установив (через git clone; см. Документацию для получения дополнительной информации) еще одно дополнение, которое я назвал tt_addons.В любом случае, после того, как вы это сделаете, вы сможете набрать :ActivateAddons tt_addons, а затем :ActivateAddons shell_complete.

Если вы не используете VAM, вам придется загрузить (или git clone,более вероятно) все связанные модули, а затем смешайте их в свой каталог vim, или сделайте из них пакеты с патогенами, или что у вас есть.Если вы действительно захотите это сделать, вероятно, стоит начать использовать VAM.Если вы какой-то придурковатый луддит, который отказывается это сделать, дайте мне знать, и я мог бы рассказать об этом на vim.org, если есть приличный интерес.

Я думаю, это довольно очевидно (по крайней мере, изdocs) как использовать shell_complete, но если вы хотели бы увидеть его в действии, вы можете проверить мой reput аддон, который использует его для выполнения по команде :RePutShell.reput в настоящее время также доступен только через github, и те же предостережения применимы в отношении установки через VAM.

Фактическое завершение оболочки с использованием оболочки

Для справки, я думаю, что предложение sehe оиспользование самой оболочки для завершения полностью флеш.На самом деле я потратил довольно много времени на то, чтобы понять, как это сделать, и определил, что это возможно, по крайней мере, в теории.Сначала я подумал, что будет проще сделать это таким образом, чем делать то, что делает shell_complete, но оказывается, что bash (например, vim) не предоставляет какого-либо программного способа доступа к его средствам завершения, поэтому в итоге вы получаетепереопределить их в bash, после очистки конфигурации, используя grep и друзей.Bash много сосет для такого рода вещей, поэтому я трусливо отказываюсь участвовать в этой битве, по крайней мере, на данный момент.

Если кто-то будет настолько смелым / глупым, чтобы принять этот стандарт, он может помочьСами из летописей моих страданий .Мне удалось заставить его делать дополнения, которые обрабатываются пользовательскими функциями завершения.Тем не менее, это только небольшая часть головоломки, потому что bash также предоставляет около 6½ других способов сделать завершение.Он как бы дополняет функциональность, предоставляемую shell_complete, поэтому, возможно, стоит объединить эти два в своего рода неуклюжего, пьяного завершения Voltron оболочки vim.

...