А еще в Visual Studio есть External Tools…

    Забавно, но я долгое время считал, что возможность запуска сторонних приложений из Visual Studio не заслуживает внимания. Серьезная интеграция требует разработки plugin, и точка!

    Как оказалось, я был неправ. Есть множество сценариев, когда External Tools позволит быстро расширить возможности Visual Studio.

    Как раз вчера мой хороший знакомый задал вопрос – как сделать аналог команды Open Containing Folder из пакета PowerCommands for Visual Studio 2010, но для вызова Far Manager, а не Windows Explorer? В оригинале эта команда доступна в контекстном меню Solution Explorer, она открывает Windows Explorer и устанавливает курсор на файл, для которого она была вызвана.

    Моя первая идея (нет ничего проще – нужно скачать PowerCommands.vsix из Visual Studio Gallery, распаковать его, разобрать на части Reflector’ом, обложиться руководствами по расширению Visual Studio и быстро написать аналог) понимания не нашла – написание plugins для Visual Studio (если это не расширения редактора) по-прежнему остается весьма нетривиальной задачей, и если нет опыта, то даже при наличии примеров и пошаговых руководств ее решение займет не меньше, чем полдня – если не целый день!

    Еще немного подумав, я решил, что для этих целей вполне подойдет механизм External Tools! И, действительно, создание «команды» Open Containing Folder in FAR заняло у меня не более получаса.

    Давайте посмотрим, как это можно сделать.

    Регистрация External Tool


    Первый шаг – регистрация нового External Tool.

    Для управления внешними инструментами в Visual Studio есть окно External Tools (Main Menu > Tools > External Tools...):


    Для добавления нового инструмента нужно нажать кнопку Add и указать некоторые параметры:

    Title: Open Containing Folder in FAR
    Command: «C:\Program Files\Far2\Far.exe»
    Arguments: $(ItemPath)

    Параметр Initial Directory в данном случае можно оставить пустым.

    Список аргументов, которые можно использовать для параметров Arguments и Initial Directory, можно посмотреть в MSDN Library в разделе External Tools in Visual Studio / Arguments for External Tools. Кроме того, можно воспользоваться специальным меню, которое открывается при нажатии на кнопку .

    Вот что у меня в итоге получилось:


    После закрытия окна External Tools в меню Main Menu > Tools появится пункт Open Containing Directory in FAR. При выборе этого пункта будет запускаться Far Manager, и курсор будет указывать на:
    1. Файл, открытый в редакторе – если вы обратились к меню из редактора;
    2. Файл, выбранный в Solution Explorer – если вы обратились к меню из Solution Explorer.

    Запуск CMD-скриптов


    Результат выполнения команды Open Containing Directory in FAR показан на рисунке ниже. И этот результат, мягко говоря, не впечатляет… Что неудивительно, т.к. Far Manager у меня настроен для работы при другом размере окна.


    Для того чтобы открывалось окно привычных размеров, потребуется написать небольшой сценарий:

    mode con cols=132 lines=59
    "C:\Program Files\Far2\Far.exe" %*

    Для запуска этого сценария из Visual Studio его потребуется сохранить на диск (я сохранил его под именем C:\psg\Tools\VSOpenInFAR\VSOpenInFAR.cmd) и изменить параметр Command, так, чтобы он указывал на этот сценарий:


    Вот теперь результаты можно считать вполне удовлетворительными, окно Far Manager имеет привычные для меня размеры.


    Примечание


    Для запуска CMD-сценариев Visual Studio использует cmd.exe, вызывая его в следующей форме:

    cmd.exe /c ""C:\psg\Tools\VSOpenInFAR\VSOpenInFAR.cmd" "C:\psg\...\Class2.cs""

    Если опция Close on exit не отмечена, форма вызова немного меняется:

    cmd.exe /c ""C:\psg\Tools\VSOpenInFAR\VSOpenInFAR.cmd" "C:\psg\...\Class2.cs" & pause"

    Это следует иметь в виду, чтобы избежать проблем с кавычками и с кодами завершения сценариев!

    Вызов External Tool из контекстного меню


    Ok, работоспособный инструмент мы получили, теперь можно заняться добавлением вкусностей – например, добавить вызов Open Containing Folder in FAR в контекстное меню Solution Explorer.

    Для этого требуется:
    1. Открыть окно Customize (Main Menu > Tools > Customize...).
    2. Перейти на вкладку Commands.
    3. В разделе Choose a menu or toolbar to rearrange выбрать пункт Context menu, а затем в расположенном рядом списке выбрать Project and Solution Context Menus | Item.

    Следующий шаг – выбор подходящей позиции для нового пункта меню. Я решил разместить его следом за пунктом Open Containing Folder.


    Теперь нужно вставить в выбранную позицию новый пункт меню, для этого предназначена кнопка Add Command, вызывающая одноименное окно.


    В этом окне нужно выбрать категорию Tools, а затем указать команду External Command 6 – к сожалению, команды для запуска External Tools можно идентифицировать только по порядковому номеру. После нажатия кнопки OK в контекстном меню появится новый пункт – External Command 6.


    Завершающий шаг – переименование пункта меню. Для этого нужно нажать на кнопку Modify Selection и в поле Name указать название инструмента – Open Containing Folder in FAR.


    Результат этих манипуляций показан ниже – пункт Open Containing Folder in FAR доступен в контекстном меню Solution Explorer:


    Дополнительная информация


    Дополнительную информацию по работе с External Tools можно получить на MSDN:
    1. External Tools in Visual Studio
    2. Arguments for External Tools

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 40

      +2
      Спасибо за решение!
      Приятно было подтолкнуть тебя к интересной статье ;)
        +6
        Пожалуйста.
        P.S. Пузырь с тебя! ;-)
          +1
          Киви. Договаривались же.
        +17
        Я люблю Far!
          +1
          А если не секрет — в чем профит работы в FAR-е, по сравнению, например, с Total Commander? Есть какие-то неведомые плюшки, или просто сила привычки?
            +2
            Можно я тоже скажу? ;-)

            По-моему в настоящее время, если не рассматривать какие-то очень специфичные сценарии, ни один из существующих файловых менеджеров не имеет каких-то существенных преимуществ перед конкурентами. Поэтому выбор того или иного файлового менеджера – вопрос привычки, личных предпочтений и т.п. Для меня выбор FAR обусловлен именно привычкой.
              0
              Из своей практики могу вспомнить случай когда нужно было подключится к ftp где было ОЧЕНЬ много файлов. Там хранились записи разговоров операторов кол центра, и файлы были самые разные — от пары мегабайт до нескольких сотен мегабайт.
              Так вот — у коллеги была проблема попасть на этот ftp. Тотал командер зависал намертво при попытке просмотреть директорию. В то же время FAR без проблем открыл эту директорию.
                +4
                Наверное в том, что сам интерфейс ФАРа распологает к чисто «клавиатурному» управлению, что в ряде случаев очень сильно повышает производительность труда :-)
                  +9
                  Да, как ни парадоксально, фар нереально удобен в плане эргономики (как редакторы типа vim, если помнить сочетания клавиш). Я им уже не меньше 10 лет пользуюсь и до сих пор время от времени открываю для себя новые фишки, которых раньше не замечал — например, поддержку регулярок в масках для выделения группы файлов. Небольшая подборочка: Секреты Far Manager

                  Ну и то, что он шустрый, конечно. 25-мегабайтный файл во встроенном просмотрщике открывается практически мгновенно.
                    0
                    Забавно, про Ctrl+<1..9> в Choose Drive Dialog я не знал, спасибо.
                      +2
                      25-мегабайтный файл открывается мгновенно потому, что нет скроллбара, для которого нужно считать весь файл и посчитать количество переводов строки :)
                      По той же причине файлы быстро открываются в консольных редакторах типа vim.
                        0
                        Вы уверены? Насколько я знаю, фар считывает файл в память целиком. В пользу этого свидетельствует то, что при открытии большого файла идет прогрессбар открытия, и памяти мгновенно выделяется примерно 3x от размера файла.
                          0
                          Ок, возможно, файл считывается в память. Но наверняка открытие файла быстрое потому, что он просто считывается поблочно, и ресурсы не тратятся на сверку каждой пары символов с CR, LF и CR/LF.
                            0
                            Ну, как бы там ни было, субъективно это куда удобнее :) Мотать туда-сюда можно с помощью PageUp / PageDown, а если долго — есть Alt+F8 :)
                            +2
                            Для редактирования — целиком. Для просмотра — нет.
                      +6
                      Я в фаре провожу около 70% рабочего времени. В нем пишу небольшие скриптики ( Colorer + PHPFunc ), правлю файлы по фтп. Ну и просто запускаю на работу разные скриптики ( регеры, парсеры и многое другое ) start /b php ./script.php

                      Фар для меня универсальный инструмент. Очень быстрая работа с большим кол-вом текстовых файлов, очень быстрое перемещение по каталогам ну и многое, многое другое :)

                      У примеру у меня брат спрашивал, как выбрать пару сотен файлов которые одинаково называются но в разных каталогах и текст этих файлов слепить в месте. В фаре это 10 секунд дела, alt-f7 — имя файла — alt-p — звездочка — f5 и готово :) Как это сделать в виндовом проводнике я даже думать не хочу.
                        +1
                        Наличие макросов — и этим всё сказано
                          +3
                          Лично для меня бесценна возможность открыть лог-файл для чтения (F3) и наблюдать в реальном времени, как появляются новые строки.
                            0
                            Слушайте, а помогите тоже. Я уже лет десять использую Тотал Коммандер, жить без него не могу, а вот Фар использую лишь периодически для специфических задач. Но вот пришлось мне отказываться от Тотала (корпоративная политика), на что бы мне пересесть, чтоб помягче? Наверняка я не один такой, кто-то настраивал Фар или что-то другое под использование, к которому привык в Тотале.
                              +1
                              Скажите пожалуйста — а что это у вас за «корпоративная политика» такая что не позволяет Тотал юзать?
                                +2
                                Она позволяет его юзать, но только 30 дней.
                                +1
                                Unreal Commander весьма похож на тотал, но мне больше FreeCommander пришелся по душе.
                                  0
                                  Unreal Commander — крайне глючный на мой взгляд, FreeCommander — обрезанный и неудобный.
                                  +1
                                  Есть много альтернатив.
                                  +1
                                  Если в организации весь софт сугубо лицензионный, то доказывать необходимость покупки платного инструмента вроде Total при наличии бесплатного Far то еще удовольствие :)

                                  Хотя это все фигня — кто больше к чему привык тот тем и пользуется.
                                0
                                Ёлки, оно вон как бывает. Даже не задумывался, что в VS можно так сделать. И не надо было.
                                А теперь, когда прочитал, понял — очень даже надо!
                                Спасибо.
                                Far forever!
                                :)
                                  +2
                                  А сколько еще открытий спрятано в справке
                                    0
                                    Знаю :)
                                    Говорю же — просто не задумывался, что мне это было надо
                                  +1
                                  Без скрипта imho можно обойтись: ПКМ на запущенном Far'e, Свойства, ширина-высота в обоих групбоксах (по вкусу), OK. Если спросит — то для всех.
                                  Т.е. у меня раньше было это натыкано и VS открывает в обычном размере Far'a :)
                                    0
                                    Да, можно и так. Вариантов много, у каждого есть свои плюсы, можно выбрать под собственные предпочтения.
                                      0
                                      А я уже давно обернул Far в ConEmu, т.ч. у меня вызов был бы таким: ".....\Far2\ConEmu.exe" и ничего настраивать не пришлось бы, ConEmu прекрасно хранит настройки ;)
                                      +1
                                      Меня больше интересует, как сделать пиктограмму для external command, чтобы можно было сделать нормальную кнопку с иконкой на тулбаре, а не с текстом. В vs2008 это делалось без проблем — в 2010 данную функцию убрали походу.
                                        0
                                        Я сходу не смог этого выяснить. Вполне возможно, что кроме написания своего package других способов нет.
                                          +1
                                          В vs2008 это делалось без проблем — в 2010 данную функцию убрали походу

                                          Да уж, в плане управления тулбарами 2010-я вышла провальной. Даже банально добрать/убавить кнопку в нужную позицию на тулбар стало в 100500 раз сложнее :/
                                          0
                                          Спасибо за статью, как все просто, оказывается! Да и фар — отличная штука, жаль только в коммерческих целях использовать нельзя.
                                            0
                                            Как нельзя?.. В лицензии об этом нет ни слова, там только условия дистрибуции оговариваются.
                                              +1
                                              Извиняюсь, не знал что с 2010 года фар распространяется бесплатно, отстал от жизни.
                                              Ссылка.
                                                0
                                                С 2007.
                                            +1
                                            Класс! Настроил себе для PowerShell. Студия рулит. Я был уверен что в External Tool ничего про текущий айтем не извесно.
                                              +2
                                              Открываем вимом исходник, позиционируя курсор на то же место, где он стоит в студии:
                                              Arguments:
                                              --servername VS_2008 --remote-silent "+call cursor($(CurLine), $(CurCol))" "+normal zz" $(ItemPath)

                                              Теперь по порядку:
                                              --servername VS_2008 --remote-silent позволяет не запускать каждый раз новую копию Vim, а открывать файл в уже запущенном. VS_2008 — это просто идентификатор, можно поменять на любой. У меня разные студии открывают каждая свой Vim.
                                              "+call cursor($(CurLine), $(CurCol))" позиционирует курсор.
                                              "+normal zz" делает так, чтобы строка с курсором была посередине экрана.

                                              Бонус: если в Solution Explorer выбрать проект и вызвать Vim — откроется на редактирование файл проекта. Часто бывает удобно.

                                              Only users with full accounts can post comments. Log in, please.