Когда пишешь код в IntelliJ IDEA, привыкаешь что везде есть подсказки, везде где можно работает комплишен, всегда можно одним кликом перейти на декларацию метода или на его юсаджи. После этого интерфейс командной строки выглядит как-то бедно. Конечно, он очень хорошо продуман, сделан настолько удобным, насколько это возможно в текстовом UI, но в графическом UI возможностей намного больше. Представляю вам плагин для JetBrains IDE, позволяющий работать в командной строке cо всеми удобствами IDE.

Плагин Friendly Terminal позволяет печатать команду в редакторе IDE. Такой редактор удобнее чем текстовая командная строка, потому что в нём есть подсветка синтаксиса, продуманный комплишен, показ документации, работают привычные сочетания клавиш, можно перемещать курсор мышкой и т.д.
После запуска команды, пользователь переключается в текстовую консоль, где команда выполняется, так, как будто её запустили обычном терминале.
После завершения исполнения команды, пользователь возвращается в GUI интерфейс, где показан output команды и можно вводить следующую. Bash сессия в текстовой консоли висит в бэкграунде и ждёт пока не будет запущена следующая команда.

Output показывается средствами IDE, что позволяет сделать его интерактивным. Например, командаls /opt/my-app/conf выведет список файлов в директории /opt/my-app/conf, и эти имена файлов будут кликабельны, при нажатии c Ctrl файлы открываются в редакторе IDE, так же, из контекстного меню доступны свойства файла, копирование полного пути, и т.д.

Поиск команды в истории происходит во всплывающем окне, что позволяет видеть сразу несколько вариантов, в отличие от стандартного текстового терминала, где показывается только один вариант и легко пропустить нужный нажимая Ctrl+R.

File Manager

Навигация по файловой системе с помощью команд cdи ls — не самая удобная вещь, поэтому в плагине есть встроенный файловый менеджер типа Total Commander. Можно нажать Ctrl+O и откроются 2 файловых панели. В них можно ходить по директориям, копировать файлы, удалять файлы и т.д. Если вы на удалённой машине, то можно скачать файл или загрузить с локальной машины.

SSH

Командная строка используется, в основном, для доступа к удаленным машинам через SSH, поэтому все фичи должны работать даже если терминал подключен к удалённой машине. Было бы мало толка если бы GUI работал только локально. Это накладывает некоторые ограничения на способ получения данных. Допустим, пользователь открыл историю команд, плагину надо как-то узнать что там за история команд на удалённой машине. На локальной всё просто — можно прочитать историю из файла "~/.bash_history" , а для связи с удалённой есть только bash сессия, которая висит в бэкграунде, пока пользователь находится в GUI панели. Через эту bash сессиию и происходит загрузка всех данных. Например можно получить историю команд запустив history и распарсив результат, для комплишена имён файлов и навигации по файловой системе в File Manager запускается ls. Чтобы технические команды не зафлудили историю, они начинаются с пробела. Bash не сохраняет команду в истории, если она начинается с пробела.

Я писал, что можно открывать файлы в редакторе IDE, это работает и через SSH. В этом случае, файл скачивается в temporary директорию. Если его изменить, изменения можно выгрузить обратно нажав "Upload changes". video
Представляю что об этом думают фанаты vim... Но на вкус и цвет товарищей нет, этот плагин для любителей IntelliJ IDEA.

Маленькие, но полезные фичи

  • Ctrl+Shift+Space (smart completion) предлагает команды из истории, совпадающие по префиксу с тем что уже напечатано.

  • Иногда хочется взглянуть на вывод последней команды отдельно от всего остального, для этого можно нажать Ctrl+Shift-O или соответствующую иконку в конце вывода, и он откроется во всплывающем окне на весь экран.

  • Можно нажать Alt-Up, чтобы переместить курсор из строки ввода команды, в консоль, где печатается output команд, это позволяет что-нибудь скопировать без использования мыши. Дальнейшие нажатия Alt-Up / Alt-Down перемещают курсор к выводу следующей / предыдущей команды.

  • Нажатие Alt+F12 открывает терминал, в каком-бы месте IDE вы не находились.

Ограничения

