Редакторы, IDE и все-все-все


Редакторы, IDE и все-все-все

1 Редакторы

  • Обычные
  • Модальные

2 IDE

3 Отдельные языковые инструменты

4 Примеры:

  • Neovim
  • Kakoune

5 IntelliJ IDEA


Редактор

Редактор — это самостоятельная программа или компонент программного комплекса, такой как редактор исходного кода в интегрированной среде разработки или окно ввода в браузере.

Редактор предназначен для создания и изменения текстовых данных и файлов.

Примером редактора является sed, который мы ранее изучали. Он полностью соответствует определению редактора, но нас интересуют редакторы именно с интерфейсом (TUI или GUI).


Редактор

Редакторы бывают с текстовым пользовательским интерфейсом (TUI):

  • kakoune;
  • Neovim;
  • Emacs;
  • древний Nano;

И с графическим пользовательским интерфейсом (GUI):

  • Helix;
  • Visual Studio Code — широко используемый редактор с мощными возможностями расширения;
  • Sublime Text — известен своей скоростью и гибкостью;
  • Fleet — новый редактор от JetBrains, который обещает интеграцию современных функций и улучшенную производительность;
  • бесчисленное множество других.;

Существует множество других редакторов, каждый со своими уникальными особенностями и преимуществами.


Модальный редактор

Обычный (немодальный) блокнот в Windows работает в одном режиме: набор текста.

Модальные же редакторы имеют несколько режимов.

Так, у Vim и, например, Neovim их три:

  • Основной (normal) — для перемещения курсора и выполнения команд;
  • Набор (insert) — режим для набора текста;
  • Визуальный (visual) — для выделения текста.

В kakoune режима два:

  • Основной (совмещает визуальный и основной);
  • Набор.

Другие модальные редакторы:

  • Helix

IDE

Integrated Development Environment (IDE) — это среда разработки, которая обычно включает в себя множество встроенных модулей:

  • Расширенные подсказки благодаря построению индекса проекта;
  • Файловый менеджер;
  • Интеграция с Continuous Integration (CI);
  • Отладчик;
  • Текстовый редактор;
  • и другие инструменты.

Эти модули “интегрированы” в один продукт, отсюда и название.

Примеры IDE:

  • Visual Studio IDE (популярная среда для разработки на C#, C++ и других языках)
  • IntelliJ IDEA (и смежные продукты, такие как Rider, PyCharm, Data Grip)
  • Eclipse (хотя он считается устаревшим и многие разработчики перешли на более современные альтернативы)

В IDE всё легко

В IDE всё легко:

  • Легко проводить некоторые из возможных преобразований кода.
  • Легко работать с проектами, включающими код на многих языках.
  • Легко рисовать графические интерфейсы и настраивать базы данных.
  • Легко устанавливать плагины.
  • Легко породить плохо структурированный код, который можно читать только в IDE.
  • Легко напороться на баг в IDE, из-за которого перестанет работать вообще всё.
  • Легко перестать понимать, как проект собирается (и почему иногда не собирается).


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


Отдельные языковые инструменты


Отдельные языковые инструменты

  • Linter : Программа, сообщающая о стилистических проблемах и предупреждающая о возможных ошибках.

    Haskell : hlint;

    shell : shellcheck;

    Python : Тысячи их; пусть будет pylint;

    Rust : clippy;

    C++ : clang-tidy

  • Formatter : Программа, автоматически выравнивающая код согласно установленному стилю. Не тратьте ни минуты на подсчёт пробелов!

    Haskell : brittany;

    Python : Тысячи их; пусть будет YAPF;

    Rust : rustfmt;

    C++ : clang-format

  • Tree sitter: Библиотека для обхода редакторами синтаксических деревьев.


LSP

Ссылка: https://microsoft.github.io/language-server-protocol/

Language Server Protocol (LSP) — это открытый протокол на основе JSON-RPC для коммуникации между редакторами/IDE и языковым сервером.

Протокол описывает следующие функции, полезные для написания кода:

  • Автодополнение;
  • Подсветка синтаксиса;
  • Подсказки ошибок;
  • Инструменты для рефакторинга и другие.

LSP

Цель LSP — разделить разработку и поддержку языка программирования от разработки редактора или IDE.

Для каждого языка программирования создается своя реализация LSP, часто с открытым исходным кодом: список существующих реализаций.

Может быть использован как в редакторах, так и в IDE.

Большинство современных редакторов и IDE либо по-умолчанию уже поддерживают LSP, либо где-то наверняка существует плагин для подключения LSP и его стоит поискать.


Примеры


IntelliJ IDEA

Для успешной работы с IDEA достаточно знать сочетание клавиш Shift + Shift, оно открывает окно Search Everywhere.
Через него можно найти всё остальное:

  • Функции, методы, классы и другие абстракции, доступные в проекте;
  • Действия и настройки самой IDE;
  • Редакторские действия, такие как выделение переменной или метода, определение заглушек для методов;
  • Действия для CI;
  • И многое другое.

Источник: https://resources.jetbrains.com/help/img/idea/2022.3/search_everywhere_pull.png


IntelliJ IDEA

IntelliJ IDEA — это интегрированная среда разработки программного обеспечения от JetBrains. Она поддерживает множество языков программирования, включая Java, JavaScript и Python.

Источник: https://plugins.jetbrains.com/files/12169/screenshot_19216.png


IntelliJ IDEA

В IntelliJ IDEA есть встроенный текстовый редактор с продвинутым автодополнением, основанным на анализе кода проекта и стандартной библиотеки.


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


В IDEA также имеются отладчик, менеджер файлов, интеграция с CI и системами контроля версий, а также локальная история изменений.


NeoVim

Ссылка: https://neovim.io/

Neovim - это форк Vim. Появился с целью улучшить кодовую базу Vim, позволяющий упростить реализацию API, улучшить пользовательский опыт и упростить процесс внедрения новых плагинов.

Получилось не всё, но Neovim вдохновил такие редакторы, как kakoune и Helix.


Как начать пользоваться

Если никогда не пользовались модальным редактором до этого, то рекомендуется начать приключение с vimtutor — он идёт вместе с neovim.

Пройдите его хотя бы один, а лучше несколько раз, там и про то, что у neovim несколько режимов (как и у других модальных редакторов):

  • insert для ввода текста;
  • command для выполнения команд самого редактора;
  • visual для визуального выделения курсором;

И про то, как использовать все основные действия. И про многое другое.

Книга “Practical Vim” доучивает остальному.


Перемещение курсора

Если Вы уже имели опыт с модальным редактором, то ниже короткая справка.
Чтобы переместить курсор в основном режиме (в него всегда можно выйти с помощью ESC):

КомандаДействие
3jна три строки ниже
5kна пять строк выше
hвлево на один символ
lвправо на один символ
wв начало следующего слова
eв конец слова
f)найти следующую скобку
F)найти предыдущую скобку
17Gна строку 17
ggна первую строку
Gна последнюю строку

