Когда пишешь код в 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)
OlegSpectr
00.00.0000 00:00Как человек, который часто работает через консоль, скажу что очень крутая задумка. И почему никто ранее такого не сделал?)) Обязательно испробую функционал
OlegSpectr
00.00.0000 00:00Я даже сразу решил попробовать на своей убунте, но кажется что-то пошло не так(
Не работают подсказки для команд. Возможно конфликтует с tabnine, но в любом случае кроме tabnine других подсказок нет (ни локально, ни по ssh)
Ещё в локальном режиме не работает панель с файлами, падает с ошибкой Failed to load file list.
По SSH всё работает (не считая подсказок) и в целом выглядит очень круто, как минимум ради этого функционала стоит юзать.Sergey1124 Автор
00.00.0000 00:00Спасибо что потестировали. Есть ли сообщение об ошибке в логе когда File Manager не может открыть директорию? В правом нижнем углу должна такая красная штука мигать, если на неё нажать - покажется эксепшен
OlegSpectr
00.00.0000 00:00Да, ошибка есть, вот скрин: https://ok-scr.ru/0210c03a.png
Sergey1124 Автор
00.00.0000 00:00+1Понятно в чём дело: у вас Ubunta руссифицироанная, команда id печатает слово "группы" по русски, поэтому плагин не может распарсить output. С помощью команды "id" плагин определяет имя пользователя и его группы.
Исправлю в ближайшее время.mops1k
00.00.0000 00:00Ошибка проявляется не только на Ubuntu, но и на любом другом русифицированном linux дистрибутиве. У меня, к примеру, ArchLinux. Ошибка та же
artbolotov
00.00.0000 00:00+1Отличная тема, сэкономил бы много часов при работе с консолями. Установил и коллегам порекомендую
BrSlava
00.00.0000 00:00+1под macos не работает. ls: unrecognized option `--format=long'. Думаю, что универсальные было бы `ls -l`
Но с удаленными серверами работает как и положено
Sergey1124 Автор
00.00.0000 00:00+1Спасибо. У меня не было мака чтобы протестировать. Исправлю в ближайшее время.
Catsys2
00.00.0000 00:00+2Плагин то платный, о чем автор тактично умолчал. 30 дней демо, потом денег стоит. Деньги вроде не большие, и можно было бы поддержать разработчика, но учитывая ситуацию, мне например просто недоступно оплатить ее, тем более что там подписка.
https://plugins.jetbrains.com/plugin/18857-friendly-terminal/pricing#tabsSergey1124 Автор
00.00.0000 00:00Плагин "Freemium", а не "Paid". Он будет работать и без оплаты после 30 дней. Покупка нужна только для доступа к платным функциям, но пока платных функций не добавлено. Так что, можте считать, что плагин бесплатный, а возможность купить - просто способ доната.
YuryB
00.00.0000 00:00Теоретически, можно сделать поддержку Cygwin
я думаю куда актуальне msys2 под которым работает git для windows.
насчёт автодополнения: есть же ctrl + R функционал в баше и работает он хорошо. я вообще парой строк настроил автодополение через стрелочки вверх вниз, т.е. если написать "ls" то можно стрелочками листать варианты окончания из истории.
кликать по выводу вроде можно в zsh (и выплывающие окна с автодополнением там есть) но под win это всё как-то медленно работало (ставил поверх того же msys2).
навигация по строке в стандартной консоле тоже простая типа alt+b или f. ctrl+u или k чтобы стереть начало-хвост.
в общем как-то маловато, чтобы отказываться от стандартных инструментов, которые есть везде.
arelive
00.00.0000 00:00+2Для хитрых манипуляций через ssh пользуюсь https://github.com/libfuse/sshfs, всё устраивает.
SbWereWolf
00.00.0000 00:00попробовал плагин, первое на что наткнулся, после команды sudo su, окно терминала сбросилось и пропало поле ввода плагина с его плюшками атодополнения и авто подстановки аргументов
Sergey1124 Автор
00.00.0000 00:00Всё верно. Вы запустили команду "sudo su" и она начала выполняться. Во время выполнения команды пользователь видит текстовую консоль вместо GUI панели. Когда команда "sudo su" завершится (например запустите "exit"), вы вернётесь в GUI панель.
Можете нажать правой кнопкой мыши на консоли и выбрать в контекстном меню "Enable UI Session", чтобы все фичи включились для дочернего bash. Тоже самое можно сделать если зашли по ssh на другую машину, или в docker контейнер.
SbWereWolf
00.00.0000 00:00то что восстановиться по завершению я уже заметил.
"Enable UI Session" - огонь !!
Пользуюсь вторые сутки. Из обломов только то что поиск по истории команд работает только для команды из текущей сессии, конечно спорный момент надо ли грузить историю всех команд за всё время жизни юзера, но пока это единственное что обломало.
Из всего больше радует файловый менеджер, жалко вывод не в формате `ls -la`, при настройке машины надо видеть пользователя, группу и права этих товарищей, жаль нельзя настроить колонки для отображения.
Жалко нет команд chown chmod, посмотрите возможности FAR-а, я думаю с него можно слизать подобные моменты. Ни кто не осудит.
Очень радует, что можно поправить файл и тут же его аплоаднуть, это всё можно делать через деплоймент - аплоад или деплоймент - синх, но тут прямо по файловой системе сервера ползаешь, и это кажется более комфортным.
Плагин огонь.
MR_Kotovski
00.00.0000 00:00vscodium(open source аналог vscode) имеет схожий плагин для подключения по ssh,с просмотром файловой системы(создавать/переименовать файлы/директории, некоторые и удалять),но имеет неприятный баг с работающим через раз буфером обмена в консоле
toliyansky
Выглядит топово. Особенно тема с тем чтобы редактировать файл на сервере по ssh в самой IDEA, а не в nano или vim, или заниматься порнографией с FTP. Надо будет попробовать ваш плагин.
DesertEagle
А что мешает юзать vs code в обычном терминале?
TITnet
Зачем держать редактор VSCode, если есть радактор vim?
DesertEagle
Не знаю, не ко мне вопрос.
toliyansky
Ну вопрос в том что как я понял файл вытягивается, вы его редактируете в прекрасной IDEA (последние два слова очень важны ведь в этом и суть), а потом синкате его обратно на сервер одним нажатием. Если же делать это в какой-нибдуь файлзиле то так не получится, вам чтобы поредачить файл в IDEA еще несколько лишних кликов надо будте сделать и еще плюс потом обратно закинуть на сервер.