Friendly Terminal работает только с Linux консолью. В Windows может работать только в WSL (Windows Subsystem for Linux) или как SSH клиент для подключения к Linux машинам. Работать с CMD или PowerShell не может. Теоретически, можно сделать поддержку Cygwin, но пока не сделано.

Ссылка на плагин: https://plugins.jetbrains.com/plugin/18857-friendly-terminal
Буду рад любым отзывам.

Комментарии (29)


  1. toliyansky
    00.00.0000 00:00
    +1

    Выглядит топово. Особенно тема с тем чтобы редактировать файл на сервере по ssh в самой IDEA, а не в nano или vim, или заниматься порнографией с FTP. Надо будет попробовать ваш плагин.


    1. DesertEagle
      00.00.0000 00:00
      +2

      А что мешает юзать vs code в обычном терминале?


      1. TITnet
        00.00.0000 00:00
        +3

        Зачем держать редактор VSCode, если есть радактор vim?


        1. DesertEagle
          00.00.0000 00:00

          Не знаю, не ко мне вопрос.

          не в nano или vim


      1. toliyansky
        00.00.0000 00:00
        +1

        Ну вопрос в том что как я понял файл вытягивается, вы его редактируете в прекрасной IDEA (последние два слова очень важны ведь в этом и суть), а потом синкате его обратно на сервер одним нажатием. Если же делать это в какой-нибдуь файлзиле то так не получится, вам чтобы поредачить файл в IDEA еще несколько лишних кликов надо будте сделать и еще плюс потом обратно закинуть на сервер.


  1. OlegSpectr
    00.00.0000 00:00

    Как человек, который часто работает через консоль, скажу что очень крутая задумка. И почему никто ранее такого не сделал?)) Обязательно испробую функционал


    1. OlegSpectr
      00.00.0000 00:00

      Я даже сразу решил попробовать на своей убунте, но кажется что-то пошло не так(
      Не работают подсказки для команд. Возможно конфликтует с tabnine, но в любом случае кроме tabnine других подсказок нет (ни локально, ни по ssh)
      Ещё в локальном режиме не работает панель с файлами, падает с ошибкой Failed to load file list.
      По SSH всё работает (не считая подсказок) и в целом выглядит очень круто, как минимум ради этого функционала стоит юзать.


      1. Sergey1124 Автор
        00.00.0000 00:00

        Спасибо что потестировали. Есть ли сообщение об ошибке в логе когда File Manager не может открыть директорию? В правом нижнем углу должна такая красная штука мигать, если на неё нажать - покажется эксепшен


        1. OlegSpectr
          00.00.0000 00:00

          Да, ошибка есть, вот скрин: https://ok-scr.ru/0210c03a.png


          1. Sergey1124 Автор
            00.00.0000 00:00
            +1

            Понятно в чём дело: у вас Ubunta руссифицироанная, команда id печатает слово "группы" по русски, поэтому плагин не может распарсить output. С помощью команды "id" плагин определяет имя пользователя и его группы.
            Исправлю в ближайшее время.


            1. mops1k
              00.00.0000 00:00

              Ошибка проявляется не только на Ubuntu, но и на любом другом русифицированном linux дистрибутиве. У меня, к примеру, ArchLinux. Ошибка та же


              1. Sergey1124 Автор
                00.00.0000 00:00

                Исправил, в версия 1.1.1 должна нормально работать.


          1. Sergey1124 Автор
            00.00.0000 00:00

            Исправил, в версия 1.1.1 должна нормально работать.


  1. artbolotov
    00.00.0000 00:00
    +1

    Отличная тема, сэкономил бы много часов при работе с консолями. Установил и коллегам порекомендую


  1. BrSlava
    00.00.0000 00:00
    +1

    под macos не работает. ls: unrecognized option `--format=long'. Думаю, что универсальные было бы `ls -l`

    Но с удаленными серверами работает как и положено


    1. Sergey1124 Автор
      00.00.0000 00:00
      +1

      Спасибо. У меня не было мака чтобы протестировать. Исправлю в ближайшее время.


    1. Sergey1124 Автор
      00.00.0000 00:00

      Исправил, в версия 1.1.1 должна нормально работать под MacOS.


  1. ris58h
    00.00.0000 00:00
    +4

    Исходники открыть планируете? В репе на гитхаб только issues.


  1. Catsys2
    00.00.0000 00:00
    +2

    Плагин то платный, о чем автор тактично умолчал. 30 дней демо, потом денег стоит. Деньги вроде не большие, и можно было бы поддержать разработчика, но учитывая ситуацию, мне например просто недоступно оплатить ее, тем более что там подписка.
    https://plugins.jetbrains.com/plugin/18857-friendly-terminal/pricing#tabs


    1. Sergey1124 Автор
      00.00.0000 00:00

      Плагин "Freemium", а не "Paid". Он будет работать и без оплаты после 30 дней. Покупка нужна только для доступа к платным функциям, но пока платных функций не добавлено. Так что, можте считать, что плагин бесплатный, а возможность купить - просто способ доната.


  1. YuryB
    00.00.0000 00:00

    Теоретически, можно сделать поддержку Cygwin

    я думаю куда актуальне msys2 под которым работает git для windows.

    насчёт автодополнения: есть же ctrl + R функционал в баше и работает он хорошо. я вообще парой строк настроил автодополение через стрелочки вверх вниз, т.е. если написать "ls" то можно стрелочками листать варианты окончания из истории.

    кликать по выводу вроде можно в zsh (и выплывающие окна с автодополнением там есть) но под win это всё как-то медленно работало (ставил поверх того же msys2).

    навигация по строке в стандартной консоле тоже простая типа alt+b или f. ctrl+u или k чтобы стереть начало-хвост.

    в общем как-то маловато, чтобы отказываться от стандартных инструментов, которые есть везде.


  1. jingvar
    00.00.0000 00:00
    +1

    Zsh нет?


  1. arelive
    00.00.0000 00:00
    +2

    Для хитрых манипуляций через ssh пользуюсь https://github.com/libfuse/sshfs, всё устраивает.


  1. SbWereWolf
    00.00.0000 00:00

    попробовал плагин, первое на что наткнулся, после команды sudo su, окно терминала сбросилось и пропало поле ввода плагина с его плюшками атодополнения и авто подстановки аргументов


    1. Sergey1124 Автор
      00.00.0000 00:00

      Всё верно. Вы запустили команду "sudo su" и она начала выполняться. Во время выполнения команды пользователь видит текстовую консоль вместо GUI панели. Когда команда "sudo su" завершится (например запустите "exit"), вы вернётесь в GUI панель.

      Можете нажать правой кнопкой мыши на консоли и выбрать в контекстном меню "Enable UI Session", чтобы все фичи включились для дочернего bash. Тоже самое можно сделать если зашли по ssh на другую машину, или в docker контейнер.


      1. SbWereWolf
        00.00.0000 00:00

        то что восстановиться по завершению я уже заметил.

        "Enable UI Session" - огонь !!

        Пользуюсь вторые сутки. Из обломов только то что поиск по истории команд работает только для команды из текущей сессии, конечно спорный момент надо ли грузить историю всех команд за всё время жизни юзера, но пока это единственное что обломало.

        Из всего больше радует файловый менеджер, жалко вывод не в формате `ls -la`, при настройке машины надо видеть пользователя, группу и права этих товарищей, жаль нельзя настроить колонки для отображения.

        Жалко нет команд chown chmod, посмотрите возможности FAR-а, я думаю с него можно слизать подобные моменты. Ни кто не осудит.

        Очень радует, что можно поправить файл и тут же его аплоаднуть, это всё можно делать через деплоймент - аплоад или деплоймент - синх, но тут прямо по файловой системе сервера ползаешь, и это кажется более комфортным.

        Плагин огонь.


  1. DjAntony
    00.00.0000 00:00

    Из-под Винды пользуюсь программой SnowFlake. Всём советую!


  1. MaxStirlits
    00.00.0000 00:00

    Если код не открыт, пускать его на сервер иак себе идея.


  1. MR_Kotovski
    00.00.0000 00:00

    vscodium(open source аналог vscode) имеет схожий плагин для подключения по ssh,с просмотром файловой системы(создавать/переименовать файлы/директории, некоторые и удалять),но имеет неприятный баг с работающим через раз буфером обмена в консоле