Команды/действия

Но перемещение курсора, конечно, не единственное, что можно делать в основном режиме. В общем виде команды такие:

ДействиеКоличествоОбъект
d elete3w ord
c hangep aragraph
y ank (copy)h left
v isually selectj next line
> increase indentk prev line
= fix indentl right
e nd of word
b eginning of previous word
i} in }‘s

Набор

Для перехода в режим набора текста можно воспользоваться следующими командами:

КомандаДействие
iначать набор прямо перед курсором
aначать набор после курсора
Iнабор в начале строки
Aнабор в конце строки

Выход обратно в основной режим: ESC

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

Наберите команду :help + Enter в основном режиме для ознакомления.


kakoune

Ссылка: https://kakoune.org/

kakoune — это vim-inspired редактор, поэтому многое в нём похоже или унаследовано от vim. Но обычно чище и всё же есть довольно важные отличия.

В kakoune также поддерживаются плагины, можно через них подключить lsp, также есть подсветка синтаксиса и т.п.

Он точно также модальный, но, как ранее уже упоминалось, основной и визуальный режим совмещены.

Вместо курсора в kakoune в основном режиме всегда есть минимум одно выделение.


kakoune. Выделение

Поэтому все перемещения работают не с курсором, а с выделением:

КомандаДействие
wвыделить следующее слово
Wне скидывать старое выделение и выделить следующее слово
bвыделить предыдущее слово
Bстарое выделение + предыдущее слово

Действия применяются уже к этим выделениям, так оказывается намного удобнее: благодаря выделению сразу видно к какой части текста будет применена команда.


kakoune. Регулярные выражения

Ещё одно важное отличие и преимущество kakoune по сравнению с Vim: активное использование регулярных выражений.

Попробуйте сами открыть файл с содержимым выше и выполнить (усложнённая регулярка для демонстрации):

3j 9J Gl s (ввести: ^\s+\K\\.*?bf + Enter)
c \textit
ESC :w + Enter

emacs

  • На самом деле не редактор, а среда для исполнения программ на особом диалекте языка LISP, в которую встроен убогий редактор по умолчанию.
    Можно туда установить vim.
  • Медленный на больших файлах.
  • Медленный в принципе.
  • Встроен тетрис.
  • Тут можно жить: настроить веб-браузер, почтовый клиент, vim, IRC, программу для TODO, и будет единая среда, в которой всё на одном языке и легко настраивается.